从localhost同步到另一个不是playbook主机的主机

时间:2018-02-07 16:05:22

标签: ansible rsync

我正在为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

1 个答案:

答案 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 }}有助于不对本地系统上的路径进行硬编码。