我们知道inventory主要用来管理managed nodes(host),定义playbook要在哪些远程机器上执行。如果不熟悉inventory的角色的,可以参考ansible playbook基本概念。
在具体讲解如何构建inventory文件之前,我们必须知道在ansible的配置文件中,有一个参数inventory用于指定默认的inventory文件的路径。如果我们执行ansible-playbook或者ansible命令时没有指定inventory,则会从默认的inventory路径下查找hosts。具体可通过下面命令查看我们默认inventory有哪些hosts
通过上面图片,我们可以知道当前机器没有配置任何managed nodes(hosts)。所以如果我们在执行ansible-playbook时不指定inventory文件的话就不会在任何远程机器执行。
Inventory组(group)
默认组(group)
ansible inventory定义了两个默认组(group), 一个是all,另一个是ungrouped. all会存在于所有host下面,也就是我们inventory定义的所有host都属于all这个group,而ungrouped组只会当host没有定义自己的group时才会属于他。下面我们通过一个例子来加深理解。
下面这个文件是官网提供的一个例子,这是一个简单的inventory文件,其中定义了7个hosts。所有这7个hosts都属于all group,另外自定义了2个group webservers 和 dbservers,其中foo.example.com和bar.example.com属于webservers group,由于这两个hosts已经属于了除all group之外的另一个group webservers,所以折两个host不属于ungrouped group. 另外3个hosts属于dbservers group,同样他们也不属于ungrouped group. 另外一个host mail.example.com由于他只属于all group,属于他同时也属于ungrouped group。
那是不是每个hosts都只能属于2个group呢?答案是否定的。每个hosts至少属于2个groups,但是可以更多。