ブロックチェーン・AI・システム開発の株式会社INDETAIL

RolesでAnsibleのPlaybookを整理してみよう

2014.06.30
tacck

最近、大学時代の友人にAnsibleを勧めたら「いつのまにPythonユーザになったの?」と聞かれました。

ちなみに、Pythonでプログラミング学習を行なえるCheckiOというサービスがありますが、私のレベルは4です(2014/6/30現在)。

そんなPython初心者のtacckでも使えるAnsible、素晴らしいですね。

 

前回はAnsibleの実行手順となる、Playbookの簡単な書き方を説明しました。

今回は、このPlaybookを整理して書くために、"include"を使った書き方、"Roles"という機能を使った書き方、の説明をしてみたいと思います。

includeによるPlaybookの分割

まず、前回のPlaybook vagrant.ymlを見てみましょう。

このPlaybookでやっていることは、大きくわけて2つあります。

  • Apache HTTPDのインストール
  • インストールしたHTTPDの動作チェック

動作チェックのためにPythonパッケージが必要なため、わかりづらくなっています。

まずは、タスクを2つのファイルに分割してみましょう。

まずは、Apache HTTPDインストール用のファイルhttpd-install.ymlです。

次に、HTTPD動作チェック用のファイルcheck-httpd-is-working.ymlです。

これら、複数のファイルに分けたタスクを一つにまとめるため、"include"という記法を使ってvagrant.ymlを書き直します。

これで、この処理が大まかに何をやりたいのか、だいぶ見通しやすくなりました。

前回と同じ環境でvagrant provision実行した結果は以下となります。無事に成功していますね。

Rolesを適用して書き直してみる

includeを使うことで、Playbookを分割することができました。でも、分割の仕方、ファイル名の付け方など、個人の裁量のみではわかりづらいものが出来上がりかねません。

そこで、Rolesを適用してみます。

Rolesは、ざっくりと言えば「Ansible標準でのPlaybook命名・配置パターン」となります。このパターンに従ってファイル名をつけ、ファイルを配置しておけば、Ansible側でうまく解釈してinlcudeを実行してくれる、そのおかげで他の人にも見やすくなる、というものです。

言葉ではわかりづらいので、Roles適用後のファイルツリーを見てみましょう。

"roles"ディレクトリ直下の"httpd"と"check-httpd"がロール名となります。

"httpd"がincludeでの"httpd-install.yml"に、"check-httpd"が"check-httpd-is-working.yml"に、それぞれ該当しています。

では、各ファイルを見ながらRoles適用時の書き方を確認します。

呼び出し元

vagrant.yml

呼び出し元となるvagrant.ymlでは、"roles"というものを使っていますね。ここに、ロール名を書くことで各ロールを呼び出すことが出来ます。

ロール:httpd

roles/httpd/tasks/main.yml

roles/httpd/vars/main.yml

上記の様に、"tasks"ディレクトリ直下の"main.yml"に何をするかを書きます。

"vars"直下の"main.yml"には、tasksで使用する変数を宣言しておくことで、指定の柔軟性、tasksの見通しの良さ、を確保することが可能です。

(今回の規模ですと、少々無理矢理感が出てしまいますが。)

ロール:check-httpd

roles/check-httpd/tasks/main.yml

roles/check-httpd/files/index.html

ここでは、" roles/check-httpd/tasks/main.yml"内の"copy"で使用している"index.html"が、パス指定無しにファイル名のみで記載できていることに注目してください。

このように、使用するファイルを"files"配下に置くことで、tasksでのファイル指定でパス指定が不要となり、シンプルな記述を可能としています。

実行

では、実際にRoles適用後の状態で、動作確認をしてみましょう。vagrant destroyを実行して、最初から確認してみます。

はい、無事にRoles適用した状態でも、HTTPDのインストールと動作確認を行なうことができました。

このように、きちんとしたパターンに沿ってファイルを作成していくことで、見通しの良さを確保できるとともに、運用時のコストも下げることができます。

みなさんも、是非Ansibleを使う場合にはRolesを使って書いてみましょう。

tacck Takuya KIHARA

エンジニア (モバイルアプリ、フロントエンド、バックエンド、インフラ) 得意なことは、領域をまたいで考え、開発すること。 ブログでは、主にAnsible、Docker、Raspberry Piのことを書いています。 好きなフィギュアスケートの技は、スプレッド・イーグルです。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。