てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] --tags と --skip-tags 併用時の挙動

はじめに

Ansible には、Play や Task にタグをつけて、実行を制御する機能があります。

ansible-playboo コマンドの --tags または -t オプションでタグを指定すると、指定したタグがついた Play や Task のみを実行できます。

逆に、--skip-tags オプションでは、実行しないように制御できます。

これらは組み合わせたときの挙動(被ったときは --skip-tags が優先)について、簡単なサンプルで示します。

サンプル Playbook

task1task2a というタグが、task2task3b というタグがついています。

- hosts: localhost
  gather_facts: false
  connection: local

  tasks:
    - name: task1
      debug:
        msg: task1
      tags:
        - a

    - name: task2
      debug:
        msg: task2
      tags:
        - a
        - b

    - name: task3
      debug:
        msg: task3
      tags:
        - b

実行

普通に実行すると、すべてのタスクが実行されます。

ここでは --tags a --skip-tags b という指定をして実行します。

$ ansible-playbook  -i localhost, tag_test.yml --tags a --skip-tags b

PLAY [localhost] ***************************************************************************************************

TASK [task1] *******************************************************************************************************
ok: [localhost] => {
    "msg": "task1"
}

PLAY RECAP *********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

task1 のみが実行されました。task2 はタグ a がついているものの、b もついているので、--skip-tags b という指定によってスキップされました。 つまり、被ったときは --skip-tags が優先されるということになります。

なお、実際に実行せずとも、--list-tasks オプションを利用すると、実行されるタスクの表示だけされます。

$ ansible-playbook  -i localhost, tag_test.yml --tags a --skip-tags b --list-tasks

playbook: tag_test.yml

  play #1 (localhost): localhost        TAGS: []
    tasks:
      task1     TAGS: [a]

参考

[2021/03/24 追記]

zaki-hmkc.hatenablog.com