Ansible 可复制文件

Ansible 可复制文件,ansible,rsync,synchronize,brace-expansion,Ansible,Rsync,Synchronize,Brace Expansion,我正在尝试将一组文件从服务器X(非控制计算机)复制到一组服务器,目标:Y1,Y2,…,Yn(在主机文件中定义) 我的剧本: #!/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

我正在尝试将一组文件从服务器X(非控制计算机)复制到一组服务器,目标:Y1,Y2,…,Yn(在主机文件中定义)

我的剧本:

#!/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_项是不实际的,因为它通过为每个文件调用rsync使整个过程有序,因此速度非常慢(有大量文件要复制)

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

您是否只需要从
文件
向下复制这些文件而不复制整个目录结构?@XiongChiamiov感谢您的回复。是的,这是一个非常有效的问题,但我要求目标目录/文件层次结构略有不同。因此,如果在X上有:/store/a/b/c/{d,e}/{f11,f12…},那么在/store/a/b级别也有文件,比如X_1,X_2。。。在我想要的目的地上:/home/xuser/b/{d,e,f1}/{f11,f12,…}和/home/xuser/b/{x_1,x_2..}。因此,实际上,在大括号扩展中,我传递了{x_1,x_2,c/d,c/e}不使用同步模块,即使对于版本2.3,它也有缺陷,更喜欢rsync命令
./playbook.yml -e '{"targets": "targets", "artifacts" : "{file1,file2,dir/file_x}", "dest_dir": "/yserv/dest/path"}'