3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Static Inventory の内容を Dynamic Inventory に変換できた

Last updated at Posted at 2017-02-20

Static Inventory の内容を Dynamic Inventory に変換する必要あるの?

そもそもなんでこんなことをしようかと思ったかというと、

  • サービスのリリース後に、ホスト(VM)がダウンしたりアップしたり、フェイルオーバーしてサーバと役割の対応が変化したのを検知してインベントリを書き換える手間をなくす。
  • サービスリリース時のインベントリはそのまま残しておきたい
  • サービスリリース後は静的インベントリを一回参照して、実際に稼働しているホスト情報で上書きして動的インベントリを生成できれば
    安心して ansible を動かすことができる環境が手に入る
  • Inventory の内容を Dynamic Inventory に変換できれば、リリース前/後の区別がなくなって便利になる

実際に稼働しているホスト情報で上書きする

  • ここは個人的のやり方だが、インベントリに書いたグループ/ホスト情報と Consul に登録しているサービス情報を同期させているため、
    静的インベントリからグループ名を取り出し、そのグループについて Consul にどのホストを使用しているかを問い合わせれば
     現在の稼働状況が取得できる。これを動的インベントリ形式で出力すればよい。

参考リファレンス

Developing Dynamic Inventory Sources
Python API
インベントリを読み込むコードが書いてあったので参考になった

静的インベントリをロードするコード

from ansible.parsing.dataloader import DataLoader
from ansible.vars import VariableManager
from ansible.inventory import Inventory

def _load_ansible_staitc_inventory(filename):
    inventory = Inventory(
        loader = DataLoader(),
        variable_manager = VariableManager(),
        host_list = filename
    )
    return inventory

実はこんだけだった
これさえ解ればあとは、Dynamic Inventory 形式に整形して出力するだけ。(なので省略)

で、Consul の情報で上書きした動的インベントリ生成するコードがこれ

python-ansible-dynamic-inventory

興味ありましたら参考にしてみてください。
※バグ報告、プルリク大歓迎です。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?