Ansibleもくもく会 (サーバ編)に参加してきたお話

最近ブログが滞ってきていて。

Ansibleが触りたくなってきていて。

ブログ枠が空いていたAnsibleもくもく会 (サーバ編)に参加してきました!

ansible-users.connpass.com

Ansibleもくもく会とは

Ansible 及び Ansible Towerに関してもくもく勉強をしていく場になります。今回はGitHubに公開もされている、Ansible Tower含むハンズオンコンテンツ(英語)を活用しながらもくもくしてみましょう!

らしい。
実はあまり内容を把握せず行ってしまいました。 Ansible ユーザー会 が主催しており、1ヶ月に1回くらいの頻度で開催されているみたいです。

なんと、ハンズオンに必要なAnsibleをインストールしたサーバー、自動化対象のサーバー、ネットワーク機器は、すべてレッドハットさんから提供されています。 参加者1人1人にこれらのサーバー群が提供されているみたいです。
Ansible、使ってみたいけど環境の用意が面倒なんですよね。こういう贅沢な環境はとてもありがたい。。

やったこと

推奨されていたlightbulbの資料を使用しました。 こちらはワークショップ用に作成された資料で、日本語のドキュメントがしっかり整備されているため、迷わずAnsibleに入門できます。

github.com

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のテンプレートに値を埋め込んでいました。

f:id:kimoppy126:20190228093926p:plain

・
・
<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について調べてみました。

github.com

AWXはAapach 2.0ライセンスで公開されている開発版(not stable)のようです。 Ansible TowerはAWXの特定バージョンからリリースされ長期サポートできるようにしているものなんだとか。

残念ながらAWXのドキュメントはないので、Towerのドキュメントを読んで推察するしかないということです。 ダッシュボードを見る感じほとんどの機能は網羅されていそうなので、使うとしたらこっちになりそうですね。

Ansible TowerってGUI版のAnsible?

どうやらそれだけではないようです。

Ansible Towerのダッシュボードはこんな感じ。 f:id:kimoppy126:20190228140600p:plain

通常の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マークのなんだろうこれ。バッグにつけるやつ?もらいました。

f:id:kimoppy126:20190228000509j:plain:w300