web-dev-qa-db-ja.com

ansibleはタスクのrun_once構成を無視します

Ansibleを使用していますが、タスクを1回だけ実行したいと思います。タスクを構成して タスクを1回だけ実行する方法 に関するドキュメントに従います

- name: apt update
  Shell: apt-get update
  run_once: true

しかし、Ansibleを実行すると、常にこのタスクが実行されます。タスクを1回だけ実行するにはどうすればよいですか。

17
Robert

Run_onceオプションは、Playbook /タスクが実行されるたびに実行されますが、特定の実行自体の間に1回だけ実行されます。したがって、プレイを実行するたびに実行されますが、リストの最初のホストでのみ実行されます。そのコマンドを1回だけ実行する方法を探している場合は、creates引数を使用する必要があります。あなたの例を使用して、これは以下を使用することによって達成することができます-

- name: apt update
  Shell: apt-get update && touch /root/.aptupdated
  args:
    creates: /root/.aptupdated

この場合、ファイル/root/.aptupdatedが作成されます。タスクは、それが存在するかどうかを確認し、存在する場合は実行されません。

関連する注意事項として、実行しようとしているタスクがapt-get updateの場合は、ネイティブのaptモジュールを使用することをお勧めします。その後、次のようなことを行うことができます-

- name: apt update
  apt: update_cache=yes cache_valid_time=86400

これで、キャッシュが1日より古い場合にのみ実行されます。

29
Charlie O.