运行安全的linux ad-hoc命令时ansible结果显示已更改

时间:2018-09-24 15:52:20

标签: ansible

当我运行带有命令选项的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

1 个答案:

答案 0 :(得分:0)

shellcommand任务总是触发更改,因为ansible无法知道二进制文件是否执行了某些操作(例如,更改文件)或仅显示输出stdout

如果要检查是否已安装软件包,请使用package_facts或将yumlist一起使用。它们都有些冗长,但是通过不触发更改来完成适当的工作,您可以注册结果以进行过滤并做适当的条件。

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"
        },

但是,如果您想使用commandshell并且不触发更改,则可以将change_when: false添加到任务中

- tasks:
    name: check httpd is installed.
    command: rpm -q httpd
    change_when: false

但是这样做需要您自担风险。