我正在为host_a
运行Ansible剧本。我委派给host_b
的一些任务。
现在,我想使用synchronize模块将目录从localhost
复制到host_b
。但delegate_to
这是错误的选项,因为这会导致从host_b
复制到host_a
。
是否有可能这样做?
- hosts: host_a
tasks:
- name: rsync directory from localhost to host_b
synchronize:
# files on localhost
src: files/directory
dest: /directory/on/host_b
# delegate_to does not work here
# delegate_to: host_b
我能想到的唯一解决方案是删除目标目录,然后使用带有复制模块的递归副本。
我在模块文档中找不到任何内容。
(使用ansible 2.4.2.0)
在自己的host_b
游戏中执行此任务也不是一个选项,因为此任务所需的变量取决于host_a
。
答案 0 :(得分:1)
在这种情况下最简单的解决方案是使用带local_action的rsync命令,即
- hosts: cache1
tasks:
- name: rsync directory from localhost to host_b
local_action: command rsync -az "{{ playbook_dir }}/files/directory" "{{ hostvars['host_b']['ansible_host'] }}:/directory/on/host_b"
{{ playbook_dir }}
有助于不对本地系统上的路径进行硬编码。