Используя этот сокращенный пример набора инвентарных хостов:
{
"_meta": {
"hostvars": {
"host-a.foo.com": {
"host_domain": "foo.com",
"subnet_address": "192.168.1.0",
"subnet_mask": "255.255.254.0"
},
"host-b.foo.com": {
"host_domain": "foo.com",
"subnet_address": "192.168.2.0",
"subnet_mask": "255.255.254.0"
},
"host-c.bar.com": {
"host_domain": "bar.com",
"subnet_address": "192.168.2.0",
"subnet_mask": "255.255.254.0"
}
}
}
}
Я пытаюсь создать что-то, представляющее следующее в ansible:
[
{
"192.168.1.0": {
"mask": "255.255.254.0",
"domains": [
"foo.com"
]
},
"192.168.2.0": {
"mask": "255.255.254.0",
"domains": [
"foo.com",
"bar.com"
]
}
}
]
Пока что у меня есть это, но я не уверен, как добавить в список доменов для каждого элемента словаря (вместо того, чтобы перезаписать его):
- name: inventory subnets
set_fact:
inventory_subnets: "{{ inventory_subnets | default({}) | combine({
hostvars[item].subnet_address: {
'mask': hostvars[item]['subnet_mask'],
'domains': [
# How to build this list?
]
}
}) }}"
loop: "{{ query('inventory_hostnames', 'all') }}"
Можно ли как-то выполнить другое объединение в определении словаря?