当我运行带有命令选项的Ansible剧本时,例如:command:uname -a或运行rpm -q 结果显示更改为= 1。怀疑有错误,请提出建议。
我的playbook.yml
- name: Check app package configured status
hosts: web
tasks:
- name: check httpd is installed.
command: rpm -q httpd
PLAY RECAP *********************************************************************************************************************************************************************************************
xxxxxxx : ok=2 changed=1 unreachable=0 failed=0
xxxxxx : ok=2 changed=1 unreachable=0 failed=0
答案 0 :(得分:0)
shell
或command
任务总是触发更改,因为ansible无法知道二进制文件是否执行了某些操作(例如,更改文件)或仅显示输出stdout
。
如果要检查是否已安装软件包,请使用package_facts
或将yum
与list
一起使用。它们都有些冗长,但是通过不触发更改来完成适当的工作,您可以注册结果以进行过滤并做适当的条件。
package_facts
ansible -m package_facts -i inventory/production all
myserver | SUCCESS => {
"ansible_facts": {
"packages": {
...
带有列表操作的yum
ansible -m yum -a list=httpd -i inventory/production all
myserver | SUCCESS => {
"changed": false,
"results": [
{
"arch": "x86_64",
"envra": "0:httpd-2.2.15-15.el6_2.1.x86_64",
"epoch": "0",
"name": "httpd",
"release": "15.el6_2.1",
"repo": "redhat-el-6",
"version": "2.2.15",
"yumstate": "available"
},
但是,如果您想使用command
或shell
并且不触发更改,则可以将change_when: false
添加到任务中
- tasks:
name: check httpd is installed.
command: rpm -q httpd
change_when: false
但是这样做需要您自担风险。