Ansible中是否有办法将基于k:v查找的字典值替换为另一个字典?

时间:2020-03-06 16:40:42

标签: replace ansible jinja2 json-query

我有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的结果。

1 个答案:

答案 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