【问题标题】:Ansible & Jinja2: Convert two lists into key, value dictAnsible & Jinja2:将两个列表转换为键、值字典
【发布时间】:2018-08-17 08:19:04
【问题描述】:

我想在 Ansible 中将两个列表组合成一个键值字典。

我有以下列表(AWS 资源 ID):

ok: [localhost] => {
    "vpc_natgw_ids": [
        [
            "vpc-123",
            "vpc-234",
            "vpc-345",
            "vpc-456"
        ],
        [
            "nat-098",
            "nat-987",
            "nat-876",
            "nat-765"
        ]
    ]
}

第一个列表中的第一项对应第二个列表中的第一项,第二项对应另一个第二项,依此类推。

我想将这两个列表结合起来得到一个像这样的字典:

ok: [localhost] => {
    "vpc_natgw_ids_dict": [
        "vpc-123": "nat-098",
        "vpc-234": "nat-987",
        "vpc-345": "nat-876",
        "vpc-456": "nat-765"
    ]
}

我将如何实现这样的目标?

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    例如这样:

    set_fact:
      vpc_natgw_ids_dict: "{{ dict(vpc_natgw_ids[0] | zip(vpc_natgw_ids[1])) }}"
    

    【讨论】:

    • 谢谢你,技术人员!
    【解决方案2】:

    IRC 用户 seschwar 在 freenode.net 上的#ansible 中发布的另一个解决方案也可以使用 Jinja2:

    - set_fact:
        vpc_natgw_ids_dict: >-
          {%- set ns = namespace(ids={}) -%}
          {%- for i in vpc_natgw_ids[0] -%}
            {{- ns.ids.__setitem__(vpc_natgw_ids[0][loop.index0], vpc_natgw_ids[1][loop.index0]) -}}
          {%- endfor -%}
          {{- ns.ids -}}
    - debug:
        var: vpc_natgw_ids_dict
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多