可以使用 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魔术变量的列表和内容