我有k:v字典,其主机名:IP,我想在另一个字典中查找以替换与第一个字典中的键匹配的条目,并将其替换为第二个字典中的对应值;
第一:
"nb_console_ip": {
"office-con01": "10.20.30.100",
第二:
"nb_console_port": [
{
"console": "office-con01",
"hostname": "office-core01",
"port": "con1"
},
{
"console": "office-con01",
"hostname": "office-core02",
"port": "con2"
},
{
"console": "office-con01",
"hostname": "office-fw01",
"port": "con5"
},
{
"console": "office-con01",
"hostname": "office-fw02",
"port": "con6"
},
{
"console": "office-con01",
"hostname": "office-vpn01",
"port": "con3"
},
{
"console": "office-con01",
"hostname": "office-vpn02",
"port": "con4"
}
]
基本上,我试图通过查找office-con01
并将10.20.30.100
替换为{{1}}来获取第二个字典的set_fact,但要列出30多个主机。
原因是我有一个Jinja模板,将使用console_ip,主机名和端口的3个值。
我在想,也许里面有更合适的过滤器用于查找,查找,替换等。
两组数据都是从API调用返回时json_query的结果。
答案 0 :(得分:1)
可以在每次迭代中循环#app {
height: 100%;
min-height: 100vh;
}
并替换include_tasks
。例如,使用任务替换外部循环提交的k:v
创建文件
outer_item.key: outer_item.value
然后,下面的剧本完成这项工作。变量shell> cat test-task.yml
- set_fact:
nb_console_port: "{{ nb_console_port|difference([item]) +
[dict(my_keys|zip(my_values2))] }}"
vars:
my_keys: "{{ item.keys()|list }}"
my_values: "{{ item.values()|list }}"
my_values2: "{{ my_values|
map('regex_replace', outer_item.key, outer_item.value)|
list }}"
loop: "{{ nb_console_port }}"
存储在文件nb_console_port
test-data.yml