当前位置:  开发笔记 > 前端 > 正文

如何使用Ansible获取已安装的yum包?

如何解决《如何使用Ansible获取已安装的yum包?》经验,为你挑选了2个好方法。



1> techraf..:

我可以轻松地通过使用不是幂等的shell命令来实现它

当您查询机器的当前状态时,您无法真正谈论幂等性.

"Idempontent"意味着无论您执行某项任务多少次,任务都将确保机器处于所需状态.

查询当前状态时,不会描述所需的状态.无论你做什么,使用什么方法,术语"幂等"都不适用.


关于你的例子,它没有给你结果 - 你重复两次相同的参数list,任务应该失败(它没有,这看起来像一个Ansible怪癖).

要获取已安装软件包的列表,您应该使用:

- name: yum_command 
  yum:
    list=installed
  register: yum_packages

- debug:
    var: yum_packages

它将描述每个包的字典列表保存到变量中yum_packages.

然后,您可以使用JSON查询过滤器来获取单个包(tar):

- debug: var=item
  with_items: "{{yum_packages|json_query(jsonquery)}}"
  vars:
    jsonquery: "results[?name=='tar']"

得到这样的结果:

"item": {
    "arch": "x86_64",
    "epoch": "2",
    "name": "tar",
    "nevra": "2:tar-1.26-31.el7.x86_64",
    "release": "31.el7",
    "repo": "installed",
    "version": "1.26",
    "yumstate": "installed"
}

或仅限其版本:

- debug: var=item
  with_items: "{{yum_packages|json_query(jsonquery)}}"
  vars:
    jsonquery: "results[?name=='tar'].version"
"item": "1.26"



2> sduthil..:

从Ansible 2.5开始,您还可以使用该package_facts模块:它将收集已安装软件包的列表作为Ansible事实。

来自文档的示例:

- name: get the rpm package facts
  package_facts:
    manager: rpm

- name: show them
  debug: var=ansible_facts.packages

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有