サーチ…
ロールの使用
Anabilitiesは、 ロールの概念を使用して、モジュラーコードをより良くし、自分自身を繰り返さないようにします。
ロールは単純にフォルダ構造で、Anipalはどこからvarsファイル、タスク、ハンドラをロードするかを知っています。例は次のようになります。
apache/
├── defaults
│ └── main.yml
├── files
│ ├── mod-pagespeed-stable_current_i386.deb
│ ├── mod-pagespeed-stable_current_i386.rpm
│ ├── mod-pagespeed-stable_current_amd64.deb
| └── mod-pagespeed-stable_current_x86_64.rpm
├── tasks
│ ├── debian.yml
│ ├── main.yml
│ └── redhat.yml
├── templates
│ ├── httpd.conf.j2
│ └── sites-available
│ └── virthualhost.conf.j2
└── vars
├── debian
└── redhat
次に、このような基本的なプレイブックを持つロールを使用することができます:
- hosts: webservers
roles:
- apache
このプレイブックに対してAnabilitiesを実行すると、 webservers
グループ内のすべてのホストを対象とし、上記のapache
ロールを実行して、ロールのデフォルト変数を自動的にロードし、 tasks/main.yml
含まれるすべてのタスクをtasks/main.yml
ます。また、ロールフレンドリーな場所で特定の種類のファイルを探すこともできます。
roles / x / tasks / main.ymlが存在する場合、そこにリストされているタスクがplayに追加されます
roles / x / handlers / main.ymlが存在する場合、そこにリストされているハンドラーがplayに追加されます
roles / x / vars / main.ymlが存在する場合、そこにリストされている変数がplayに追加されます
roles / x / meta / main.ymlが存在する場合、そこにリストされているすべての役割の依存関係が役割のリストに追加されます(1.3以降)
すべてのコピー、スクリプト、テンプレート、またはインクルードタスク(ロール内)は、/ x / {ファイル、テンプレート、タスク} /(ディレクトリはタスクに依存します)のファイルを、相対的または絶対的にパスすることなく参照できます
役割の依存関係
ロールでは、 dependencies
ブロックを持つmeta/main.yml
ファイルを作成することによって、他のロールを依存関係として定義することもできます。
dependencies:
- role: common
従属ロールのパラメータ/変数に値を渡すこともできます。
dependencies:
- { role: common, some_parameter: 3 }
条件付きで従属ロールを実行することさえできます。
dependencies:
- { role: common, some_parameter: 3 }
- { role: sshd, enable_sshd: false,
when: environment == 'production' }
依存する役割は、それらに依存する役割の前に常に実行されます。また、それらは一度だけ実行されます。 2つのロールが依存関係と同じものを指定すると、初めて実行されます。
folling meta/main.yml
のロールrole1、role2、role3を想像してみましょう:
role1 / meta / main.yml:
dependencies:
- role: role3
role2 / meta / main.yml:
dependencies:
- role: role3
同じplaybookでrole1とrole2を実行する場合(role1がrole2の前に呼び出されている)、実行順序は次のようになります。
role3 -> role1 -> role2
role1とrole2のmeta/main.yml
にallow_duplicates: yes
を指定することで、この動作を無効にすることができます。結果の実行順序は次のようになります。
role3 -> role1 -> role3 -> role2
ロール内の配布固有のタスクと変数の分離
配布固有のタスクと変数を異なる.ymlファイルに簡単に分けることができます。 Ansibleは、 {{ ansible_distribution }}
と{{ ansible_distribution_version }}
使ってターゲットホストの配布を自動的に識別するのに役立ちます。そのため、.ymlファイル専用の配布に名前を付ける必要があります。
Ubuntu Xenialでは、基本的な役割ディレクトリツリーは、次のようになります。
role
├── tasks
│ ├── main.yml
│ └── Ubuntu16.04.yml
└── vars
└── Ubuntu16.04.yml
tasks/main.yml
中に、ターゲットホスト配布用の適切な変数とタスクを自動的に組み込むことができるようになりました。
タスク/ main.yml
---
- name: include distribution specific vars
include_vars: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"
- name: include distribution specific install
include: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"
tasks/Ubuntu16.06.yml
とvars/Ubuntu16.04.yml
Ubuntu16.04.ymlの中で、それぞれUbuntu Xenialのタスクと変数を定義することができます。