私はansibleにかなり慣れていないので、今ではべき等なタスクを作成する方法を理解できません。例えば。 file
。単にcreates
またはremoves
がありません。 command
モジュールにはcreates
がありますが、プロビジョナーを実行してファイル(シンボリックリンク)が存在する場合は常に、ansibleはコマンドを「スキップ」ではなく「ok」としてマークします。
これがcommand
モジュールの例です
- name: Firefox | link
command: ln -s /opt/firefox/firefox /usr/local/bin/firefox creates=/usr/local/bin/firefox
常に実行されます。
ノードの状態が最初の実行ですでに達成されている場合、コマンドが2回以上実行されないようにするにはどうすればよいですか?
ありがとうございました!
それはうまくいくはずです。
実際にチェックしましたが、ほとんど機能します(後述)。テストに使用した完全なプレイブックは次のとおりです(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