Ansibleもくもく会の宿題(Tower関連)-その1
先日7/9に行われたAnsibleもくもく会にリモートで参加しました。
そのときにやりきれなかったものの宿題をやってみます。
■宿題
- サンプルSCM上にあがっているPlaybook の内容理解について( Playbook読む )
- WorkflowTemplateの分岐判定条件について ( マニュアル読む )
- 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に紹介されているような問題(主に複数ホストデプロイ時のループ処理追加実装)が出るようですね。
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などに準備しておいた方がいいですね。
※内容は間違ってるかもしれませんので、その際には優しく教えてください…