オライリーの「初めてのAnsible」の訳注で初めて知ったのですが、 ansible.cfg
の hostfile
パラメータや、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
を使わない方がよいかもしれません。