Convert the dictionary management first
- set_fact:
mgmt: "{{ mgmt|d({})|combine({item.key: {'Property4': item.value}}) }}"
loop: "{{ management|dict2items }}"
gives
mgmt:
server1:
Property4: ip1_addr
server2:
Property4: ip2_addr
Then combine the dictionaries
- set_fact:
servers: "{{ servers|combine(mgmt, recursive=True) }}"
gives the desired result
servers:
server1:
Property1: A
Property2: B
Property3: C
Property4: ip1_addr
server2:
Property1: A
Property2: B
Property3: C
Property4: ip2_addr
If you want to iterate the result it's easier to convert both dictionaries to lists
- set_fact:
mgmt: "{{ mgmt|d([]) + [{'server': item.key,
'Property4': item.value}] }}"
loop: "{{ management|dict2items }}"
- set_fact:
srvs: "{{ srvs|d([]) + [{'server': item.key}|combine(item.value)] }}"
loop: "{{ servers|dict2items }}"
give
mgmt:
- Property4: ip1_addr
server: server1
- Property4: ip2_addr
server: server2
srvs:
- Property1: A
Property2: B
Property3: C
server: server1
- Property1: A
Property2: B
Property3: C
server: server2
Then use Community.General filter lists_mergeby
- debug:
msg: "{{ srvs|lists_mergeby(mgmt, 'server') }}"
gives
msg:
- Property1: A
Property2: B
Property3: C
Property4: ip1_addr
server: server1
- Property1: A
Property2: B
Property3: C
Property4: ip2_addr
server: server2