View
4.069
Download
0
Category
Preview:
Citation preview
自己紹介• 氏名: さいとう ひでき (Twitter: @saito_hideki)
• 株式会社インターネットイニシアティブ
• 日本OpenStackユーザ会
• 著書 OpenStackクラウドインテグレーション ISBN: 9784798141251
Ansibleの良い所長所は沢山あるけれど、必ず挙げられるものの1つに「エージェントが不要」という特性があります。
• 操作対象ノードを選ばない
• 最低限、SSHでの接続性だけ確保できればOK
• 操作対象ノードはInventory FileにIPかホスト名を記述するだけ
しかし、これが災いすることも…
Ansibleが、エージェントレスであるがゆえに抱えてしまう課題
ノードリスト(Inventory File)のメンテナンス
ちょっとした災い
クラウドでは 頻出な状況
頻繁な書き換え
対象ノードが 作られる
対象ノードが 突然消える
Dynamic InventoryDynamic Inventoryってなに?
• Ansibleが利用するInventory情報を生成する実行可能プログラム
• 通常のInventory Fileの代わりに、-iオプションでansible,ansible-playbookコマンド実行時に指定
• Inventory Fileを /etc/hostsファイルに例えると、DNSやNISのクライアントライブラリのようなもの
乱暴に言うと、インベントリ情報の管理を 他の誰かに丸投げする仕組み
ノードリストの管理はクラウドコントローラにお任せ
仕組みは単純
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
利用方法• Dynamic Inventoryは実行可能プログラム
➡ 他の誰か(クラウドコントローラ)に問い合わせてインベントリ情報生成し、JSON形式で標準出力します
➡ --list と --host <nodename or IP> オプションを持つ
• ansibleコマンド実行時に-iオプションで指定 ➡ 生成したインベントリ情報を元に操作対象ホストに接
続します
注意点Dynamic Inventoryプログラムは、うまく書かないとクラウドなどのAPIサービスに高負荷をかけます。
• 過剰なAPIコールによるレートリミット到達 以下のような流れで実行されることから、作りによっては過剰なAPIコールを発生させることになる。 (1) --list で対象ホストを絞り込む (2) ホスト毎に --host オプション付きで再実行され、個々のホストのインベ
ントリ情報を生成する
クラウドAPIの性質として、(1)実行時には、メンバーホスト固有の情報もあわせて取得することになる場合が多いため、この固有の情報を_meta:hostvars{}にホスト毎のエントリを作って格納し、--listの実行結果に含めて返すと(2)の実行を回避できます。
$ ./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あり
公式参考資料★ 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
Recommended