てくなべ (tekunabe)

ansible / network / automation / 学習の記録

[Ansible] タグ指定時にどのタスクが実行されるか事前に確認する(-t と --list-tasks の併用)

はじめに

Playbook には、Play 単位、Task 単位など様々な単位でタグを付けることができます。タグを付けることで、Playbook 実行時に指定したタグが付いたタスクのみ実行する、といった制御ができるようになります。

タグを活用していくと「このタグを指定した時にどのタスクが実行されるのか、事前に確認したい」と思うことはないでしょうか。

ansible-playbook コマンドの --list-tasks オプションを併用することで確認できます。

この記事で簡単なサンプルで検証します。

  • 検証環境
    • ansible 2.10.3
    • ansible-base 2.10.3

※注: inlcude_role などの include 系で読み込んだ先のタスクは、性質上 --list-tasks では表示されません。(Comparing includes and imports: dynamic and static re-use

Playbook

タグ ab を付けた3つのタスクがある Playbook です。

---
- hosts: all
  gather_facts: false

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

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

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

-t--list-tasks の併用 で事前確認

タグ a を指定することで実行されるタスクを、--list-tasks で事前に確認します。

$ ansible-playbook -i localhost, tags.yml -t a --list-tasks   
playbook: tags.yml

  play #1 (all): all    TAGS: []
    tasks:
      task1     TAGS: [a]
      task2     TAGS: [a, b]

タグ a が付いた task1task2 が表示されました。タグ a が付いてない task3 は表示されません。

実際に Playbook 実行

一応、--list-tasks オプションを外して実際に Playbook を実行して確認します。

$ ansible-playbook -i localhost, tags.yml -t a             

PLAY [all] *********************************************************************************************************

TASK [task1] *******************************************************************************************************
    "msg": "task1"
}

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

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

--list-tasks で確認した通り、task1task2 が実行されました。

おわりに

どのタスクが実行されるか予想できないようなタグの付け方は避けるべきですが、それでも事前に書くにできるのは便利かなと思います。