繁体   English   中英

在 Jinja2 模板中循环 Ansible 变量数组以创建嵌套字典

[英]Loop over Ansible variable array in Jinja2 template to create nested dictionary

这是 output。

"result.containers":[
   {
      "Image":"ca.docker/webproxy:1.0.0",
      "Names":[
         "/customer1"
      ]
   },
   {
      "Image":"docker.local/egacustomer:1.0.1",
      "Names":[
         "/webproxy"
      ]
   }
]

我正在尝试使用 jinja2 创建一个嵌套字典。 我正在尝试使用 results.container 和 setfact 来实现以下目标。

"containerlist": "[webproxy:
                     name: customer1,
                   egacustomer:
                     name: webproxy]"

这是我的 jinja2 代码。

- set_fact:
      containerlist: |
           [
           {% for item in result.containers %}
           {{ item.Image | regex_replace('.*?/(.*?):.*', '\\1') }}:
                     'name': {{ item.Names | regex_replace("^/", "") }},
           {% endfor %}
         

这会引发错误。 有人可以帮助我正确的 Jinja2 代码。任何帮助将不胜感激

"containerlist": "[\n\\1:\n          'name': ['/customer'],\n\\1:\n          'name': ['/webproxy'],\n,\n]\n"

对于您要执行的操作,我将规范化使用 Ansible 循环任务,而不是尝试使用 Jinja {% for... %}循环。 例如,这些任务...

    - set_fact:
        container_list: >-
          {{
          container_list + [{
            item.Image.split('/')[-1].split(':')[0]:
              item.Names[0][1:]
          }]
          }}
      loop: "{{ result.containers }}"
      vars:
        container_list: []

    - debug:
        var: container_list

set_fact任务中,我们循环遍历result.containers ,并且对于循环的每次迭代,我们将container_list重新定义为“ container_list的当前内容 + 一个新字典”。

以上产生以下output:

TASK [set_fact] ****************************************************************
ok: [localhost] => (item={'Image': 'ca.docker/webproxy:1.0.0', 'Names': ['/customer1']})
ok: [localhost] => (item={'Image': 'docker.local/egacustomer:1.0.1', 'Names': ['/webproxy']})

TASK [debug] *******************************************************************
ok: [localhost] => {
    "container_list": [
        {
            "webproxy": "customer1"
        },
        {
            "egacustomer": "webproxy"
        }
    ]
}

暂无
暂无

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

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