我是Ansible和YAML语法的新手,并且面临一个简单的问题:如何使用相同的索引遍历两个列表?
像这样:
int[] listOne;
int[] listTwo;
--- Attribute some values to the lists ----
for(int i = 0; i < 10; i++){
int result = listOne[i] + listTwo[i];
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我正在尝试将一些值分配给route53模块,它们位于不同的列表中。
反正有做吗?我刚发现循环遍历单个列表或嵌套列表的循环。
您可以使用loop和zip过滤器来做到这一点:
- name: Loop over two lists
vars:
list_one: [1, 2, 3]
list_two: [one, two, three]
ansible.builtin.debug:
msg: "{{ item.0 }} - {{ item.1 }}"
loop: "{{ list_one | zip(list_two) | list }}"
Run Code Online (Sandbox Code Playgroud)
输出:
TASK [Loop over two lists] ***************************************************
ok: [192.168.0.1] => (item=[1, 'one']) => {
"msg": "1 - one"
}
ok: [192.168.0.1] => (item=[2, 'two']) => {
"msg": "2 - two"
}
ok: [192.168.0.1] => (item=[3, 'three']) => {
"msg": "3 - three"
}
Run Code Online (Sandbox Code Playgroud)
对于超过 2 个列表,也只需将它们传递给zip过滤器即可:
loop: "{{ list_one | zip(list_two, list_three, list_four) | list }}"
Run Code Online (Sandbox Code Playgroud)
如果您想将列表组合为笛卡尔积,只需替换zip为product:
loop: "{{ list_one | product(list_two, list_three, list_four) | list }}"
Run Code Online (Sandbox Code Playgroud)
对于上面的示例,输出将是:
TASK [Loop over two lists] ************************
ok: [192.168.0.1] => (item=[1, 'one']) => {
"msg": "1 - one"
}
ok: [192.168.0.1] => (item=[1, 'two']) => {
"msg": "1 - two"
}
ok: [192.168.0.1] => (item=[1, 'three']) => {
"msg": "1 - three"
}
ok: [192.168.0.1] => (item=[2, 'one']) => {
"msg": "2 - one"
}
ok: [192.168.0.1] => (item=[2, 'two']) => {
"msg": "2 - two"
}
ok: [192.168.0.1] => (item=[2, 'three']) => {
"msg": "2 - three"
}
ok: [192.168.0.1] => (item=[3, 'one']) => {
"msg": "3 - one"
}
ok: [192.168.0.1] => (item=[3, 'two']) => {
"msg": "3 - two"
}
ok: [192.168.0.1] => (item=[3, 'three']) => {
"msg": "3 - three"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6378 次 |
| 最近记录: |