LoginSignup
0
1

More than 3 years have passed since last update.

Ansible Playbook タグの継承

Last updated at Posted at 2020-05-12

Ansible Playbook のタグについて、混乱する挙動があったので調べてみました。
タグの継承についてです。
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html#tag-inheritance

tagtest.yml
- name: Test Tag
  hosts: localhost
  connection: local
  tasks:
    - name: "step_1"
      debug:
        msg: "こんにちは"
    - name: "step_2"
      debug:
        msg: "hello"
      tags:
        - hello

この Playbook を hello タグを指定して実行すると、タグが付いていない step_1 タスクは無視され、step_2 タスクのみが実行されます。

ここまでは想定通りです。

では、この Play 自身にも次のように hello タグが付与されている場合、hello タグを指定して実行するとどのタスクが実行されるでしょう。

tagtest.yml
- name: Test Tag
  hosts: localhost
  connection: local
  tasks:
    - name: "step_1"
      debug:
        msg: "こんにちは"
    - name: "step_2"
      debug:
        msg: "hello"
      tags:
        - hello
  tags:
    - hello

実行結果は次の通りです。

$ ansible-playbook tagtest.yml -t "hello"

PLAY [Test Tag] ************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [step_1] **************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "こんにちは"
}

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

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

タグの付いていない step_1 も含め、すべてのタスクが実行されています。

この挙動に最初は混乱していたのですが、タスクはその親に当たる Play からタグを継承していて、step_1 タスクにも hello タグが付いているのだと分かりました。

一つの Playbook に複数の Play が含まれている場合。以下の Playbook を、hello タグを指定して実行すると、「こんにちは」「hello」「Ciao」が出力されます。

tagtest.yml
- name: "Test Tag 1"
  hosts: localhost
  connection: local
  tasks:
    - name: "step_1"
      debug:
        msg: "こんにちは"
    - name: "step_2"
      debug:
        msg: "hello"
      tags:
        - hello
  tags:
    - hello

- name: "Test Tag 2"
  hosts: localhost
  connection: local
  tasks:
    - name: "step_1"
      debug:
        msg: "Hola"
    - name: "step_2"
      debug:
        msg: "Ciao"
      tags:
        - hello
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1