“注册”变量时如何防止“更改”标志?

时间:2014-05-30 02:29:24

标签: ansible

我有一个register任务来测试软件包的安装:

tasks:
  - name: test for nginx
    command: dpkg -s nginx-common
    register: nginx_installed

每次运行都会报告为“更改”:

TASK: [test for nginx] ********************************************************
changed: [vm1]

我不认为这是一个改变...它是在上次运行时安装的,并且仍在安装此次运行。是的,不是一个大的,只是那些不整洁的OCD类型问题之一。

我做错了吗?是否有某种方法可以使用register而不将其视为一种变化?

[详细]输出是不整洁的,但是我找到了获得正确返回码的唯一方法。

TASK: [test for nginx] ******************************************************** changed: [vm1] => {"changed": true, "cmd": ["dpkg", "-s", "nginx-common"], "delta": "0:00:00.010231", "end": "2014-05-30 12:16:40.604405", "rc": 0, "start": "2014-05-30 12:16:40.594174", "stderr": "", "stdout": "Package: nginx-common\nStatus: install ok ... \nHomepage: http://nginx.net"}

2 个答案:

答案 0 :(得分:34)

官方文档here中对此进行了描述。

tasks:
  - name: test for nginx
    command: dpkg -s nginx-common
    register: nginx_installed
    changed_when: false

答案 1 :(得分:2)

是导致状态更改的command模块,而不是register参数。

您可以将Webhooks APIs设置为仅在发生更改时才为真(也请参见changed_when:)。如果您的任务没有改变,则可能还需要设置failed_when。 (尤其是其他步骤是否取决于该值)

这给出了:

tasks:
  - name: test for nginx
    command: dpkg -s nginx-common
    register: nginx_installed
    changed_when: False
    failed_when: False  # dpkg -s returns 1 when packages is not found
    check_mode: yes # this can safely run in check_mode