場合によっては、プレイブックファイル全体を実行するのではなく、特定のタスクを実行したいことがあります。これは、特に大きなプレイブックファイルを処理する場合に、プレイブックの合計実行時間を短縮するのに役立ちます。
では、タグとは何ですか?
プレイブックのタグは、プレイブックファイルのタスクに添付されるメタデータの一部です。これらは、プレイブックを実行するときに参照され、実行時に特定のタスクを選択的にターゲットにすることができます。基本的に、プレイブックファイル内の特定のタスクを実行する(または実行しない)ようにAnsibleに指示します。
通常、スキップされたタスクは実行されているため、もう一度実行する必要はありません。このように、タグは繰り返しを回避し、プレイブックの実行時間を最適化します。特定のタスクをオンデマンドで実行する場合に便利です。
このガイドでは、Ansibleタグについて詳しく説明し、タスクにタグを付けてプレイブックの実行を決定する方法を示します。
プレイブックで特定のタスクを実行する
図のように3つのタスクを実行するプレイブックファイルの例を見てみましょう。タグは、各タスクの最後にあるタグラベルを使用して指定されます。
--- - name: Ansible Tags example hosts: localhost gather_facts: False tasks: - name: Hello World tag example debug: msg: "Hello World!" tags: - hello - name: Welcome to Ansible Tags tag example debug: msg: "How are you?" tags: - welcome - name: Enjoy tag example debug: msg: "Enjoy!" tags: - enjoy
このプレイブックには、こんにちは、ようこそ、お楽しみの3つのタグがあります。
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --list-tags
前述のように、タグを使用してAnsibleプレイブックの実行を制御できます。実行するタスクを指定するには、-tまたは–tagsフラグを使用します。
以下のコマンドでは、helloとしてタグ付けされた最初のタスクのみを実行するようにAnsibleに指示しています。
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --tags hello
プレイブックの特定のタグをスキップする
–skip-tagsフラグを使用して、特定のタグをスキップするようにAnsibleに指示することもできます。そうすることで、Ansibleは、提供されたタスクを除いて、Playbookファイル内の残りのタスクを実行します。
この例では、Ansibleはenjoyとタグ付けされた最後のタスクを無視し、プレイブックで定義されている残りのタスクを実行します。
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --skip-tags enjoy
タスクが常に(または決して)実行されないようにする
タグを使用してプレイブックファイルで実行するタスクを決定する場合でも、実行する必要のあるタスクがある場合があります。たとえば、リモートWebサーバーにApacheをインストールするプレイブックを取り上げます。
プレイブックには3つのタスクがあります。最初にリモートホストのパッケージリストを更新し、Apacheをインストールして、再起動します。ただし、Apacheをインストールする前に、パッケージリストを更新するか、リポジトリを更新する必要があります。
リポジトリの更新が前提条件であるため、このタスクにalwaysタグを付けます。
--- - name: install Apache webserver hosts: webserver tasks: - name: Update and upgrade apt packages apt: update_cache: yes tags: - always - name: install Apache on Ubuntu apt: name: apache2 state: latest tags: - install_apache - name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache
タグがない場合、プレイブックは期待どおりに実行されます。
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
必須のタスク(この場合は最初のタスク)以外の特定のタスクを実行するように指定した場合、Ansibleは「always」タグが付いたタスクも実行します。
この例では、「restart_apache」タグが付いたApacheを再起動するようにAnsibleに指示しました。ただし、「always」タグが付いているため、「updateaptrepository」タスクは引き続き実行されます。
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
同様に、Ansibleにタスクを実行しないように指示することもできます。このために、「never」タグを使用します。これは、「always」タグの正反対です。
プレイブックに戻ります。インストール後にApacheを再起動したくないとします。これを実現するには、図のようにneverタグを渡すだけです。
- name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache - never
これは、二重角かっこを使用して次のようにタグ付けすることもできます。
tags: [ restart_apache, never ]
プレイブックをタグなしで実行すると、タスクは省略されます。
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
出力から、apacheの再起動タスクがスキップされたことがわかります。
注:
「never」のタグが付けられたタスクは、ansible-playbookコマンドで明示的に呼び出された場合でも実行されます。たとえば、Apacheを再起動するタスクは、コマンドで明示的に定義されているため、引き続き実行されます。
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
まとめ
Ansibleタグは便利で、Ansibleプレイブックの実行に必要な柔軟性を提供します。プレイブック内の特定のタスクを実行するか、実行をスキップできます。これにより、プレイブックの実行時にプレイブックをより適切に制御できます。
また読む :AnsibleVaultを使用して機密データを保護する方法