I’m trying to get key values from one dict list and insert them into the dictionaries on another dict list if one of the keys match jinja is not liking this.
using ansible-core 2.15.11 with community.general and posix collections on rhel 7 using python 3.9.19
dict liet 1
<code>"vcenterinfo": [
{
"AZ": "a",
"POD": "11",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": "b",
"POD": "09",
"VCENTERNAME": "XGM1AQV09"
}
]
</code>
<code>"vcenterinfo": [
{
"AZ": "a",
"POD": "11",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": "b",
"POD": "09",
"VCENTERNAME": "XGM1AQV09"
}
]
</code>
"vcenterinfo": [
{
"AZ": "a",
"POD": "11",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": "b",
"POD": "09",
"VCENTERNAME": "XGM1AQV09"
}
]
dict list 2:
<code>"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]
</code>
<code>"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]
</code>
"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]
Any help greatley appreciated.
Desired results:
<code>
"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09",
"AZ": "b",
"POD": "09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
}
]
</code>
<code>
"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09",
"AZ": "b",
"POD": "09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
}
]
</code>
"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09",
"AZ": "b",
"POD": "09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
}
]
I tried this first and iet just errors out
<code> provdata: "{{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}"
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: unexpected ','. String: {{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}. unexpected ','"}
</code>
<code> provdata: "{{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}"
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: unexpected ','. String: {{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}. unexpected ','"}
</code>
provdata: "{{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}"
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: unexpected ','. String: {{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}. unexpected ','"}
I then tried this but the AZ values is empty and looks to be a list
<code>- name: Create a new list
vars:
azdata: "{{ item | combine({AZ: vcenterinfo | selectattr(VCENTERNAME, equalto, item.VCENTERNAME) | map(attribute=AZ) }) }}"
set_fact:
list4: "{{ list4 | default([]) + [azdata] }}"
loop: "{{ provdata }}"
"list4": [
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]
</code>
<code>- name: Create a new list
vars:
azdata: "{{ item | combine({AZ: vcenterinfo | selectattr(VCENTERNAME, equalto, item.VCENTERNAME) | map(attribute=AZ) }) }}"
set_fact:
list4: "{{ list4 | default([]) + [azdata] }}"
loop: "{{ provdata }}"
"list4": [
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]
</code>
- name: Create a new list
vars:
azdata: "{{ item | combine({AZ: vcenterinfo | selectattr(VCENTERNAME, equalto, item.VCENTERNAME) | map(attribute=AZ) }) }}"
set_fact:
list4: "{{ list4 | default([]) + [azdata] }}"
loop: "{{ provdata }}"
"list4": [
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]