てんこ

ブログ名は愛猫(てん)の愛称です。中身は個人のIT系学習記録です。

Ansibleもくもく会の宿題(Tower関連)-その1

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

というような流れになっていました。

これが読んでいて楽しいなと思いました。 結局、こういうこと(サーバデプロイから内部のセットアップにまたがる処理など、サービスレイヤをまたいだ自動化)を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などに準備しておいた方がいいですね。

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