てくなべ

インフラ、ネットワーク、自動化などの技術的なことを書いていきます。

Ansibleのインベントリファイルの拡張子に .ini を使わない方がいい理由

オライリーの「初めてのAnsible」の訳注で初めて知ったのですが、 ansible.cfghostfile パラメータや、ansible-playbook コマンドなどの -i オプションでディレクトリごと指定して、複数のインベントリファイルをマージして扱う場合、 拡張子が .ini の静的インベントリファイルは無視されてしまいます。

・公式ドキュメント内の記載 Using Inventory Directories and Multiple Inventory Sources

~, .orig, .bak, .ini, .cfg, .retry, .pyc, .pyo

実際に試してみます。 (Ansible 2.4.1で実験)

■ 拡張子なしの場合

インベントリファイル

[vagrant@centos7 vagrant]$ cat inventory/inv
172.16.0.3

1つだけエントリしています。inventory/ ディレクトリはこのファイルのみです。

ディレクトリ指定の ansible-playbook 実行

[vagrant@centos7 vagrant]$ ansible-playbook show_config_set.yml -i inventory/

PLAY [172.16.0.3] *******************************************************************************************************************

TASK [show config to file] **********************************************************************************************************
ok: [172.16.0.3]

PLAY RECAP **************************************************************************************************************************
172.16.0.3                 : ok=1    changed=0    unreachable=0    failed=0

無事実行されました。

■ 拡張子 .ini の場合

インベントリファイル

[vagrant@centos7 vagrant]$ cat inventory/inv.ini
172.16.0.3

内容は先ほどと同じです。inventory/ ディレクトリはこのファイルのみです。

ディレクトリ指定の ansible-playbook 実行

[vagrant@centos7 vagrant]$ ansible-playbook show_config_set.yml -i inventory/
 [WARNING]: Unable to parse /vagrant/inventory as an inventory source

 [WARNING]: No inventory was parsed, only implicit localhost is available

 [WARNING]: Could not match supplied host pattern, ignoring: all

 [WARNING]: provided hosts list is empty, only localhost is available

 [WARNING]: Could not match supplied host pattern, ignoring: 172.16.0.3


PLAY [172.16.0.3] *******************************************************************************************************************
skipping: no hosts matched

PLAY RECAP **************************************************************************************************************************

ホストが見つかりませんでした。

■ まとめ

-i inventory/hosts.ini のようにファイルを指定する分には特題はありませんが、ディレクトリ指定したときにうっかりこの挙動を忘れてしまいそうなので、習慣としては静的インベントリファイルに拡張子 .ini を使わない方がよいかもしれません。