ロール

playbook による一連の task を共有する仕組みをロールと呼びます。

ロールのディレクトリ構成

ロールのディレクトリ構成は以下の通りです。 実行する playbook.yml と同階層に roles というディレクトリを配置し、その中にロールを定義していきます。

roles/
    role-name/
        meta/                     # メタ情報
            main.yml
        defaults/                 # 上書き可能な変数
            main.yml
        vars/                     # 固定となる変数
            main.yml
        files/                    # コピー用のファイル
            main.yml
        templates/                # コピー用のテンプレートファイル
            virtualhost.conf.j2
        handlers/                 # ハンドラー
            main.yml
        tasks/                    # タスク
            main.yml

ロールを作成してみる

先ほど実行した nginx のインストールタスクをロールにしてみましょう。 まず、以下のディレクトリ構成を作成します。

[vagrant]$ mkdir -p roles/nginx/tasks
[vagrant]$ vi roles/nginx/tasks/main.yml
roles/
    nginx/
        tasks/
            main.yml

roles/nginx/tasks/main.yml に以下の内容をペーストします。

- name: Install nginx
  yum: name=nginx state=latest update_cache=yes

- name: Enabled nginx service
  service: name=nginx state=started enabled=yes

次に nginx.yml に roles を定義します。

- hosts: all
  remote_user: ec2-user
  become: yes
  gather_facts: no
  roles:
    - nginx

修正した playbook を実行してみましょう。 変更前と同様に nginx インストール処理が動作することを確認してください。

[vagrant]$ ansible-playbook nginx.yml

PLAY ***************************************************************************

TASK [nginx : Install nginx] ***************************************************
ok: [xx.xx.xx.xx]

TASK [nginx : Enabled nginx service] *******************************************
ok: [xx.xx.xx.xx]

PLAY RECAP *********************************************************************
xx.xx.xx.xx                : ok=2    changed=0    unreachable=0    failed=0

ロールの実行順序

rolestasks が両方定義されている場合、roles が先に実行されます。

results matching ""

    No results matching ""