playbook ファイル

2019/02/16

Ansible

 playbook ファイル

 inventory ファイルに記述した対象ホストの最終的なあるべき姿(こうなっていなければならないという状態)を記述したファイルです。 Ansible には users や yum など用途ごとに多数のモジュールが用意されています。このモジュールを使用して、対象ホストのあるべき姿を記述します。モジュールで記述した 1 つ 1 つのあるべき姿のことをタスクと呼びます。下記はあるべき姿の一例です。
  • パッケージ open-vm-tools がインストールされていること
  • 最新のパッケージがインストールされていること
これをモジュールを使用して記述するとこうなります。
- name: 初期パッケージのインストール
  yum:
    name: "{{ item }}"
    state: latest
  loop: "{{ pkgs }}"
  become: yes

- name: インストール済パッケージのアップデート
  yum:
    name: '*'
    state: latest
  become: yes
タスクごとに分けると次の 2 つになります。
- name: 初期パッケージのインストール
  yum:
    name: "{{ item }}"
    state: latest
  loop: "{{ pkgs }}"
  become: yes
- name: インストール済パッケージのアップデート
  yum:
    name: '*'
    state: latest
  become: yes

 構成

 play はあるべき姿を定義した処理の単位です。この play が 1 つ以上集まって playbook を構成します。具体的には Web サーバー用 play 、DNS サーバー用 play などが集まって 1 つの playbook を構成します。 play 内は targets / vars / tasks / handlers の 4 つのセクションで構成します。

---
- hosts: all

  vars:
    pkgs:
      - open-vm-tools
      - httpd

  tasks:
    - name: 初期パッケージのインストール
      yum:
        name: "{{ item }}"
        state: latest
      loop: "{{ pkgs }}"
      become: yes

    - name: インストール済パッケージのアップデート
      yum:
        name: '*'
        state: latest
      become: yes
上記の playbook の場合、次のようになります。
■ targets セクション
- hosts: all
■vars セクション
  vars:
    pkgs:
      - open-vm-tools
      - httpd
■tasks セクション
  tasks:
    - name: 初期パッケージのインストール
      yum:
        name: "{{ item }}"
        state: latest
      loop: "{{ pkgs }}"
      become: yes

    - name: インストール済パッケージのアップデート
      yum:
        name: '*'
        state: latest
      become: yes

 冪(べき)等性

対象ホストに対し playbook ファイルを複数回適用(実行)しても常に同じ結果になることを「冪等性を保っている」と言います。 Ansible は構成管理ツールなので当然のことです。通常、モジュールを使用して playbook を記述した場合は Ansible が冪等性を保ってくれます。 shell モジュールや command モジュールは shell script や Linux コマンドを実行します。これらのモジュールを使用した場合、冪等性を保つことが難しくなります。これは  Ansible がshell script をキックした場合であっても Ansible が script の中身や実行結果の監視ができないためです。 shell モジュールや command モジュールを使用したい場合は、代わりになるモジュールがないか確認することをお勧めします。

 変更履歴

2019/02/27 targets/vars/tasks の各セクションの具体例を追記した

カテゴリー

目次

QooQ