Альтернативный вопрос для этого поста: как получить доступ к значениям dict для гнезда, в частности в ansible_facts.packages?
Я бы хотел определить точную версию программного обеспечения, установленного на хосте. Если оно ниже желаемого, мне нужно скопировать RPM из локального репо и обновить. Мне трудно понять, как получить доступ к вложенному dict, который вы получаете при запуске package_facts.
Я вижу, что package_facts возвращает данные примерно так:
"msg": {
...
"NessusAgent": [
{
"arch": "x86_64",
"epoch": null,
"name": "NessusAgent",
"release": "es7",
"source": "rpm",
"version": "6.11.1"
}
],
...
Вот моя попытка воспроизведениясохранить значение для 'version' в переменной ...
- name: check installed software
package_facts:
manager: auto
- name: check installed version
set_fact:
sw_ver_installed: "{{ item.value.version }}"
with_dict: "{{ ansible_facts.packages['NessusAgent'] }}"
- name: debug - sw_ver_installed
debug:
var: sw_ver_installed
..., которая завершается с этой ошибкой:
"Задача включает параметр с неопределеннымПеременная. Ошибка была: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText объект' не имеет атрибута 'версия
Я пробовал несколько вариантов, которые терпят неудачу с такими же или похожими ошибками, или сбрасывает весьk / v набор данных для NessusAgent. Я отказался от простых примеров диктов в документации Ansible