簡體   English   中英

Ansible:如何使用 Jinja2 創建嵌套字典

[英]Ansible: How to create nested dictionary using Jinja2

這是輸出。

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

我正在嘗試使用 jinja2 獲得以下輸出

"containerlist"=>{
            "webproxy": {
                "name": "customer1"
           }, 
            "egacustomer": {
                "name": "registrator"
           }
         }

這是我的 jinja2 代碼。

- set_fact:
      containerlist: |
       {
       {% for item in result.containers %}
       {{ item.Image.split('/')[-1].split(':')[0] | replace('\n', '') }}
            name : {{ item.Names[0][1:] | replace('\n', '') }}
       {% endfor %}
       }

我得到以下輸出。

 "containerlist": "{\nwebproxy\n     name : customer1\negacustome\n     name : registrator\n}"

有人可以幫助我獲得所需的輸出。 任何幫助將不勝感激

下面的任務

    - set_fact:
        containerlist: "{{ containerlist|default({})|
                           combine({key: {'name': name}}) }}"
      loop: "{{ result.containers }}"
      vars:
        key: "{{ (item.Image.split(':')|first).split('/')|last }}"
        name: "{{ item.Names[0][1:] }}"
    - debug:
        var: containerlist

  containerlist:
    egacustomer:
      name: registrator
    webproxy:
      name: customer1

但是,結果不是列表。 這是一本字典。 如果你想要一個列表,使用這個

    - set_fact:
        containerlist: "{{ containerlist|default([]) +
                           [{key: {'name': name}}] }}"
      loop: "{{ result.containers }}"
      vars:
        key: "{{ (item.Image.split(':')|first).split('/')|last }}"
        name: "{{ item.Names[0][1:] }}"
    - debug:
        var: containerlist

  containerlist:
  - webproxy:
      name: customer1
  - egacustomer:
      name: registrator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM