如何在ansible中循环嵌套字典?

时间:2020-03-09 13:30:46

标签: ansible jinja2

如何翻阅这本词典?

# 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模块。

我仍然希望有一种完全可行的方法。

1 个答案:

答案 0 :(得分:1)

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'}"