***本記事にはプロモーションが含まれています。***
インベントリファイルはhostsという名前になっていることが多いです。
Ansibleを使い始めた時、Linuxの/etc/hostsファイルと一緒なのかと思っていました。
よく紹介されている例でも、IPアドレスが直書きされています。
それでも動くのですが、調べていくうち/etc/hostsファイルとは違うことがわかってきました。
インベントリファイルは、ホストの名前とその設定を書く場所です。
よくある例では、
[default] 192.168.33.10
と書かれています。これは、defaultグループに192,168.33.10でアクセスできるホストがあるという設定です。
でも、次のような書き方もあります。
host01 ansible_host=192.168.33.10 [webservers] host02 ansible_host=192.168.33.20
このインベントリファイルの意味は、host01はグループに属していません。IPアドレスは、192.168.33.10です。webserversというグループにhost02という名前のマシンがあって、そのIPアドレスが192.168.33.20という意味です。
どうもインベントリファイルは、/etc/hostsファイルとは違って名前を設定するファイルのようです。
Ansibleのtutorialを見てみると、Getting Startedでは、
192.0.2.50 aserver.example.org bserver.example.org
このように直書きしたものもありますが、Inventoryの説明では、
mail.example.com [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com
このようにすべて、名前で設定されています。
また、IPアドレスだけでなくいろいろな設定を書くことができます。
ansible_connectionで接続方法が設定できたり、ansible_userで接続時のユーザー名を設定できたりします。
foo.example.com ansible_host=192.168.33.10 ansible_connection=local ansible_user=foo
:varsという拡張子をつけることでグループを一括して設定を書くことができます。
[webservers] foo.example.com bar.examble.com [webservers:vars] ansible_connection=local ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
AnsibleのインベントリファイルはLinuxのhostsファイルとは違うという話でした。