サーチ…


ロールの使用

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.ymlallow_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.ymlvars/Ubuntu16.04.yml Ubuntu16.04.ymlの中で、それぞれUbuntu Xenialのタスクと変数を定義することができます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow