【问题标题】:Ansible Copy FilesAnsible 复制文件
【发布时间】:2016-10-11 20:24:57
【问题描述】:

我正在尝试将一堆文件从服务器 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 brace expansion 语法。将文件列表作为数组传递并使用 with_items 是不切实际的,因为它通过为每个文件调用 rsync 来使整个事情顺序化,因此非常慢(要复制的文件列表很大) p>

【问题讨论】:

  • 您是否只需要从files 向下复制那些文件而不是整个目录结构?
  • @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 命令

标签: ansible rsync synchronize brace-expansion


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    相关资源
    最近更新 更多