Моя основная проблема заключается в том, что при создании набора aws-серверов я хочу настроить их, чтобы они знали друг о друге.
После создания каждого сервера их данные сохраняются в зарегистрированном "сервере" var (показано ниже). То, что я действительно хочу сделать после создания, запускает такую задачу:
- name: Add servers details to all other servers
lineinfile:
dest: /path/to/configfile
line: "servername={{ item.1.private_ip }}"
delegate_to: "{{ item.0.public_dns_name }}"
with_nested:
- list_of_servers
- list_of_servers
Присвоение списка дважды "to_nested" имеет важное значение.
Получение списка списка достаточно просто:
"{{ servers.results | map(attribute='tagged_instances') | list }}"
который возвращает:
[
[ { "private_ip": "ip1", "public_dns_name": "dns1" } , { ... }],
[ { ... }, { ... } ]
]
но как бы вы превратили это в:
[
{ "private_ip": "ip1", "public_dns_name": "dns1" },
{ ... },
{ ... },
{ ... }
]
Зарегистрированный "сервер" var выглядит следующим образом:
"servers": {
"changed": true,
"msg": "All items completed",
"results": [
{
...
"tagged_instances": [
{
...
"private_ip": "ip1",
"public_dns_name": "dns1",
...
},
{
...
"private_ip": "ip2",
"public_dns_name": "dns2",
...
}
]
},
{
...
"tagged_instances": [
{
...
"private_ip": "ip3",
"public_dns_name": "dn3",
...
},
{
...
"private_ip": "ip4",
"public_dns_name": "dns4",
...
}
]
},
...
]
}
Примечание. У меня есть довольно уродливое решение, используя "with_flattened" и инструкцию debug для создания нового зарегистрированного var 'flattened_servers', который затем я снова сопоставляю. Но я надеюсь на более элегантное решение:)