【问题标题】:ansible nested loop over a single dict单个dict上的ansible嵌套循环
【发布时间】:2020-03-12 15:14:37
【问题描述】:

我有一个像这样的字典列表:

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

我该怎么做?

【问题讨论】:

    标签: list loops dictionary ansible


    【解决方案1】:

    也许它可以在 1 个任务中完成,但我会这样做:

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

    代码:

    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
            }
        ]
    }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多