可以使用 Ansible 来根据每台服务器的不同变量文件进行区分

最近,我在搭建新的服务器时使用了Ansible,但是我想知道如何让每个服务器加载vars文件。

如果你感到困惑,我阅读了@tanuki_mujina様的这篇文章。非常感谢你提供的清晰易懂的文章! 使用Ansible对每个服务器进行独特的处理。

然而,因为我想要构建一个没有名字解析的全新服务器,所以我考虑能否只通过IP地址进行操作。最终,在参考上述文章后,我找到了这种方法。
※我觉得可能还有更好的方法…如果您能教我,我会非常高兴。

库存文件

首先,请按以下格式编写库存文件。

[TestServer1]
192.168.0.5

[TestServer1:vars]
ansible_ssh_user=Ansible
ansible_ssh_pass=******
ansible_sudo_pass=******
ansible_ssh_port=22

[TestServer2]
192.168.0.6

[TestServer2:vars]
ansible_ssh_user=Ansible
ansible_ssh_pass=******
ansible_sudo_pass=******
ansible_ssh_port=22

创建变量文件

创建一个名为”远程目标IP地址.yml”的vars文件夹。

test: testno1
test: testno2

创建Playbook。

以下是描述Playbook的方式。
在前面的文章中,我们使用ansible_hostname来动态生成要加载的vars文件,但是这次我们想使用IP地址,所以我们要使用inventory_hostname。
inventory_hostname会被设置为在清单文件中写入的主机名。

- hosts: all
  vars_files:
    - vars/{{ inventory_hostname }}.yml
  tasks:
    - debug: msg="TestServer={{test}}"

执行Playbook

实际结果如下所示。

$ ansible-playbook -i hosts site.yml

PLAY [all] ****************************************************************************************

TASK [Gathering Facts] ****************************************************************************
ok: [192.168.0.6]
ok: [192.168.0.5]

TASK [debug] **************************************************************************************
ok: [192.168.0.5] => {
    "msg": "TestServer=testno1"
}
ok: [192.168.0.6] => {
    "msg": "TestServer=Testno2"
}

PLAY RECAP ****************************************************************************************
192.168.0.5                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.0.6                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

可以看出每个服务器都正确加载了唯一的变量。

其他参考

・使用变量
・Ansible魔术变量的列表和内容

bannerAds