我有一个任务,检查我的进程是否正在监听端口 8080,并且只有当退出代码不为零时,我才会运行fail
并显示消息。
当服务运行时,它会报告状态已更改。我希望它说ok
。Ansiblechanged
中的状态实际上是什么意思?
答案1
任何依赖于目标上的某些内容的事物在执行时都会获得“改变”的状态,即使它只是一个用于回显某些内容的 shell 命令。
为了抑制“已更改”状态,您可以向任务添加以下行:
changed_when: false
此内容和其他相关内容列于Ansible 文档页面,用于了解如何在剧本中处理错误。
答案2
Ansible 任务应该幂等。例如,如果任务没有修改任何内容,它应该返回ok
而不是changed
。大多数内置模块和任务已经是,但对于诸如command
和之类的任务,shell
您需要帮助 ansible 一点。
对于纯粹检查而不修改任何内容的任务,您应该添加:
changed_when: False
always_run: yes
后者允许任务在检查模式。
为了完整性,此类任务通常与执行实际修改的其他任务相结合,例如:
- 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