Ansible (7) playbookを書こう<後編>

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

前回に引き続き、今回のゴールは、Ansible の Playbook を書くことです。

前回、Playbook作成のお作法としてディレクトリ構造を説明しました。

複数ディレクトリがあると全体の把握がしにくいと思うかもしれませんが、一度 Best Practice のディレクトリ構造に慣れてしまえば、Playbookのメンテナンスが楽ですし、他の人が作ったPlaybookを読む際にも共通の認識になるので、理解しやすいです。

1. Playbookを作成する

今回は運用的なPlaybookを書いてみます。

Playbookの内容は、『サーバの情報やリソースを確認して、メールで報告する』こと。

今回はこのようなディレクトリ構成にしました。

一つずつ紹介します。

▼hostsファイル

192.168.12.183というサーバに実行するので、インベントリファイルにこのサーバを指定します。
1台しかないですが、一応 webserverというグループにいれました。

 

▼ operation.yml

着火点となるメインのPlaybookです。

weserver グループに属するリモートサーバに対して、Ansibleから vagrant ユーザで接続すること、sudoを利用することが書いてあります。

また、roles として、common が include されています。

 

▼roles

roles/common/ 以下には、さらにtasksとhandlersがあります。

■roles/common/tasks/main.yml

このPlaybookの説明を行います。ポイントは4つです。

  • shell モジュールを利用して、3つの Linux コマンドを実行しています。(vmstat、top、less /var/log/messages)
  • register を利用して、コマンドの実行結果をそれぞれjson形式の変数に登録しています。(vmstat_result、top_result、log_result)
    ※この変数はPlaybookを実行中の間のみ有効です。
  • ignore_errors の条件分岐で、仮にコマンドの実行結果が失敗してもPlaybookを進める。
  • 最後に、notify で「send mail」task を呼び出す。

中身はちょっとごちゃごちゃしていますが、YAML形式だと見た目がシンプルでいいですね。

 

■roles/common/handlers/main.yml

先ほどの roles/common/tasks/main.yml の最後で、「notify: send email」を実行しました。
すると、こちらのPlaybookが呼び出されます。

このPlaybookのポイントは3つです。

  • local_action : mail は、特別な書き方で mail モジュールをリモートサーバではなく、Ansibleサーバで実行するという意味です。つまり、このメールの送信元はAnsibleサーバになります。
  • FACTS の中から {{ansible_fqdn}} を利用している。Ansible はリモートサーバへの Playbook実行前に 「GATHERING FACTS」を行い、サーバの情報をjson形式で変数にします。今回はその中からサーバのホスト名を持ってきました。
  • roles/common/tasks/main.yml のPlaybookで変数にしていた vmstat_result、top_result、log_result の中から実行結果のみ見たいので stdout を付けました。

 

説明が長くなりました。。
では、このPlaybookを実行してみましょう。

無事に成功しました。

そして、それぞれのコマンドの実行結果がメールで飛んできたので、成功です。

 

今回はここまで!

次回は、Ansible tower について書こうと思います。

お楽しみに!

 

Share on LinkedIn
LINEで送る
Pocket

吉村

吉村

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