Ansible 任务报告某些内容发生了变化有什么意义?

soc*_*ker 22 ansible

我有一个任务来检查我的进程是否正在侦听端口 8080,并且只有当退出代码不为零时,我才会运行fail一条消息。

当服务运行时,它报告状态已更改。我要它说okchangedAnsible中的状态实际上意味着什么?

use*_*062 31

Ansible 任务应该是幂等的。例如。如果任务没有修改任何东西,它应该返回ok而不是changed。大多数内置模块和任务已经存在,但是对于诸如command和 之类的任务,shell您需要帮助 ansible。

对于纯粹检查并且不修改任何内容的任务,您应该添加:

changed_when: False
always_run: yes
Run Code Online (Sandbox Code Playgroud)

后者允许任务甚至在检查模式下运行

为了完整起见,这些任务通常与另一个进行实际修改的任务相结合,例如:

- command: check command that returns true when no change needed
  register: result
  changed_when: False
  always_run: yes
- command: modify command
  when: result.rc != 0
Run Code Online (Sandbox Code Playgroud)

  • 这应该验证答案 (2认同)

小智 12

任何依赖于目标上的东西的东西在执行时都会得到“改变”的状态,即使它只是一个 shell 命令来回显某些东西。

要取消“已更改”状态,您可以在任务中添加以下行:

changed_when: false
Run Code Online (Sandbox Code Playgroud)

这个和其他相关的东西列在这个 ansible doc page 上