Ansible与命令和文件模块媲美

我是一个非常新的人,现在不知道如何做一个幂等的任务。 例如file 。 它根本没有createsremoves 。 在command模块中它已经creates ,但是每当我运行预configuration器并且文件(符号链接)确实存在时,该命令仍将该命令标记为“ok”,而不是“跳过”。

这里是command模块的例子

 - name: Firefox | link command: ln -s /opt/firefox/firefox /usr/local/bin/firefox creates=/usr/local/bin/firefox 

总是得到执行。

如果节点的状态已经由第一次运行完成了,那么如何确保命令不会被执行> = 2次?

谢谢!

这应该工作。

其实我检查,它主要工作(见后面),这里是我用来testing它的完整剧本(不使用Firefox,但概念是相同的):

 --- - hosts: localhost tasks: - name: Test | link & idempotency command: ln -s /tmp/ans/from /tmp/ans/to creates=/tmp/ans/to 

细节:

  • 当链接不存在时,获取的创build正确
  • 当链接是目前没有得到改变。 即使链接指向错误的文件,但。

你虽然得到一个警告:

 [WARNING]: Consider using file module with state=link rather than running ln 

如果你想确保链接是正确的,并且只在需要的时候改变它(因此是幂等的)“正确”的方式,至于安全的警告是使用文件模块,这里是一个例子:

 --- - hosts: localhost tasks: - name: Test | link & idempotency file: src=/tmp/ans/from dest=/tmp/ans/to state=link