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

时间:2017-09-13 13:09:03

标签: ansible ansible-inventory

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

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

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

ansible.cfg是一个配置文件,而不是库存,你不能把变量放在那里。

[all:vars]是一种语法,用于为库存文件中的组(本例中为特殊组all)定义组变量。

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

摘录:

  

除了将变量直接存储在库存文件中之外,主机和组变量还可以存储在相对于库存文件的单个文件中

     

假设库存文件路径为:

/etc/ansible/hosts
     

如果主机名为'foosball',并且在'raleigh'和'webservers'组中,则以下位置的YAML文件中的变量将可供主机使用:

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

答案 2 :(得分:2)

当然,您可以在ansible.cfg中定义这些值,它们只有不同的名称,因此请事先参考the manual

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