Цикл Ansible последовательно with_nested множественный массив

Я хочу использовать with_nested, но с двумя разными массивами последовательно,

устройства:

  • данные: / 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

person Nicolas Julian    schedule 28.08.2020    source источник


Ответы (1)


Это вложенный вид, эквивалентный:

для item0 в устройствах: для item1 в имени хоста: print (item0, item1)

Для каждого элемента в devices он будет перебирать все элементы в _2 _..., давая точно те результаты, которые вы описали. Вы по-прежнему получаете тот же список пар, что и ожидаете, только в другом порядке.

Если вы измените аргументы на 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   

person larsks    schedule 28.08.2020