首页 > 解决方案 > 如何在ansible中循环嵌套字典?

问题描述

我怎样才能遍历这本字典?

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

我仍然希望有一种纯粹的方法来做到这一点。

标签: ansiblejinja2

解决方案


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

推荐阅读