在 Ansible 中为所有主机定义默认变量的正确方法

Proper way to define default variables for all hosts in Ansible

在我的ansible inventory文件中有[all:vars]的定义如下:

[all:vars]
ansible_shell_type=bash
ansible_user=certain_user
ansible_ssh_common_args="-o ConnectionAttempts=10"

我计划将这些变量移动到 ansible.cfg 中以设置所有主机的默认值。它会以类似的方式简单地工作还是有任何情况需要考虑? 还有哪些替代方法可用于从清单文件中删除 [all:vars]

考虑将变量移至 /group_vars/all 以支持的方式实现相同的目的。

ansible.cfg是配置文件,不是库存,不能放变量。

[all:vars] 是在清单文件中为组(在本例中为特殊组 all)定义组变量的语法。

如果您想从主清单文件中分离出变量定义(顺便说一句,这是首选做法!),您可能需要阅读本章:Splitting Out Host and Group Specific Data.

摘录:

In addition to storing variables directly in the inventory file, host and group variables can be stored in individual files relative to the inventory file

Assuming the inventory file path is:

/etc/ansible/hosts

If the host is named ‘foosball’, and in groups ‘raleigh’ and ‘webservers’, variables in YAML files at the following locations will be made available to the host:

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball

当然你可以在ansible.cfg中定义这些值,只是名称不同,所以事先参考the manual

配置文件中设置的值将应用于所有主机,除非被特定设置覆盖。