繁体   English   中英

Ansible&Jinja2:将两个列表转换为键,值dict

[英]Ansible & Jinja2: Convert two lists into key, value dict

我想将两个列表组合成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"
    ]
}

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

例如,这种方式:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM