理系学生日記

おまえはいつまで学生気分なのか

明示的に指定した場合にのみ Ansible のタスクを実行する

Ansible でタスクを実行する場合に、「明示的に指定をしない限り、このタスクは実行したくない」というケースがあります。 タスクとしては定義しておかなければいけないけれど、playbook を実行する人に無意識に実行させたくないようなケースですね。 このため、--tags や --skip-tags を使っても問題は解決しません。

こういう場合の方法ですが、--extra-vars オプションを使用する方法が良いと思っています。

- hosts: localhost
  (snip)
  vars:
    # 明示的に指定しない限りスキップするタスクに when 句で付与する変数
    thorough: false
  tasks:
    - name: dangerous task
      command: dengerous command
      when: thorough == "true"

上記のように、タスクは特定の変数 (例では "thorough") が true のときにのみ実行しておくように条件を設定した上で、その変数は false をデフォルトとして定義しています。 当該タスクを実行したい場合は、

$ ansible-playbook localhost.yaml -e 'thorough=true'

という風に明示的に指定すれば良いです。 -e を指定しない場合、当該タスクは実行されません。