【发布时间】:2019-05-22 14:09:50
【问题描述】:
所以我正在编写一个卸载一些操作系统包(在本例中为所有 RedHat ABRT 包)的 ansible 剧本,然后检查它们是否已被卸载。卸载不是问题(它工作正常),但我需要验证软件包是否真的被卸载,然后根据它做一些其他的事情。
这是在 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
运行上面的 ansible 代码时,我没有得到任何输出 - 意思是,没有带有 "yumstate": "installed" 的包(尽管它们实际上已安装):
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 包(或任何其他包)?
【问题讨论】: