我正在使用两台主机并将它们动态添加到一个组中,然后使用synchronize
进行with_together
任务以并行使用3个2个元素列表来复制两个远程服务器之间的指定文件
这是一个基于这个想法的例子:
---
- name: Configure Hosts for Copying
hosts: localhost
gather_facts: no
tasks:
- name: Adding given hosts to new group...
add_host:
name: "{{ item }}"
groups: copy_group
with_items:
- ["remoteDest1", "remoteDest2"]
- name: Copy Files between servers
hosts: copy_group
gather_facts: no
tasks:
- name: Copying files...
synchronize:
src: "{{ item[1] }}"
dest: "{{ item[2] }}"
with_together:
- ["remoteSrc1", "remoteSrc2"]
- ["/tmp/remote/source/one/", "/tmp/remote/source/two/"]
- ["/tmp/remote/dest/one/", "/tmp/remote/dest/two/"]
delegate_to: "{{ item[0] }}"
目前,它为两台服务器执行两项操作,从而导致4次操作。
我需要它像这样同步:
/tmp/remote/source/one/
上的remoteSrc1
复制/tmp/remote/dest/one/
remoteDest1
/tmp/remote/source/two/
上的remoteSrc2
复制/tmp/remote/dest/two/
remoteDest2
这意味着它是1:1的比例;基本上以with_together
对列表的方式对主机进行操作。
主机是动态获取的,所以我不能为每个主机制作不同的游戏。
由于synchronize
基本上是rsync
的简化版本,如果直接使用rsync
有一个简单的解决方案,那么我们将非常感激。
答案 0 :(得分:0)
这没有本机功能,所以这就是我解决它的方法:
根据原始任务,添加以下两行:
- "{{ groups['copy_group'] }}"
when: inventory_hostname == item[3]
获得:
- name: Copying files...
synchronize:
src: "{{ item[1] }}"
dest: "{{ item[2] }}"
with_together:
- ["remoteSrc1", "remoteSrc2"]
- ["/tmp/remote/source/one/", "/tmp/remote/source/two/"]
- ["/tmp/remote/dest/one/", "/tmp/remote/dest/two/"]
- "{{ groups['copy_group'] }}"
delegate_to: "{{ item[0] }}"
when: inventory_hostname == item[3]
基本上,通过将主机添加为列表,只有当前主机(when
)与列表中当前正在编入索引的主机匹配时,才能在inventory_hostname
语句中使用它们来执行任务。
结果是该播放仅以串行方式对每个主机运行一次,其他列表项具有相同的索引。