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

Joh*_*Mee 23 ansible

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

tasks:
  - name: test for nginx
    command: dpkg -s nginx-common
    register: nginx_installed
Run Code Online (Sandbox Code Playgroud)

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

TASK: [test for nginx] ********************************************************
changed: [vm1]
Run Code Online (Sandbox Code Playgroud)

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

我做错了吗?有没有一种方法可以使用register而不会一直被视为一种变化?

[verbose]输出是不整齐的,但是我发现获得正确返回码的唯一方法.

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

Jak*_*tka 36

它的官方文档中描述这里.

tasks:
  - name: test for nginx
    command: dpkg -s nginx-common
    register: nginx_installed
    changed_when: false
Run Code Online (Sandbox Code Playgroud)


Ger*_*erg 5

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

您可以设置changed_when:为仅在某些内容发生变化时才为真的内容(另请参见failed_when)。如果您的任务没有改变任何东西,您可能还想设置check_mode。(特别是如果其他步骤取决于该值)

这给出:

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
Run Code Online (Sandbox Code Playgroud)