Ansible:我们可以为 host_vars 个文件设置自定义名称吗

Ansible: Can we have custom names for host_vars files

什么有效

我的 ansible 库存整理如下:

../project1
  |- group_vars
  |- host_vars
    |- 10.20.30.1.yml
       {{content like remote-endpoint="x.x.x.x", ... a very big var map... ,}}
    |- 10.20.30.2.yml
       {{content like remote-endpoint="y.y.y.y", ... a very big var map... ,}}
  inventory

我的库存文件内容如下:

10.20.30.1  hvar="host1"
10.20.30.2  hvar="host2"

以上按预期工作,我能够访问特定主机的所有主机级变量。

我想做什么?

我想让 host_vars/*files* 的名称基于标签(可能),例如 - host1、host2 等 而不是"inventory_hostsname" ansible 变量的值。这将使我能够给出一些特定于功能的名称,如 master、slave 等 同样在后一种情况下,即使主机发生变化,文件的名称也可以保持不变。

Ansible 提供了随意命名的选项。实际上,这也是首选方式。您可以像这样在 ansible hosts(不是 /etc/hosts)文件中定义所有主机。

allgrouphost1
allrouphost2

[master]
host1

[slave]
host2
host3
host4

然后您可以在host_vars/host1.ymlhost_vars/host2.yml等中定义变量。

您可以在 hosts 文件或使用 ansible_host 变量的特定主机 vars 文件中定义主机 IP 地址。

hosts个文件

host1 ansible_host=192.0.2.98 ansible_user=deploy

host_vars/host1.yml 文件

ansible_host: 192.0.2.98
ansible_user: deploy

括号中的标题是组名([master][slave]),用于对主机进行分类,并决定您在什么时候以及出于什么目的控制哪些主机。

您可以 运行 按组名编写剧本,这样,这些剧本仅在属于该组的那些主机上执行。您还可以在 group_vars 文件中定义公共变量。

有关详细信息和用例,请参阅 documentation