LoginSignup
59
60

More than 5 years have passed since last update.

Dynamic Inventoryを使ってみる

Last updated at Posted at 2013-12-20

ansibleは、インベントリファイルに記載されているホストを認識するのですが、実はInventoryファイルは静的なテキストファイル以外に、実行可能なスクリプトファイルを指定できます。

やり方

Dynamic Inventory
に詳しく記載されていますが、以下のようなjsonを返すスクリプトファイルを用意し、実行権限を付けて保存したファイルを ansible-playbookコマンド等の -iオプションに渡せば良いだけです。

{
    "databases"   : {
        "hosts"   : [ "host1.example.com", "host2.example.com" ],
        "vars"    : {
            "a"   : true
        }
    },
    "webservers"  : [ "host2.example.com", "host3.example.com" ],
    "atlanta"     : {
        "hosts"   : [ "host1.example.com", "host4.example.com", "host5.example.com" ],
        "vars"    : {
            "b"   : false
        },
        "children": [ "marietta", "5points" ],
    },
    "marietta"    : [ "host6.example.com" ],
    "5points"     : [ "host7.example.com" ]
}

ansibleは、インベントリファイルに実行権限が付いていなければ、通常のインベントリファイルとして読み込み、実行権限が付いていれば実行した結果帰ってくるjsonを読み込むという処理をしているようです。

これで何が嬉しいのか

構築済みのシステム等では既にmuninやnagios,zabbix等の監視ソフトなどでサーバーの一覧やグループ化をされていると思います。
ansibleからはそちらのデータをマスターとして扱い、直接参照するような簡単なスクリプトを用意する方が効率的だと思われます。
また、inventoryスクリプトはmoduleと同じく言語は問わずjsonを標準出力で返せれば何でもOKなようなので、作成の閾は低いですね。

既に用意されているスクリプト

Dynamic Inventory用のスクリプトは既にいくつか用意されています。
https://github.com/ansible/ansible/tree/devel/plugins/inventory
EC2やvagrant、zabbixもすでにありましたね。

59
60
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
59
60