我可以通过使用非幂等的shell命令轻松获得它
当您查询机器的当前状态时,您不能真正谈论幂等性。
“Idempontent”表示无论你运行多少次某个任务,该任务都会确保机器处于期望状态。
当您查询当前状态时,您没有描述所需的状态。不管你做什么,你用什么方法,“幂等”这个词是不适用的。
关于你的例子,它没有给你结果 - 你重复了两次相同的论点 list 并且任务应该失败(它没有,这看起来像一个 Ansible 怪癖)。
要获取已安装软件包的列表,您应该使用:
- name: yum_command
yum:
list=installed
register: yum_packages
- debug:
var: yum_packages
它将描述每个包的字典列表保存到变量yum_packages。
然后您可以使用JSON Query Filter 获取单个包 (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"