Короче говоря, вы можете получить результат с помощью одного выражения без каких-либо циклов.
Следующий сборник игр:
---
- хосты: локальный
сбор_фактов: ложь
вары:
# Ваши исходные данные в одну строку для удобочитаемости
результат_кластеры:
стандартный вывод: >-
{"clusters":{"Cluster_1":{"hosts":[{"folder":"/path","name":"host1.domain.com"},{"folder":"/path"," имя":"host2.domain.com"}]},"Cluster_2":{"hosts":[{"папка":"/путь","имя":"host3.domain.com"},{"папка ":"/путь","имя":"host4.domain.com"}]}}}
задачи:
- имя: получить ожидаемый результат из данных json в одной задаче
вары:
запрос: >-
[].{name: key, hosts: join(', ', value.hosts[].name)}
кластеры: "{{ (result_clusters.stdout | from_json).clusters }}"
отлаживать:
msg: "{{ кластеры | dict2items | json_query (запрос) }}"
Дает:
ИГРАТЬ [localhost] **************************************************** ********
ЗАДАЧА [получить ожидаемый результат из данных json в одной задаче] *********
хорошо: [локальный хост] => {
"сообщение": [
{
"hosts": "host1.domain.com, host2.domain.com",
"имя": "Кластер_1"
},
{
"hosts": "host3.domain.com, host4.domain.com",
"имя": "Кластер_2"
}
]
}
ОБЗОР ИГРЫ ******************************************************* ************
localhost: ok=1 изменено=0 недостижимо=0 не удалось=0 пропущено=0 спасено=0 проигнорировано=0
Примечание: хотя приведенное выше дает очень точно тот результат, который вы просили, я сильно подозреваю, что вы ищете немного другой результат. Заменив приведенный выше запрос на:
запрос: >-
[].{имя: ключ, хосты: value.hosts[].название}
вместо этого даст это:
ЗАДАЧА [получить ожидаемый результат из данных json в одной задаче] *************************************** ******************************************************* ******************************************************* *************************************
хорошо: [локальный хост] => {
"сообщение": [
{
"хозяева": [
"host1.domain.com",
"host2.domain.com"
],
"имя": "Кластер_1"
},
{
"хозяева": [
"host3.домен.com",
"host4.domain.com"
],
"имя": "Кластер_2"
}
]
}