Top Banner
Dynamic Inventoryを使ってみよう! Ansible Meetup in Tokyo 2015.09
14

Ansible meetuptokyo 2015 Dynamic Inventory

Jan 18, 2017

Download

Technology

Hideki Saito
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ansible meetuptokyo 2015 Dynamic Inventory

Dynamic Inventoryを使ってみよう!Ansible Meetup in Tokyo 2015.09

Page 2: Ansible meetuptokyo 2015 Dynamic Inventory

自己紹介• 氏名: さいとう ひでき (Twitter: @saito_hideki)

• 株式会社インターネットイニシアティブ

• 日本OpenStackユーザ会

• 著書 OpenStackクラウドインテグレーション ISBN: 9784798141251

Page 3: Ansible meetuptokyo 2015 Dynamic Inventory

Ansibleの良い所長所は沢山あるけれど、必ず挙げられるものの1つに「エージェントが不要」という特性があります。

• 操作対象ノードを選ばない

• 最低限、SSHでの接続性だけ確保できればOK

• 操作対象ノードはInventory FileにIPかホスト名を記述するだけ

しかし、これが災いすることも…

Page 4: Ansible meetuptokyo 2015 Dynamic Inventory

Ansibleが、エージェントレスであるがゆえに抱えてしまう課題

ノードリスト(Inventory File)のメンテナンス

ちょっとした災い

クラウドでは 頻出な状況

頻繁な書き換え

対象ノードが 作られる

対象ノードが 突然消える

Page 5: Ansible meetuptokyo 2015 Dynamic Inventory

たとえばこんな環境

クラウド環境では ノードの作成・削除が簡単 便利だけど管理面では…

Page 6: Ansible meetuptokyo 2015 Dynamic Inventory

[解決策] Dynamic Inventoryで 実行時に自動生成!

Page 7: Ansible meetuptokyo 2015 Dynamic Inventory

Dynamic InventoryDynamic Inventoryってなに?

• Ansibleが利用するInventory情報を生成する実行可能プログラム

• 通常のInventory Fileの代わりに、-iオプションでansible,ansible-playbookコマンド実行時に指定

• Inventory Fileを /etc/hostsファイルに例えると、DNSやNISのクライアントライブラリのようなもの

乱暴に言うと、インベントリ情報の管理を 他の誰かに丸投げする仕組み

Page 8: Ansible meetuptokyo 2015 Dynamic Inventory

ノードリストの管理はクラウドコントローラにお任せ

仕組みは単純

VM VM VM

Controller

Dynamic Inventory

(1) exec

(2) GET VM LIST/VM DETAIL(host毎)

(3) VM LIST/VM DETAIL(host毎)(4) Inventory

(5) Operation

Page 9: Ansible meetuptokyo 2015 Dynamic Inventory

利用方法• Dynamic Inventoryは実行可能プログラム

➡ 他の誰か(クラウドコントローラ)に問い合わせてインベントリ情報生成し、JSON形式で標準出力します

➡ --list と --host <nodename or IP> オプションを持つ

• ansibleコマンド実行時に-iオプションで指定 ➡ 生成したインベントリ情報を元に操作対象ホストに接

続します

Page 10: Ansible meetuptokyo 2015 Dynamic Inventory

注意点Dynamic Inventoryプログラムは、うまく書かないとクラウドなどのAPIサービスに高負荷をかけます。

• 過剰なAPIコールによるレートリミット到達 以下のような流れで実行されることから、作りによっては過剰なAPIコールを発生させることになる。 (1) --list で対象ホストを絞り込む (2) ホスト毎に --host オプション付きで再実行され、個々のホストのインベ

ントリ情報を生成する

クラウドAPIの性質として、(1)実行時には、メンバーホスト固有の情報もあわせて取得することになる場合が多いため、この固有の情報を_meta:hostvars{}にホスト毎のエントリを作って格納し、--listの実行結果に含めて返すと(2)の実行を回避できます。

Page 11: Ansible meetuptokyo 2015 Dynamic Inventory

$ ./bar.py --list | jq . { "others": { "hosts": [ "10.0.0.7" ] }, "db": { "hosts": [ "10.0.0.26", "10.0.0.25" ] }, "app": { "hosts": [ "10.0.0.24", "10.0.0.23", "10.0.0.22" ] }, "web": { "hosts": [ "10.0.0.20", "10.0.0.21", "10.0.0.19" ] }, "_meta": { "hostvars": { “10.0.0.25”:{key: value, … } “10.0.0.25”:{key: value, … } } }, }

_meta$ ./inventory.py —list | jq . { "others": { "hosts": [ "10.0.0.7" ] }, "db": { "hosts": [ "10.0.0.26", "10.0.0.25" ] }, "app": { "hosts": [ "10.0.0.24", "10.0.0.23", "10.0.0.22" ] }, "web": { "hosts": [ "10.0.0.20", "10.0.0.21", "10.0.0.19" ] } }

_metaなし _metaあり

Page 12: Ansible meetuptokyo 2015 Dynamic Inventory

Dynamic Inventory でクラウドにも対応! _metaも忘れずにな!

Page 13: Ansible meetuptokyo 2015 Dynamic Inventory

公式参考資料★ Dynamic Inventory

• http://docs.ansible.com/ansible/intro_dynamic_inventory.html

★ Developing Dynamic Inventory Sources • http://docs.ansible.com/ansible/developing_inventory.html

★ サンプルコード • https://github.com/ansible/ansible/tree/devel/contrib/inventory

Page 14: Ansible meetuptokyo 2015 Dynamic Inventory

ご静聴ありがとうございましたAnsible Meetup in Tokyo 2015.09