1

我正在尝试将一堆文件从服务器X(不是控制机器)复制到一组服务器,目标Y1、Y2、...、Yn(在主机文件中定义)

files:
   '-path
       '- files
            '- file1
            '- file2
            '- dir
                '- file_x

我的剧本:

#!/usr/bin/env ansible-playbook
---
vars:
  src_dir: /path/files
hosts: {{ targets }}
tasks:
  - name: copying files
    command: "rsync -avrcz X:{{ src_dir }}/{{ artifacts }} {{ dest_dir }}"

我的命令行:

./playbook.yml -e '{"targets": "targets", "artifacts" : "{file1,file2,dir/file_x}", "dest_dir": "/yserv/dest/path"}'

这行得通,我能够相当不错地并行化,但我不断得到:

[警告]:考虑使用同步模块而不是运行 rsync

有没有办法使用同步模块来实现这一点?Ansible 似乎不喜欢 bash大括号扩展语法。将文件列表作为数组传递并使用with_items是不切实际的,因为它通过为每个文件调用 rsync 来使整个事情顺序化,因此非常慢(要复制的文件列表很大)

4

1 回答 1

1

在您的情况下使用 rsync 更快。唯一的缺点是"changed": false即使 rsync 没有改变任何东西,任务也总是会返回。同步模块确认“根据您的用例,您仍然可能需要通过命令或 shell 直接调用 rsync。” 只是忽略警告。

于 2017-08-25T14:14:08.643 回答