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
这是输出。
"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