playbook

playbook とは

前章では、ansible コマンドを使ってサーバーに対して1つのモジュールを実行できることを確認できましたが、 実際に構成管理を行う場合、複数のモジュール・処理を実行する必要があります。

この 複数のモジュール・処理 を定義したファイルを playbook と呼びます。 ansible-playbook コマンドで、所定のサーバーに対して playbook を実行することが可能です。

playbook の書き方

playbook は YAML 形式で記載し、大きく3つのセクションに別れます。

target セクション

どのサーバーに対して、どのユーザーで実行するかどうかの設定を行います。

- hosts: all # 対象サーバー
  remote_user: ec2-user # 実行ユーザー
  become: yes # sudo で実行するかどうか
  gather_facts: no # サーバーの基本情報を収集するかどうか、no にすると動作が多少早くなる

vars セクション

playbook 内で使用する変数を定義します。 後述のタスク内で指定するモジュールのパラメータ等を変数に置き換えたい場合に定義します。

  vars:
    foo: bar
    users:
      - yamada
      - tanaka

tasks セクション

対象サーバーに実行するモジュールとロールを定義します。 モジュールは基本的に上から順番に実行されていきます。

  # 読み込むロール
  roles:
    - nginx
    - mysql
    -
  # 実行するタスク
  tasks:
    - copy: ...
    - yum: ...

タスクには name を指定することが可能です。 指定しておくと、実行時の結果の表記がわかりやすくなります。

  tasks:
    - name: Copy xxx file
      copy: ...

タスク毎に実行ユーザーを切り替えることも可能です。

  tasks:
    - name: Copy xxx file
      copy: ...
      become: no
      become_user: ec2-user

playbook を実行してみる

それでは、実際に playbook を作成して実行してみましょう。 サンプルとして、以下の操作を実行するための playbook nginx.yaml を作成します。

  • nginx を yum でインストールする
  • nginx を起動状態にする
- hosts: all
  remote_user: ec2-user
  become: yes
  gather_facts: no

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

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

ansible-playbook を実行し、nginx をインストールします。

[vagrant]$ ansible-playbook nginx.yml

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

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

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

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

ブラウザでアクセスし、nginx が起動していることを確認してください。

モジュールの冪等性を確認する

nginx が既にインストールされている環境に再度 ansible-playbook を実行してみましょう。 今度は結果が changed=0 と表示されるはずです。

[vagrant]$ ansible-playbook nginx.yml

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

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

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

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

これは実行したモジュール yumservice が再度処理を実行する必要があるかどうかを判断しているためで、 処理を行った場合のみ changed という判定で表示されます。

このように、操作を1回行っても複数回行っても結果が同じ結果を返す特性のことを冪等性と呼びます。

results matching ""

    No results matching ""