我对 ansible 还不太熟悉,现在还不知道如何创建幂等任务。例如file
。它根本没有creates
或removes
。在command
模块中它有creates
,但每当我运行配置程序并且文件(符号链接)确实存在时,ansible 仍然会将命令标记为“ok”,而不是“skipped”。
这是command
模块示例
- name: Firefox | link
command: ln -s /opt/firefox/firefox /usr/local/bin/firefox creates=/usr/local/bin/firefox
总是被执行。
如果节点的状态在第一次运行时已经完成,如何确保命令不会被执行>=2 次?
谢谢你!
答案1
那应该可行。
实际上我检查过了并且它基本上是有效的(见下文),下面是我用来测试它的完整剧本(不是使用 Firefox,但概念是相同的):
---
- hosts: localhost
tasks:
- name: Test | link & idempotency
command: ln -s /tmp/ans/from /tmp/ans/to creates=/tmp/ans/to
细节:
- 当链接不存在时,它会被正确创建
- 当链接存在时,什么都不会改变。即使链接指向错误的文件。
但你会收到一个警告:
[WARNING]: Consider using file module with state=link rather than running ln
如果您想确保链接正确,并且仅在需要时以“正确”的方式(因此幂等)更改它,至于 ansible 的警告是使用文件模块,这里有一个例子:
---
- hosts: localhost
tasks:
- name: Test | link & idempotency
file: src=/tmp/ans/from dest=/tmp/ans/to state=link