Ansible中的双重迭代
我如何通过字典列表进行迭代,并将字典键中的每个列表分配给带有_items的Ansible中的双重迭代,ansible,Ansible,我如何通过字典列表进行迭代,并将字典键中的每个列表分配给带有_items的,然后通过该列表进行迭代:例如: - name: "Deploy" template: src: "myfile" dst: "{{ item }}/myfile" //"item" is "mypath1", "mypath2".. with_items: {{ item.
,然后通过该列表进行迭代:例如:
- name: "Deploy"
template:
src: "myfile"
dst: "{{ item }}/myfile" //"item" is "mypath1", "mypath2"..
with_items: {{ item.paths }}
loop:
- {group: "mygroup1", paths: ["mypath1", "mypath2"]}
- {group: "mygroup2", paths: ["mypath3", "mypath4"]}
when: "{{ item.group }} in group_names"
使用。例如,给定库存
shell>cat主机
[我的分组1]
srv1
[我的分组2]
srv2
剧本
shell>cat pb1.yml
-主机:srv1、srv2
任务:
-名称:部署
调试:
msg:{{inventory_hostname}}:在{{item.1}}/myfile创建myfile
带_子元素:
-“{{{u list}}”
-路径
时间:组名称中的item.0.group
变量:
_名单:
-{组:mygroup1,路径:[mypath1,mypath2]}
-{组:mygroup2,路径:[mypath3,mypath4]}
给予
msg:'srv1:在mypath1/myfile中创建myfile'
msg:'srv1:在mypath2/myfile中创建myfile'
msg:'srv2:在mypath3/myfile中创建myfile'
msg:'srv2:在mypath4/myfile中创建myfile'
你最好用字典,而不是单子。例如,下面的剧本使用一个简单的循环给出了相同的结果
shell>cat pb2.yml
-主机:srv1、srv2
任务:
-名称:部署
调试:
msg:{{inventory_hostname}}:在{{item}}/myfile创建myfile
循环:{{group_names | map('extract',dict)| flatten}
变量:
_格言:
mygroup1:[mypath1,mypath2]
mygroup2:[mypath3,mypath4]
但是,可行的方法是将数据放入组变量中。比如说
shell>cat group\u vars/mygroup1.yml
我的路径:[我的路径1,我的路径2]
外壳>cat组\u变量/mygroup2.yml
我的路径:[mypath3,mypath4]
下面的简单剧本给出了相同的结果
shell>cat pb3.yml
-主机:srv1、srv2
任务:
-名称:部署
调试:
msg:{{inventory_hostname}}:在{{item}}/myfile创建myfile
循环:{{my_path}}”