先日7/9に行われたAnsibleもくもく会にリモートで参加しました。そのときにやりきれなかったものの宿題をやってみます。

宿題

  1. サンプルSCM上にあがっているPlaybook の内容理解について( Playbook読む )
  2. WorkflowTemplateの分岐判定条件について ( マニュアル読む)
  3. WorkflowTemplateでのSURVEYについて ( マニュアル読む)

長くなりそうなので、まずはその1を実施。

サンプルSCM上にあがっているPlaybookの内容理解について

サンプルSCMのPlaybookはこちら。

https://github.com/ansible/lightbulb/tree/master/examples

まだPlaybookをごりごり書くようなスキルレベルになってないので、サンプルPlaybook見て何をやろうとしているのか書き出してみました。

No.Playbook名概要単体実施コメント
01apache-basic-playbookbecomeでroot権限で(実際にはsu)、"web"グループに対し、apacheのインストール、httpd.conf/index.htmlの展開 (jinja2 template利用による変数展開) 、httpd自動起動設定、サービス再起動可能ポートが競合した場合はどうなるのか?
02apache-role"apache-simple"というロールの実行。内容そのものは"apache-basic-playbook"と同じ可能この流れ、Engine側でroleやった流れと同じなのか…
03apache-simple-playbook"web"グループに対しapacheを入れ、index.htmlをコピーし、httpdサービスを起動する(自動起動設定はなし)可能これが一番簡単かな?
04cloud-aws"site.yml"から他のymlファイルをイクルードして実行。内容はEC2系のモジュールを利用したプロビジョニングと、プロビジョニングしたホストを"add_host"から"web"グループに入れ、それに対して"apache-simple"ロールの実行不可要AWSアカウント関連の情報
05nginx-basic-playbook"web"グループに対し、nginxと関連コンポーネントのインストール(yum/pip)、nginx.conf/index.htmlの展開( jinja2 ) 、nginx自動起動設定、起動してくるはずのnginxのコンテンツ監視を仕込み、サービス再起動不可nginxのリポジトリがないので最初でエラーになった…
06nginx-remove-playbook"web"グループに対し、nginxのサービスを止め、nginxと関連パッケージの削除(yum/pip)、nginx.conf/index.htmlの削除可能※※"nginx-basic-playbook"が実行完了した後なら。
07nginx-role"nginx-basic-playbook"のrole版(site.yml)、ならびに"nginx-remove-playbook"の呼び出し方を変えたrole版不可No.05と同様の理由(想定)
08nginx-simple-playbook"web"グループに対しnginxを入れ、index.htmlをコピーし、サービスを起動する不可No.03のnginx版。不可の理由はNo.05/07と同じ

apache-basic-playbook

内容としては、Ansible Engineの「演習3 変数、ループ、ハンドラを使う」が完了した後のPlaybookと同じでした。

https://github.com/ansible/workshops/blob/master/exercises/ansible_engine/3-variables/README.ja.md

apache-role

内容としては、Ansible Engineの「演習5 Roles: Playbookを再利用可能にする」が完了した後のPlaybookと同じでした。

https://github.com/ansible/workshops/blob/master/exercises/ansible_engine/5-role/README.ja.md

※そういえば、タイトルがExcuse 1.5ってなってるな…

apache-simple-playbook

内容としては、Ansible Engineの「演習2 初めてのplaybook作成」が完了したものに、index.htmlのコピーが加わっているものでした。

https://github.com/ansible/workshops/blob/master/exercises/ansible_engine/2-playbook/README.ja.md

cloud-aws

https://github.com/ansible/lightbulb/tree/master/examples/cloud-aws

まず、"site.yml"において、"provision.yml"と"setup.yml"をincludeしています。

次に、provision.ymlで以下の処理を実施。

  • VPCの作成(16bitのCIDRを宣言)
  • VPC内に24bitのNetworkを作成
  • VPCにIGW(InternetGateWay)の作成
  • VPC内のルートテーブルにDefaultGatewayを定義(IGW向け)
  • VPCのセキュリティグループでインバウンド方向のTCP22/80/443を解放
  • 最新のCentOS7イメージをAMIから検索
  • t2.microのEC2インスタンスを立ち上げ、検索した最新のCentOS7をAMIとして定義してデプロイ
  • debug。変数表示用?
  • TCP22が上がってくるまでwait forで待ち
  • cloud initが完了するまで90秒ほど待ち
  • Inventoryに対してデプロイされたEC2インスタンスをadd_hostでwebグループに追加登録

このあと、setup.ymlで以下の処理を実施。

  • "apache-simple"ロール用Playbookの実行
  • =実体はapache-role側へのシンボリックリンク
  • →"apache-role"ロール用Playbookの実行

というような流れになっていました。これが読んでいて楽しいなと思いました。結局、こういうこと(サーバデプロイから内部のセットアップにまたがる処理など、サービスレイヤをまたいだ自動化)をAnsibleでやりたいんですよね。

実行自体はしていないんですが、あくまでサンプルのため、実用しようとすると以下のURLに紹介されているような問題(主に複数ホストデプロイ時のループ処理追加実装)が出るようですね。

www.freia.jp

nginx-basic-playbook

apache-basic-playbookのnginx版という感じなのですが、表にも書いたようにnginxのリポジトリが追加されていないため、最初でこけました。

ちゃんとやるならyum_repositoryモジュールでnginx用のリポジトリを追加する感じでしょうかね。

nginx-remove-playbook

セットアップしたものの削除です。

nginx-role

nginx-basic-playbook、remove-playbookをroleにしたものを実行する感じ。

remote.ymlの呼び出し方が、単純なroleの宣言ではなく、include_roleモジュールを使い、tasks_fromでremove用のymlを呼び出しているように見えました。

イメージはあってると思うんですが、ここはもうちょっとマニュアルとにらめっこして見ます。

nginx-simple-playbook

nginxをインストール→indexのコピー→サービスの立ち上げ。

これも最初でこけるはずです。

やってみて

これだけでも、大分勉強になりました。今の自分の理解度もわかるし。後でもうちょっと見直して追記するかもしれません。元々は、WorkflowTemplateで失敗になるものを探す、という目的だったので、現状であれば、正しくはないですが、nginx系のものはON FAILEDの条件で利用できる…のかな?

やりたいことがある場合には、自分のGitなどに準備しておいた方がいいですね。

※内容は間違ってるかもしれませんので、その際には優しく教えてください…


https://tenko.hatenablog.jp/entry/2019/07/15/170539

バックアップ日時: 2026年1月12日