最近ブログが滞ってきていて。
Ansibleが触りたくなってきていて。
ブログ枠が空いていたAnsibleもくもく会 (サーバ編)に参加してきました!
Ansibleもくもく会とは
Ansible 及び Ansible Towerに関してもくもく勉強をしていく場になります。今回はGitHubに公開もされている、Ansible Tower含むハンズオンコンテンツ(英語)を活用しながらもくもくしてみましょう!
らしい。
実はあまり内容を把握せず行ってしまいました。
Ansible ユーザー会 が主催しており、1ヶ月に1回くらいの頻度で開催されているみたいです。
なんと、ハンズオンに必要なAnsibleをインストールしたサーバー、自動化対象のサーバー、ネットワーク機器は、すべてレッドハットさんから提供されています。 参加者1人1人にこれらのサーバー群が提供されているみたいです。
Ansible、使ってみたいけど環境の用意が面倒なんですよね。こういう贅沢な環境はとてもありがたい。。
やったこと
推奨されていたlightbulbの資料を使用しました。 こちらはワークショップ用に作成された資料で、日本語のドキュメントがしっかり整備されているため、迷わずAnsibleに入門できます。
Ansible Engineは以下から。
https://github.com/network-automation/linklight/tree/master/exercises/ansible_engine
Ansible Towerは以下から。
https://github.com/network-automation/linklight/blob/master/exercises/ansible_tower/README.ja.md
Ansible Engineから始めてAnsible Towerが終わったときにちょうど2時間が終わりました。
Ansible Engine編
実はAnsibleを触ったのはこれが初めてではなく、
以前Dockerと絡めて使ってみたりしていました。 www.kimoton.com
サクサク進めた結果思ったこと。
syntax-checkが便利
知ってはいたけど、syntaxのチェックに--syntax-check
便利です。
OKだとplaybookの名前が表示されるだけ。
$ ansible-playbook install_apache.yml --syntax-check
playbook: install_apache.yml
ダメだとこんな感じで教えてくれます。
$ ansible-playbook install_apache.yml --syntax-check ERROR! Syntax Error while loading YAML. mapping values are not allowed in this context The error appears to have been in '/home/student32/apache_basic/install_apache.yml': line 4, column 11, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: name: Install the apache web service become: yes ^ here
templateモジュールはjinja2を使用
templateモジュールでは、djangoでも使われてるテンプレートエンジンjinja2が使えます。 Pythonユーザーとしては親しみがあるテンプレートエンジンなので、積極的に使っていきたいですね。
lightbulbでは、HTMLのテンプレートに値を埋め込んでいました。
・ ・ <div class="container"> <img src="https://www.ansible.com/hubfs/2016_Images/Assets/Ansible-Tower-Logotype-Small-RGB-FullBlack.png"/> <p>{{ apache_test_message }}</p> </div> <footer>{{ inventory_hostname }}<br />Ansible by Red Hat</footer>
プログラムごとに用意する設定ファイルなんかにも使えそう。
頻繁に使うモジュール
話によると、template, file, yum, service 辺りのモジュールを知っておけばまぁ大抵のことはできそう。
- template
上に書いた通り。Jinja2テンプレートエンジンを使用してテンプレート機能を利用することができます 。 - file
ファイル、ディレクトリ、シンボリックリンクの作成、変更、削除に使用。 - yum
その名の通り。yumを使ったパッケージインストールに使用。 気になって調べてみたら、aptモジュールもあるんですね。。 - service
常駐プロセスの起動、停止なんかに使用。
Ansible Galaxyすごい
Ansible Galaxyは知らなかったのでちょっと人生を悔いました。 これいいですね。。
$ ansible-galaxy init apache-simple
$ tree apache-simple/ apache-simple/ ├── README.md ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml
このフレームワーク的なものだけでも十分便利だが、
以下のAnsible Galaxyでは、作成されたroleがオープンソースで公開されており、車輪の再開発をせずに済むようになっているという。 galaxy.ansible.com
試しにapacheをインストールしてみる。
-p
でインストール先を指定できます。
$ ansible-galaxy install -p . geerlingguy.apache - downloading role 'apache', owned by geerlingguy - downloading role from https://github.com/geerlingguy/ansible-role-apache/archive/3.0.3.tar.gz - extracting geerlingguy.apache to /home/student32/.ansible/roles/geerlingguy.apache - geerlingguy.apache (3.0.3) was installed successfully
デフォルトでは~/.ansible
以下にインストールされますが、-p
で配置場所を変更することも可能です。
ダウンロードしたroleを動かすため、以下のようにinventoryファイルを作成します。
--- - hosts: web name: This is my role-based playbook become: yes roles: - geerlingguy.apache
実行!
$ ansible-playbook site.yml PLAY [This is my role-based playbook] ************************************************************************************************************************************ TASK [Gathering Facts] *************************************************************************************************************************************************** ok: [node3] ok: [node1] ok: [node2] TASK [geerlingguy.apache : Include OS-specific variables.] *************************************************************************************************************** ok: [node1] ok: [node2] ok: [node3] ・ ・ PLAY RECAP *************************************************************************************************************************************************************** node1 : ok=13 changed=3 unreachable=0 failed=0 node2 : ok=13 changed=3 unreachable=0 failed=0 node3 : ok=13 changed=3 unreachable=0 failed=0
これだけでApatchの構築ができちゃうんだから。
ほんと、無知は怖いですね。
Ansible Tower編
こちらは全く経験がありません。噂に聞くAnsible Tower。
なんかイメージだと並列処理とか分散処理とか、そんなことに特化しているのかと思っていました。
会社の規模のせいもあって当分使うことはないでしょうけど、お試しできてどういうものか大体を把握できたので良かったです。
ノロノロ進めた結果思ったこと。
有料?無料?
Ansible Tower の実行にはライセンスが必要ですが、最大ホスト 10 台の管理までは料金が発生しません。また、10 台以上のホストを使用して Ansible Tower の機能を確認する場合は、試用版のライセンスをご利用いただけます。
実はAnsible Tower 10 ノードまでだったら無料で使用できます。
もくもく会では、Ansible Towerを30日間フル機能をお試しできるエンタープライズキーを以下公式ページより申請しました。
エンタープライズキーは以下から取得できます。
Ansible Tower Trial | Ansible.com
詳細な料金に関しては以下を参考にどうぞ。 Ansible - Tower Pricing
Standard planで$10,000/yearみたいですね。たっかい。。
AWXって?
もくもく会でも話が上がっていたAWXについて調べてみました。
AWXはAapach 2.0ライセンスで公開されている開発版(not stable)のようです。 Ansible TowerはAWXの特定バージョンからリリースされ長期サポートできるようにしているものなんだとか。
残念ながらAWXのドキュメントはないので、Towerのドキュメントを読んで推察するしかないということです。 ダッシュボードを見る感じほとんどの機能は網羅されていそうなので、使うとしたらこっちになりそうですね。
Ansible TowerってGUI版のAnsible?
どうやらそれだけではないようです。
Ansible Towerのダッシュボードはこんな感じ。
通常のAnsibleをGUIから動かせることに加え、ジョブスケジューリングだったりロールベースのアクセスコントロールだったりいろいろ拡張機能があります。
中でも感動したのがSURVEY機能。 これを使うと、Ansible TowerからJobを実行する際に任意の値をユーザが追加することができます。 実行引数を渡せる的なモノです。
その他
飲み物飲み放題
なんかビールその他飲み物が出てくる。
サーバーに関してもそうだけど、RedHatさん太っ腹。
自分はなっちゃんを頂きました。
質問投げ放題
もくもく中は共有しているgoogle document上で自由に質問を投げることができて、
投げた質問はコンマ2秒くらいで返ってくる。
以下、へぇーな質問達を簡単にご紹介。
handlerは必ず最後に呼ばれる仕様なのか?
→ notifyされたかどうかをブロック単位で記憶していて、ブロックが終わるときにnotifyされていれば一度だけ呼ばれる。roleを定義した場合、
ansible-playbook site.yml --syntax-check
で対応するrole以下のすべてのyamlを見に行ってくれるのか。
→ import_roleか、include_roleのRole使い方によって変わる。import_roleを使ったPlaybookに、ansible-playbook --list-tasksを実行すると、Tasks一覧も見れる。
ノベルティもらえる
Ansibleマークのなんだろうこれ。バッグにつけるやつ?もらいました。