Ansible Copy Files

时间:2016-10-11 20:24:58

标签: ansible rsync synchronize brace-expansion

我正在尝试将一堆文件从服务器 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来使整个事件顺序,因此非常慢(有很多要复制的文件列表)

1 个答案:

答案 0 :(得分:1)

在你的情况下使用rsync更快。唯一的缺点是,即使rsync没有改变任何内容,任务也将始终返回"changed": falseSynchronize module确认“您仍然需要根据您的用例直接通过命令或shell调用rsync。”只是忽略警告。