てくなべ (tekunabe)

ansible / network / automation

[Ansible] パターン表記したインベントリの確認は ansible-inventory コマンドが便利

はじめに

Ansible のインベントリファイルでは、効率よく定義するためにパターン表記ができます。

例えば、

web_[1:3]

web_1
web_2
web_3

と同じです。

この様にパターン表記を利用した場合、うまく解釈されるかどうか事前に確認したくなるのではないでしょうか。

ansible-inventory コマンドを利用すると確認できます。この記事では、簡単なサンプルをご紹介します。

  • 動作確認環境
    • Ansible 2.9.4

サンプル

インベントリの用意

いろいろなパターン表記を含めたインベントリファイルを用意します。

  • inventory.ini
[web]
web_[1:3]
web_[01:03]
10.0.0.[101:103]

[db]
db_[a:c]
db_[X:Z]

[general]
gen_[a:b][01:02]

ansible-inventory コマンドの実行

ansible-inventory コマンドの -i オプションでインベントリファイルを指定し、--list オプションでリスト表示を指定します。

$ ansible-inventory -i inventory.ini --list
{
    "_meta": {
        "hostvars": {}
    },
    "all": {
        "children": [
            "db",
            "general",
            "ungrouped",
            "web"
        ]
    },
    "db": {
        "hosts": [
            "db_X",
            "db_Y",
            "db_Z",
            "db_a",
            "db_b",
            "db_c"
        ]
    },
    "general": {
        "hosts": [
            "gen_a01",
            "gen_a02",
            "gen_b01",
            "gen_b02"
        ]
    },
    "web": {
        "hosts": [
            "10.0.0.101",
            "10.0.0.102",
            "10.0.0.103",
            "web_01",
            "web_02",
            "web_03",
            "web_1",
            "web_2",
            "web_3"
        ]
    }
}

色々なパターン表記が展開されたことが分かります。


さいごに

ansible-inventory コマンドは他にも、グループの親子関係を表示する --graph オプションがあったり、ダイナミックインベントリを指定する機能もあります。

Playbook を用意、実行する前に意図したインベントリかどうか確認するのにとても便利です。

参考