Ansible (6) playbookを書こう<前編>

こんにちわ。
グローバルソリューション事業部の吉村です。
Ansibleまとめ第6回目です。

今回のゴールは、Ansible の Playbook を書くことです。

GitHUB や Ansible Galaxy では大量の Ansible Playbook が公開されていますが、
やはり実際に自分で書かないと覚えられません。
小さいことでも良いので、まずは自分で書いてみましょう!

1. ディレクトリ構造を考える

まずは Ansible の Playbook ディレクトリ構造のお作法を紹介しようと思います。
GitHUB のAnsible公式 で公開されている lamp_simple Playbookを参考にしましょう。
是非、一度GitHUB上からダウンロードしたり、実際に確認してみてください。

なお、README.md、LICENSE.md は GitHUB での管理用ファイルのため無視してください。

まず lamp_simple Playbook 全体としてのディレクトリ構造は以下の通りです。

1つの lamp_simple  Playbookの中に、 複数のディレクトリとファイルがあります。

それぞれのディレクトリには役割があり、Ansibleでは Best Practices のディレクトリ構造を公開しています。

 

<参考>「Best Practices – Directory Layout」
http://docs.ansible.com/playbooks_best_practices.html#directory-layout

 

それぞれ説明すると、

■○○.yml ファイル

  • 各ディレクトリに配置されている○○.ymlには、それぞれ Ansible で何をするのかが定義されています。
  • 本例の場合、site.yml が大本のファイルになりますが、ここには 各role の include 情報しか書かれておらず、実際には roles ディレクトリ以下の main.yml ファイルで何をするかが定義されています。

 

■hostsファイル

  • inventory ファイルと呼ばれる、対象ホストや、グループを定義するファイルです。
  • 本例の場合、2台のサーバがあり、webservers グループにweb3サーバ、 dbserversグループにweb2サーバが属していることが分かります。また、all や common といった場合には、両方のサーバを差します。

 

 

■vars(group_vars)ディレクトリ

  • 変数を別ファイルに外出しして、値を変更しやすくします。
  • 本例の場合、group_vars/all に Apache設定やNTP設定に関する変数が定義されていて、group_vars/dbservers に MySQL 設定に関する変数が定義されています。

 

 

■rolesディレクトリ

  • サーバの役割による分岐点です。
  • 本例だと、common、db、web の3つで役割を分けています。

この中でさらに3つのディレクトリに枝分かれしています。

■tasksディレクトリ

  • 各role毎に何を実施するかが具体的に書かれています。例えば、サーバの設定やサービスのインストールなどは tasks ディレクトリ以下の main.yml に記載します。

 

■handlersディレクトリ

  • handlers 以下には基本的にサービス再起動の main.yml を置いています。
  • taskディレクトリ以下の main.yml でサーバの設定変更を行い、設定反映のために handlers で再起動するイメージです。

 

■templatesディレクトリ

  • サービスの設定ファイルのテンプレートを、j2形式で置いています。設定ファイルの中身を全部Playbookで書くよりも、テンプレートファイルを用意して、これを使用するとした方が簡単です。

 

このようなディレクトリ構造になっていますが、パッと見では確認が難しいと思うので、Playbook の状態を確認するansible-playbookコマンドのオプションが用意されています。

 

▼Playbookの書式確認コマンド

Error が出なければ、OKです。

 

▼Playbookのtask確認コマンド

それぞれ、の表示内容は以下の通りです。

  • play #1 : roles/common/tasks/main.yml
  • play #2 : roles/web/tasks/main.yml
  • play #3 : roles/db/tasks/main.yml

▼Playbook実施の対象サーバ確認コマンド

  • play #1 :commonのため、web03とweb02両方
  • play #2 :webserversグループのweb03
  • play #3 :dbserversのweb02

を対象にしていることが分かります。

 

 

今回はここまで!

結局はディレクトリ構造の説明だけで終わりましたが、次回こそはPlaybookを書いていきます。
お楽しみに!

 

Share on LinkedIn
LINEで送る
Pocket

吉村

吉村

クララオンライン グローバルビジネスストラテジー部でマーケティング担当として働いています。 クラウド関連技術と中国関連の情報をお届けしてます。 たまに DJ とかします。日本語RAPが大好きです。