как проверить, что пакеты ОС удалены или не установлены в ansible - PullRequest
0 голосов
/ 22 мая 2019

Итак, я пишу сборник рассказов, который удаляет некоторые пакеты ОС (в данном случае все пакеты 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 (или любой другой пакет) или нет?

1 Ответ

1 голос
/ 22 мая 2019

Ни список , ни имя параметр ням не говорит о том, что подстановочные знаки могут быть использованы. Цитирование описания списка параметров:

Имя пакета для запуска эквивалента yum list package. Помимо перечисления пакетов, команда use может также перечислить следующее: установлено, обновления, доступные и репозитории.

Для просмотра списка установленных пакетов используйте

jsonquery: "results.packages_installed[?yumstate=='installed'].name"

Пакеты в данных results.packages_installed на server1 , которые вы отправили, доступны . Тогда

- set_fact:
    packages_available: "{{ abrt_packages|json_query(jsonquery) }}"
  vars:
    jsonquery: "results.packages_installed[?yumstate=='available'].name"
- debug:
    var: packages_available

дает (сокращенно):

"packages_available": [
    "abrt-addon-ccpp", 
    "abrt-addon-kerneloops"
]
...