在 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:
ansible_shell_type
可以在ansible.cfg
中定义为executable
ansible_user
作为 remote_user
ansible_ssh_common_args
作为 ssh_args
配置文件中设置的值将应用于所有主机,除非被特定设置覆盖。
在我的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:
ansible_shell_type
可以在ansible.cfg
中定义为ansible_user
作为remote_user
ansible_ssh_common_args
作为ssh_args
executable
配置文件中设置的值将应用于所有主机,除非被特定设置覆盖。