use*_*dev 3 idempotent ansible ansible-playbook
我试图在RHEL机器上安装所有已安装的yum软件包.我可以通过使用不是幂等的shell命令并且想要使用yum命令来轻松获得它.
Shell命令工作正常:
- name: yum list packages
shell: yum list installed > build_server_info.config
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用yum命令时,它只是执行但不会给出任何结果:
- name: yum_command
action: yum list=${pkg} list=available
Run Code Online (Sandbox Code Playgroud)
tec*_*raf 16
我可以轻松地通过使用不是幂等的shell命令来实现它
当您查询机器的当前状态时,您无法真正谈论幂等性.
"Idempontent"意味着无论您执行某项任务多少次,任务都将确保机器处于所需状态.
查询当前状态时,不会描述所需的状态.无论你做什么,使用什么方法,术语"幂等"都不适用.
关于你的例子,它没有给你结果 - 你重复两次相同的参数list
,任务应该失败(它没有,这看起来像一个Ansible怪癖).
要获取已安装软件包的列表,您应该使用:
- name: yum_command
yum:
list=installed
register: yum_packages
- debug:
var: yum_packages
Run Code Online (Sandbox Code Playgroud)
它将描述每个包的字典列表保存到变量中yum_packages
.
然后,您可以使用JSON查询过滤器来获取单个包(tar
):
- debug: var=item
with_items: "{{yum_packages|json_query(jsonquery)}}"
vars:
jsonquery: "results[?name=='tar']"
Run Code Online (Sandbox Code Playgroud)
得到这样的结果:
"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"
}
Run Code Online (Sandbox Code Playgroud)
或仅限其版本:
- debug: var=item
with_items: "{{yum_packages|json_query(jsonquery)}}"
vars:
jsonquery: "results[?name=='tar'].version"
Run Code Online (Sandbox Code Playgroud)
"item": "1.26"
Run Code Online (Sandbox Code Playgroud)
从Ansible 2.5开始,您还可以使用该package_facts
模块:它将收集已安装软件包的列表作为Ansible事实。
来自文档的示例:
- name: get the rpm package facts
package_facts:
manager: rpm
- name: show them
debug: var=ansible_facts.packages
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19077 次 |
最近记录: |