|
|||||||
Как в Ansible получить список установленных пакетов
Время создания: 02.03.2022 12:25
Текстовые метки: ansible, пакет, ansible_facts, package, факты
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1646213108isap9gw0aw/text.html на raw.github.com
|
|||||||
|
|||||||
Иногда, чтобы исключить ошибки по управлению пакетами через Ansible, необходимо в команды добавлять условия, которые бы проверяли, установлен тот или иной пакет или нет. Проблема возникает из-за того, что по-умолчанию информация об установленных пакетах не собирается в переменную ansible_facts. Даже если в плейбуке прописать gather_facts: yes, то в информацию о хосте не будет собираться информация об установленных пакетах. Поэтому следующий плейбук будет завершаться ошибкой: - hosts: iksHosts:compilingHost gather_facts: yes tasks: - name: Установленные пакеты debug: msg: "{{ ansible_facts.packages }}" Ошибка: The error was: error while evaluating conditional in ansible_facts.packages: 'dict object' has no attribute 'packages' Чтобы в переменной-словаре ansible_facts появился раздел packages, в плейбук надо добавить следующую задачу: - name: Запрос пакетов, установленных в дистрибутиве ansible.builtin.package_facts: manager: auto После добавления такого кода, в переменной ansible_facts появится ключ packages, и в нем в виде подчиненных элементов будут перечислены имена установленных в систему пакетов. Содержимое будет примерно следующее: "acl": [ { "arch": "amd64", "category": "utils", "name": "acl", "origin": "Debian", "source": "apt", "version": "2.2.52-3" } ], "acpi": [ { "arch": "amd64", "category": "utils", "name": "acpi", "origin": "Debian", "source": "apt", "version": "1.7-1" } ], "acpi-support": [ { "arch": "all", "category": "admin", "name": "acpi-support", "origin": "Debian", "source": "apt", "version": "0.142-8astra1" } ], ... Как видно, помимо имени пакета, о пакете можно узнать много другой полезной информации, например версию и архитектуру. Теперь можно писать команды управления сервисом в системе с учетом того, что пакет вообще присутствует в системе: - name: Остановка PostgreSQL, если он установлен в системе service: name: postgresql state: stopped when: "'postgresql-9.1' in ansible_facts.packages" В некотором смысле такой подход лучше, чем простое подавление ошибки для подобной задачи. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|