Ansible 的命令和文件模块的幂等性

Ansible 的命令和文件模块的幂等性

我对 ansible 还不太熟悉,现在还不知道如何创建幂等任务。例如file。它根本没有createsremoves。在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

相关内容