[備忘録] Ansibleもくもく会 （第2回）で使ったEthapad

#Ansibleもくもく会（第2回） 2018年3月27日実施
3月からレッドハット社員主体で開始したAnsibleもくもく会。3月27日に第2回を実施いたしました。レッドハットがAnsibleおよびAnsible Towerを利用していただける、AWSのリソースを提供し、コンテンツに沿ってもくもく自習して頂く場です。今回、Ethapadを活用してQ&Aの受け答えをしていましたので、備忘として残しておきます。

イベントの詳細は以下のConnpassのサイトからご参照ください。
https://ansible-users.connpass.com/event/79866/

#Ethapadの内容
↓ここからEthapadでやり取りのあったQ&A内容を残しておきます。↓

- 喫煙所はありますか？
    - Ans.ビルの中にはないです。8時まではビルへ自由に出入りできますので、恵比寿駅前の喫煙所までお願いします。1Fから出て、駅にまっすぐ行った先のスタバの目の前くらいです。
    - 8時以降はビルに鍵がかかり、入ることができなくなるので気をつけてください。
* トイレはありますか？
	* ガラスの扉を出たところすぐに男子トイレが、まっすぐ行った右手に女子トイレがあります。
* 演習はどこから始めたらいいのでしょうか？
	* 配られた紙の、
	* [control]
	* ansible ansible_host=XX.XX.XX.XX
	* 👆このホストへsshでログインをして始めてください。こんな感じ $ ssh studentNN@xx.xx.xx.xx 
	* ログインID/Passは配られた紙の上から2行目3行目です。
	* ログインしたら、ansible --version などでansibleがインストールされているかを確認するといいと思います。
* [Q]Ansible 初めてです。 node の設定ファイルはどこにあるのでしょうか？
	* 確か、ログインしたホームディレクトリ直下にある .ansible.cfg にデフォルトで使用する Inventory ファイル（nodeとかの接続情報が書いてあるファイル）のパスがかかれてたと思います。
	* $ ansible --versionを実行すると、ansible.cfgの指定箇所がわかります。
	* ~/.ansible.cfg でした。ところで絵文字ってどうやって打ってますか？→Macだと「えもじ」と打つと👍❗になります👍👍			
	* "cat /home/studentXX/.ansible.cfg"
	[student01@ip-172-31-11-35 ~]$ cat ~/.ansible.cfg
	[defaults]
	connection = smart
	timeout = 60
	inventory = ~student01/lightbulb/lessons/lab_inventory/student01-instances.txt
	host_key_checking = False
	上記のansible.cfg内で、デフォルトのインベントリファイルを予め指定してあります。なので、Ansible実行時にインベントリ指定の省略できます。"ansible -i <インベントリファイル>"の-iの部分は省略可能。
		* "cat ~studentXX/lightbulb/lessons/lab_inventory/studentXX-instances.txt"
	* この内容が紙で配られているはずですね
	* [蛇足] $ ansible all --list-hosts とかでもリストだけは出たりします。 -vとか-vvつけると詳細も。
* もくもく会でご用意いただいたAWS環境と同じ環境を、帰宅後に自分の環境で構築して復習したいです。同じ環境を作るにはどのように構築したらいいでしょうか。
    * https://github.com/ansible/lightbulb/blob/master/tools/aws_lab_setup/README.md
    * こちらのドキュメントから構築方法が確認できます。t2microとt2mediumが利用されています。
    * 複数インスタンスを起動する場合にはAWSのインスタンス起動数のLimitationを別途解除いただければできるはずです。
    * lightbulb/Vagrantfileを使えば、ローカルでも練習環境を構築できます。でも、色々追加設定が必要のため、初心者にはオススメできません。
* Ansible初めての方はGuide（ハンズオン）から始めるのがオススメをもとに実施していますが、コマンドのオプション等を調べたい場合はどうしたらいいでしょうか？
    * https://docs.ansible.com/ansible/2.4/command_line_tools.html にコマンドの使い方が載っています。
    * もしくは、ansible-playbook --helpで詳細なヘルプは確認できます。
    * 基本的な書式は、ansible-playbook -i <インベントリファイル名> <Playbookファイル名>です。
* (k.nakayama.pg)Ansible Tower 演習のStep7のsetup script が10～15分時間が掛かる認識で合っていますか？
	* はい、setup.shを流したあと15分程度はかかるかと思います。
	* PostgresのインストールとDBスキーマの初期化がありますので。
* pg_passwordには何を指定すればよいのでしょうか？？
    * "password"等でも大丈夫です。
* Towerのバージョンですが、Limitedではなく、今回の演習ではEnterpriseの方がよいですか？
	* はい。Enterprise版です。Workflowが使えます。
	* ありがとうございます！！！
* Engine 2 playbook Section 3: Adding Tasks to Your Play で httpd.conf じゃなくて index.html コピーしてますか？してますね解決しました。
    * Exercise 2 の new credential の priveldge escalation は PRIVILEGE ESCALATION METHOD が正しいみたいです。
* Ansible Tower の演習２のステップ４.インベントリ追加のところ、追加しようとすると「インベントリー」と「スマートインベントリー」が出るのですが、どちらを選択すればよいですか？
	* 「インベントリー」を選択してください。
	* 了解です！！ありがとうございます！！
*   Towerにおける「all」グループのvarsの定義はインベントリーにおけるvarsの定義と同一ですか？
	* Towerのインベントリですか
	* はい
	* 質問の答えとしては、今回は同じVarsが指定されているはずです。tower-manageコマンドでImportしているので。
	* AnsibleTowerのGUIから”インベントリー/指定したインベントリ/グループ”と辿っていくと、先ほどCoreで見ていたInventoryと同じグループ構成のものが見えてきます。
	* さらに"Web/ホスト"と辿ると、Nodeが３つ見えてくるはずです。
	* node-1などをクリックすると、ImportされたVarsが"変数"と記載されたところに入っているのが確認できます。
	* http://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#extra-variables
	* ☝️のドキュメントの、Ansible Tower Variable Precedence Hierarchy (last listed wins)がわかりやすいかもです。
	* TowerとCoreではインベントリーの扱いが異なるので、CoreのInventoryへ記載していたものはTowerではTower Inventoryへ置き換わります。
	* TowerでJobTemplateの作成時に、指定したいグループなどを指定することが可能です。
	* ☝️今回の演習もそうなっていましたね。Job Templateで”制限”にて"web"を指定していました。

* 解答例の部分で {% raw %}  {% endraw %} と表示されている部分がありますが、これは Playbook には記載しなくてOKです。
	* このファイルから Sphinx とかでドキュメント生成するときに使われるんだと思います。 :b
* inventory.ini の指定もしなくてもOKですね
* curry9999さん登場しましたのでここで回答してもらいたいと思います。真ん中のほうに座っているので口頭で質問してみても良いかも。
 
* ToALL >> Playbook作成時のおすすめのエディターを教えてください(宗教戦争ではないです)
	* Sublimeがシンプルで好きです。
	* VisualStudio Code 最高！ExtentionでAnsible auto-completeを入れると更に便利です。
	* いいですね、ワンクリックですぐPlaybook実行できるのも素敵です！
	* Atomも便利。Pluginでlanguage-ansibleとautocomplete-ansibleがある
	* Emacs の yaml-mode + indent-guide が好きです。
	* viで戦っています。
	* VisualStudio Codeは良いですね・・・。
	* vimでオススメのpluginあったら教えてくださいー。chase/vim-ansible-yamlがメンテナー募集してて危なそう?

* Exercise 1でサービスを立てたり止めたりしますが、systemctl status xxxのようにステータスを確認する方法はあるのでしょうか？
	* どのExerciseですか？Ansible Core？Tower？
	* 失礼しました。ansible_engineのExercise1　1-adhoc step5, step6です。
	* Ansible moduleは冪等性を実現するための機能として実装されています。Status確認ような操作は、以下のようなコマンドで確認できます。
	* $ ansible web -m shell -a "systemctl status httpd"
	* 有難うございました。
* Towerの演習まで終了した人は、AnsibleTowerのワークフローテンプレートなどぜひ試して見てくださいね。
	* テンプレート/追加/ワークフローテンプレートで作成できます。複数のJobTemplateを順番に実行していくことができます。
	* AnsibleTowerのProjectやJobTemplate、などの単語を知るにはこの辺を読んでみるのもおすすめです。設定一式を解説しています。
		* https://www.slideshare.net/ssuserf487dc/ansible-tower-with-vmware-rev22-88033172
* https://{AnsibleTowerIP}}/api/v2 と打つと、API既存の Playbook を Tower に移行するときにどんな注意が必要ですか？

* pause や interactive に入力を求めるものはそのままは移行できない → 入力がどうしても必要なら Survey を使う。そもそもなぜ入力が必要かを見直して方がいい。
	* Ansible と Tower のバージョンに組み合わせがあるので注意が必要
	* Playbook が巨大だと Tower の動作が重くなる
		* 大きなものは Tower としては workflow でつなぐ
		* 意味のある小さめの単位に分割する
		* 小さい方がテストしやすかったり、流用も効くので私もおすすめです
		* Playbook内で分岐が多くなるようであれば、Module化してしまった方がいい

お疲れ様でした！

       \   ^__^
        \  (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||



#おわりに
LT枠では事前立候補者の方以外からの質問やコメント、ディスカッションがあり活発でした。
Ethatpadは以下のサイトでおそらく開発元がフリーで立ち上げることができるので使いやすいです。すごくシンプルです。
https://oasis.sandstorm.io/

終了後、少し遅い時間でしたが、Ansible飯（という名の懇親会）を実施しました。割りと少人数での実施だったので、包み隠さずいろいろなお話がありました。

次回は4月中にできれば実施しようと思っていますが、まだちょっとわかりません。。
メモに残っているとおり、ご自身の環境でも実施可能ですので是非取り組んでみてください。もしもAnsible Towerをガッツリ検証してみたい、ということがあれば、ansible-jp@redhat.comまでご連絡ください。

今回ブロガー枠での参加の方の記事：
http://tocyuki.hatenablog.jp/entry/2018/03/28/112129