单个字典上的嵌套嵌套循环

时间:2019-11-16 19:31:36

标签: list loops dictionary ansible

我有类似dict的列表:

- { "a": "zzz", "b": [1, 2] }
- { "a": "yyy", "b": [7, 9] }

我需要ansible来遍历它,以便项目可以连续进行:

- { "a": "zzz", "b": 1 }
- { "a": "zzz", "b": 2 }
- { "a": "yyy", "b": 7 }
- { "a": "yyy", "b": 9 }

我该怎么办?

1 个答案:

答案 0 :(得分:1)

也许可以在一项任务中完成,但是这是我的方法:

对于“主”列表,您需要1个循环,对于“ b”键的列表,则需要1个动态循环。我们将使用include_tasks任务来处理“主”列表的每个字典,然后在包含的任务文件中仅使用set_fact来循环“ b”键,并填充变量。 / p>

代码:

main.yml

---
- hosts: localhost
  gather_facts: false
  vars:
    source_var:
    - { "a": "zzz", "b": [1, 2] }
    - { "a": "yyy", "b": [7, 9] }

  tasks:

  - name: print var
    include_tasks: "set_fact.yml"
    with_items: "{{ source_var }}"
    loop_control:
      loop_var: itemoflist

  - name: print var
    debug:
      var: target_var

包含的PB,称为set_fact.yml

- name: populate_var
  set_fact:
    target_var: "{{ target_var | default([]) + [{ 'a': itemoflist.a, 'b': item }] }}"
  with_items:
    - "{{ itemoflist['b'] }}"

已创建变量:

TASK [print var] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "target_var": [
        {
            "a": "zzz",
            "b": 1
        },
        {
            "a": "zzz",
            "b": 2
        },
        {
            "a": "yyy",
            "b": 7
        },
        {
            "a": "yyy",
            "b": 9
        }
    ]
}

希望有帮助。