我正在尝试通过 ansible 迭代 2 个列表。第一个是包含 2 个项目的静态变量,第二个是包含 25 个项目的寄存器变量。
静态变量
注册变量(从输出中获取)
我期望 1(静态变量)迭代所有 25 个注册变量(一次一个),2 也做同样的事情。
但是,在使用乘积过滤器时,1 不是迭代 1 到 25(一次一个),而是一次迭代全部。这是不希望的,因为我需要将此输出作为参数传递给另一个命令。
给定变量
svar: [1, 2]
dvar: [one, two, three]
声明数据
data: "{{ dict(svar | product([{'dvar': dvar}])) }}"
给予
data:
1:
dvar: [one, two, three]
2:
dvar: [one, two, three]
在循环中,将字典转换为列表并迭代子元素
- debug:
msg: "{{ item.0.key }} {{ item.1 }}"
loop: "{{ data | dict2items | subelements('value.dvar') }}"
给出(删节)
msg: 1 one
msg: 1 two
msg: 1 three
msg: 2 one
msg: 2 two
msg: 2 three
用于测试的完整剧本示例
- hosts: localhost
vars:
svar: [1, 2]
dvar: [one, two, three]
data: "{{ dict(svar | product([{'dvar': dvar}])) }}"
tasks:
- debug:
var: data | to_yaml
- debug:
msg: "{{ item.0.key }} {{ item.1 }}"
loop: "{{ data | dict2items | subelements('value.dvar') }}"