Итак, я пишу сборник рассказов, который удаляет некоторые пакеты ОС (в данном случае все пакеты RedHat ABRT), а затем проверяет, были ли они удалены.Деинсталляция не является проблемой (она работает нормально), но мне нужно проверить, действительно ли пакеты были деинсталлированы, а затем сделать что-то другое в зависимости от этого.
Это на машине RedHat 6.9, и я использую Ansible 2.6.
- name: list installed ABRT packages
yum:
list: abrt*
register: abrt_packages
when: ansible_os_family == "RedHat"
- name: get package info
set_fact:
packages_installed: "{{abrt_packages|json_query(jsonquery)}}"
vars:
jsonquery: "results[?yumstate=='installed']"
- debug:
var: packages_installed
При запуске приведенного выше кода, я не получаю вывод - это означает, что нет пакетов с "yumstate": "Установлено" (несмотря на то, что они фактически установлены):
user1@server1: [~]$ rpm -qa | grep abrt
abrt-python-2.0.8-43.el6.x86_64
abrt-addon-ccpp-2.0.8-43.el6.x86_64
abrt-addon-kerneloops-2.0.8-43.el6.x86_64
abrt-cli-2.0.8-43.el6.x86_64
abrt-libs-2.0.8-43.el6.x86_64
abrt-addon-python-2.0.8-43.el6.x86_64
abrt-2.0.8-43.el6.x86_64
abrt-tui-2.0.8-43.el6.x86_64
Yum также показывает их как установленные.
Если я изменю jsonquery на:
jsonquery: "results"
, тогда я получаю это:
ok: [server1] => {
"packages_installed": [
{
"arch": "x86_64",
"envra": "0:abrt-addon-ccpp-2.0.8-43.el6.x86_64",
"epoch": "0",
"name": "abrt-addon-ccpp",
"release": "43.el6",
"repo": "Repo1yum",
"version": "2.0.8",
"yumstate": "available"
},
{
"arch": "x86_64",
"envra": "0:abrt-addon-kerneloops-2.0.8-43.el6.x86_64",
"epoch": "0",
"name": "abrt-addon-kerneloops",
"release": "43.el6",
"repo": "Repo1yum",
"version": "2.0.8",
"yumstate": "available"
},
etc.
Итак, несмотря на то, чточто пакеты ABRT действительно установлены, их «yumstate» «доступно» (вместо «установлен»).Это ошибка в модуле Ansible yum или я делаю что-то не так?Как я должен проверить, установлены ли пакеты ABRT (или любой другой пакет) или нет?