依次与多个嵌套数组嵌套的Ansible循环

问题描述

我想使用with_nested但要顺序使用2个不同的数组,

设备:

  • 数据:/ dev / vdb
  • 数据:/ dev / vdc

主机名:

  • host1
  • host2
  • 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

解决方法

这是一个嵌套外观,等效于:

对于设备中的item0: 对于主机名中的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   

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...