GNU/Linux >> Linux の 問題 >  >> Linux

Ansible Playbookでタグを使用する方法(例)

場合によっては、プレイブックファイル全体を実行するのではなく、特定のタスクを実行したいことがあります。これは、特に大きなプレイブックファイルを処理する場合に、プレイブックの合計実行時間を短縮するのに役立ちます。

では、タグとは何ですか?

プレイブックのタグは、プレイブックファイルのタスクに添付されるメタデータの一部です。これらは、プレイブックを実行するときに参照され、実行時に特定のタスクを選択的にターゲットにすることができます。基本的に、プレイブックファイル内の特定のタスクを実行する(または実行しない)ように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を使用して機密データを保護する方法


Linux
  1. 自動化のためにAnsibleとanacronを使用する方法

  2. 例でethtoolコマンドを使用する方法

  3. AnsiblePlaybookの作成方法

  1. 例を使用してLinuxでIPコマンドを使用する方法

  2. Linuxエイリアスコマンド:例で使用する方法

  3. 追加の変数をAnsibleプレイブックに渡す方法

  1. AnsiblePlaybookでAnsibleGalaxyの役割をダウンロードして使用する方法

  2. AnsiblePlaybookで変数を使用する方法

  3. AnsiblePlaybookでループを使用する方法