我有两个列表要循环在一起。一个包含一个主机列表,第二个包含一个列表列表,其中嵌套列表是一组用于在每个主机上重复执行任务的项目。这是一个简单的示例:
主机列表
hosts:
- host1
- host2
要在每个主机上执行的操作的列表。 hosts
和ops
列表的长度相同,因此op1
和op2
应该在host1
上执行,而op{3,4,5}
应该被执行在host2
上。
ops:
-
- op1
- op2
-
- op3
- op4
- op5
然后,我想使用这两个列表来重复执行任务
- name: my task
module: "{{ item.1 }}"
delegate_to: "{{ item.0 }}"
with_together:
- hosts
- ops
不幸的是,这不起作用,因为item.1
是一个列表(我想为每个操作重复my_task
)。而且类似with_nested
的东西也不起作用,因为我不想在每个主机上重复<{>} 上的所有操作。
我希望有一个简洁的解决方案,以便避免构建一些中间数据结构。
答案 0 :(得分:0)
您必须像这样重新格式化文件:
ops:
- list:
- ops1
- ops1
- list:
- ops3
- ops4
- ops5
然后
- name: my task
module: "{{ item[1] }}.*:ALL"
delegate_to: "{{ item[0] }}"
with_together:
- "{{ hosts }}"
- "{{ ops.list }}"
使用我的手机,所以检查缩进。
答案 1 :(得分:0)
最简单的方法是将这些列表放入host_vars/host1
和host_vars/host2
中。
所以host_vars/host1
:
ops:
- op1
- op2
还有host_vars/host2
:
ops:
- op3
- op4
- op5
那么您的游戏就可以是:
- name: my task
module: "{{ item }}"
with_items: "{{ ops }}"