Ansible循环顺序with_nested多个数组
Ansible loop sequentially with_nested multiple array
我想使用 with_nested 但顺序使用 2 个不同的数组,
设备:
- 数据:/dev/vdb
- 数据:/dev/vdc
主机名:
- 主机 1
- 主机2
- host3
我正在尝试使用这种方式
- name: debug
debug: msg="{{ item[0] }} {{ item[1] }}"
with_nested:
- "{{ devices }}"
- "{{ hostname }}"
但结果是这样的:
- /dev/vdb host1
- /dev/vdb host2
- /dev/vdb host3
- /dev/vdc host1
- /dev/vdc host2
- /dev/vdc host3
我期望这样的结果:
- /dev/vdb host1
- /dev/vdc host1
- /dev/vdb host2
- /dev/vdc host2
- /dev/vdb host3
- /dev/vdc host3
这是一个嵌套的样子,相当于:
对于设备中的项目 0:
对于主机名中的 item1:
打印(item0,item1)
对于 devices
中的每个项目,它将遍历 hostname
中的所有项目...给出您所描述的准确结果。您仍然会得到与预期相同的配对列表,只是顺序不同。
如果将参数反转为 with_nested
,如下所示:
- name: debug
debug:
msg: "{{ item[0] }} {{ item[1] }}"
with_nested:
- "{{ hostname }}"
- "{{ devices }}"
你会得到你想要的顺序的对,尽管交换了:
PLAY [localhost] *****************************************************************************************************************************************************************************
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => (item=['host1', '/dev/vdb']) => {
"msg": "host1 /dev/vdb"
}
ok: [localhost] => (item=['host1', '/dev/vdc']) => {
"msg": "host1 /dev/vdc"
}
ok: [localhost] => (item=['host2', '/dev/vdb']) => {
"msg": "host2 /dev/vdb"
}
ok: [localhost] => (item=['host2', '/dev/vdc']) => {
"msg": "host2 /dev/vdc"
}
ok: [localhost] => (item=['host3', '/dev/vdb']) => {
"msg": "host3 /dev/vdb"
}
ok: [localhost] => (item=['host3', '/dev/vdc']) => {
"msg": "host3 /dev/vdc"
}
PLAY RECAP ***********************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我想使用 with_nested 但顺序使用 2 个不同的数组,
设备:
- 数据:/dev/vdb
- 数据:/dev/vdc
主机名:
- 主机 1
- 主机2
- host3
我正在尝试使用这种方式
- name: debug
debug: msg="{{ item[0] }} {{ item[1] }}"
with_nested:
- "{{ devices }}"
- "{{ hostname }}"
但结果是这样的:
- /dev/vdb host1
- /dev/vdb host2
- /dev/vdb host3
- /dev/vdc host1
- /dev/vdc host2
- /dev/vdc host3
我期望这样的结果:
- /dev/vdb host1
- /dev/vdc host1
- /dev/vdb host2
- /dev/vdc host2
- /dev/vdb host3
- /dev/vdc host3
这是一个嵌套的样子,相当于:
对于设备中的项目 0: 对于主机名中的 item1: 打印(item0,item1)
对于 devices
中的每个项目,它将遍历 hostname
中的所有项目...给出您所描述的准确结果。您仍然会得到与预期相同的配对列表,只是顺序不同。
如果将参数反转为 with_nested
,如下所示:
- name: debug
debug:
msg: "{{ item[0] }} {{ item[1] }}"
with_nested:
- "{{ hostname }}"
- "{{ devices }}"
你会得到你想要的顺序的对,尽管交换了:
PLAY [localhost] *****************************************************************************************************************************************************************************
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => (item=['host1', '/dev/vdb']) => {
"msg": "host1 /dev/vdb"
}
ok: [localhost] => (item=['host1', '/dev/vdc']) => {
"msg": "host1 /dev/vdc"
}
ok: [localhost] => (item=['host2', '/dev/vdb']) => {
"msg": "host2 /dev/vdb"
}
ok: [localhost] => (item=['host2', '/dev/vdc']) => {
"msg": "host2 /dev/vdc"
}
ok: [localhost] => (item=['host3', '/dev/vdb']) => {
"msg": "host3 /dev/vdb"
}
ok: [localhost] => (item=['host3', '/dev/vdc']) => {
"msg": "host3 /dev/vdc"
}
PLAY RECAP ***********************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0