2017-01-27 6 views
1

command moduleでは、コマンドでファイルが作成された場合、そのファイルが存在するかどうかを確認できます。実行されると、コマンドが再度実行されなくなります。コマンドを記憶する最も良い方法は、以前は正常に実行されましたか?

- command: touch ~/myfile 
    args: 
    creates: ~/myfile 

ただし、コマンドを実行してもファイルが作成されなかった場合は、再実行されます。

- command: dothisonceonly # this does not create a file 
    args: 
    creates: ~/somefile 
    notify: done 

その後、ハンドラ:

- name: done 
    command: touch ~/somefile 

このアプローチ作品を、少し醜いです

秒の実行を避けるために、私は次のように(通知)変化にいくつかのランダムなファイルを作成します。誰でもベストプラクティスを放つことができますか?多分いくつかの事実を設定しますか?おそらくまったく新しいアプローチですか?

答えて

3

コマンドが特定のターゲットホスト上で正常に実行されたという事実(共通言語)なので、最も適切なのはlocal facts(Ansible母国語)です。

ハンドラでは、状態をJSONファイル/etc/ansible/facts.dの下にcopyモジュールとcontentパラメータで保存します。

定期的なファクトギャザリングプロセスでホストに対してプレイを行うたびに、検索されてアクセス可能になります。

次に、when条件でタスクを制御できます(実際には存在しない場合はdefaultフィルタを含める必要があります)。

+0

私の回答はこの回答に反映されました。多くのありがとう – danday74

2

理想的には、Anipalでは、プロキシとしてファイルを使用するのではなく、最初のコマンドで変更された状態をチェックします。その理由は、何かの実際の状態をチェックすると、すべてのパスでテストされるため、より良い不変性が得られるからです。

このアプローチを使用しない理由がある場合。次に、コマンドの結果を登録し、それをノーティファイヤの代わりに使用してファイルの作成をトリガーします。あなたはここで何が起こっているかを見て興味があれば

- command: dothisonceonly # this does not create a file 
    creates: ~/somefile 
    register: result 

- file: 
    path: ~/somefile 
    state: touch 
    when: result|succeeded 

、追加:

- debug: var=result 

は、彼らがプレイの最後に実行されているノーティファイアと注意してください。つまり、通知がタスクによってトリガーされたが、再生が完了しなかった場合、通知は実行されません。逆にタスクによってトリガされなくてもノーティファイヤを実行させるAniableオプションがあります。

0

これは@techraf

- command: echo 'phew' 
    register: itworks 
    notify: Done itworks 
    when: ansible_local.itworks | d(0) == 0 

とハンドラによって回答に基づいて、私の実際の実装である:これは素晴らしい作品@techraf

http://docs.ansible.com/ansible/playbooks_variables.html#local-facts-facts-d

ありがとう:

- name: Done itworks 
    copy: 
    content: '{{ itworks }}' 
    dest: /etc/ansible/facts.d/itworks.fact 

ドキュメント事実を持続させる。

EDIT

は、@ techrafさんのコメントのデフォルト値のロジックを適用しました。

+1

苦情はあなた宛です。私は 'default'フィルタを使うことを提案しました:' when:ansible_local.echoer3 |ブール値で 'default(0)!= 0'の方が簡単です' when:ansible_local.command_not_yet_run |デフォルト(true) 'を指定し、実行後に値を' false'に設定します。 – techraf

+0

このロジックを適用していただきありがとうございます。 – danday74

関連する問題