Как l oop над вложенным словарем в ansible? - PullRequest
2 голосов
/ 09 марта 2020

Как я могу l oop над этим словарем?

# nested dictionary to loop over:
  vars:
    commands:
      group1:
        cmd1:
          run: foo
        cmd2:
          run: bar
      group2:
        cmd3:
          run: zoo

# expected loop:
- group1, cmd1={...}
- group1, cmd2={...}
- group2, cmd4={...}

Я пытался использовать различные комбинации dict2items и with_nested, но до сих пор мне не удалось достичь этой цели, и я действительно хотел бы избегайте использования циклов с включаемыми задачами или написания модуля python, который выполняет выравнивание.

Я все еще надеюсь, что есть чистый - ansible способ сделать это.

1 Ответ

1 голос
/ 09 марта 2020

Возможно loop заданий, включенных included_tasks. Например, файл

shell> cat inner-loop.yml
- debug:
    msg: "{{ outer_item.key }}, {{ item.key }}={{ item.value }}"
  loop: "{{ outer_item.value|dict2items }}"

, включенный в задачу

    - include_tasks: inner-loop.yml
      loop: "{{ commands|dict2items }}"
      loop_control:
        loop_var: outer_item

, дает

    "msg": "group1, cmd1={u'run': u'foo'}"
    "msg": "group1, cmd2={u'run': u'bar'}"
    "msg": "group2, cmd3={u'run': u'zoo'}"
...