I would like to match a particular keyword(destCidr) from abc.yml and input.yml(subnetname) and fetch the pertaining id value from input.yml and create a new JSON. I am trying to get the expected result as mentioned below, but i dont know where i am doing wrong.
abc.yml
rules:
- rule number: "1"
destCidr: "OBJ({{DNS}}) , 10.22.22.0/24"
- rule number: "2"
destCidr: "OBJ({{ NTP }}) , 10.33.33.0/24"
- rule number: "3"
destCidr: "OBJ({{ NET }}), GRP({{ NTP }}) , 10.33.33.0/24"
input.yml
[
{
"id": "11155588779966",
"subnetname": "DNS"
},
{
"id": "99996688778855",
"subnetname": "NTP"
},
{
"id": "123456789101112",
"subnetname": "NET"
}
]
playbook.yml
- include_vars:
file: "{{ item }}.yml"
loop:
- abc
- name:
set_fact:
rule: >-
{{
rule | default([])
+ [ item | combine({'destCidr': dest_po_map[0]})]
}}
loop: "{{ rules | list}}"
vars:
dest_po_map: >-
{{
input
| selectattr('subnetname', 'in' , item.destCidr | string)
| map(attribute='id')
| default([])
}}
Expected Result
[
{
"rule number": "1",
"destCidr": "OBJ(11155588779966), 10.22.22.0/24 "
},
{
"rule number": "2",
"destCidr": "OBJ(99996688778855), 10.33.33.0/24"
},
{
"rule number": "3",
"destCidr": "OBJ(123456789101112), GRP(99996688778855), 10.33.33.0/24 "
}
]