Я запускаю задачу на нескольких хостах с регистром и мне нужен один и тот же формат вывода json независимо от того, выполняется ли задача на одном хосте или на нескольких.
- name: Retrieve Software information
win_get_software:
register: facts_software
- name: set fact
set_fact:
software_facts: "{{ facts_software.List }}"
Модуль win_get_softare возвращает данные json.
Приведенный выше пример перезаписывает software_facts последними данными хоста, которые невозможно использовать.
- name: Retrieve Software information
win_get_software:
register: facts_software
- name: set fact
set_fact:
software_facts: "{{ ansible_play_hosts | map('extract', hostvars, facts_software') | map(attribute='List') | list }}"
run_once: yes
delegate_to: 192.168.1.20
delegate_facts: true
В приведенном выше примере корректно установлена переменная, но в виде списка, который выводит следующий формат json:
[
[
{
"TEST-VM": [
{
"ADSPath": "WinNT://DOMAIN/TEST-VM/TestAdmin",
"Class": "User",
"Domain": "DOMAIN",
"IsLocal": true,
"Name": "TestAdmin"
}
]
}
],
[
{
"TEST2-VM": [
{
"ADSPath": "WinNT://DOMAIN/TEST2-VM/TestAdmin",
"Class": "User",
"Domain": "DOMAIN",
"IsLocal": true,
"Name": "TestAdmin"
}
]
}
]
]
Мне нужен следующий вывод:
[
{
"TEST-VM": [
{
"ADSPath": "WinNT://DOMAIN/TEST-VM/TestAdmin",
"Class": "User",
"Domain": "DOMAIN",
"IsLocal": true,
"Name": "TestAdmin"
}
]
},
{
"TEST2-VM": [
{
"ADSPath": "WinNT://DOMAIN/TEST2-VM/TestAdmin",
"Class": "User",
"Domain": "DOMAIN",
"IsLocal": true,
"Name": "TestAdmin"
}
]
}
]
Кто-нибудь знает, как правильно отформатировать результат при работе со списком?