有没有办法像其他文件中的 hosts.yml 一样访问具有多个键的变量?
Is there a way in ansible to access variables with multiple keys like in hosts.yml in other file?
在hosts.yml中我们可以这样声明变量:
group1_hosts:
hosts:
host1:
host2:
var1: var1val1
var2: var2val2
然后我们可以在两台主机上使用此变量 - 多个键可以具有相同的值。
是否可以用类似的方式在 group_vars/all.yml
中声明变量:
variables:
host1:
host2:
var1: var1val1
host3:
host4:
var1: var1val2
然后访问它们 - {{ variables[inventory_hostname].var1 }}
如果这个想法不清楚 - 我想避免在许多文件中为每个环境主机设置两个变量。相反,我想在 group_vars
中声明它,这样如果某些主机具有相同的配置,我就不必编辑多个文件。
而且我认为可以这样写:
variables:
host1:
var1: var1val1
host2:
var1: var1val1
host3:
var1: var1val2
host4:
var1: var1val2
但这也不是一个方便的解决方案。
ansible中有没有办法以这种方式存储变量?
问:"避免在许多文件中为每个环境主机设置两个变量。相反,我想在 group_vars 中声明它,这样如果一些主机具有相同的配置我不必编辑多个文件。"
A:例如,给定库存
shell> cat hosts
[group1_hosts]
host1
host2
将变量放入group_vars/group1_hosts.yml
shell> cat group_vars/group1_hosts.yml
var1: var1val1
var2: var2val2
然后是剧本
- hosts: group1_hosts
tasks:
- debug:
var: var1
给予
ok: [host1] =>
var1: var1val1
ok: [host2] =>
var1: var1val1
请参阅 Variable precedence: Where should I put a variable? 如何覆盖 group_vars。
在hosts.yml中我们可以这样声明变量:
group1_hosts:
hosts:
host1:
host2:
var1: var1val1
var2: var2val2
然后我们可以在两台主机上使用此变量 - 多个键可以具有相同的值。
是否可以用类似的方式在 group_vars/all.yml
中声明变量:
variables:
host1:
host2:
var1: var1val1
host3:
host4:
var1: var1val2
然后访问它们 - {{ variables[inventory_hostname].var1 }}
如果这个想法不清楚 - 我想避免在许多文件中为每个环境主机设置两个变量。相反,我想在 group_vars
中声明它,这样如果某些主机具有相同的配置,我就不必编辑多个文件。
而且我认为可以这样写:
variables:
host1:
var1: var1val1
host2:
var1: var1val1
host3:
var1: var1val2
host4:
var1: var1val2
但这也不是一个方便的解决方案。
ansible中有没有办法以这种方式存储变量?
问:"避免在许多文件中为每个环境主机设置两个变量。相反,我想在 group_vars 中声明它,这样如果一些主机具有相同的配置我不必编辑多个文件。"
A:例如,给定库存
shell> cat hosts
[group1_hosts]
host1
host2
将变量放入group_vars/group1_hosts.yml
shell> cat group_vars/group1_hosts.yml
var1: var1val1
var2: var2val2
然后是剧本
- hosts: group1_hosts
tasks:
- debug:
var: var1
给予
ok: [host1] =>
var1: var1val1
ok: [host2] =>
var1: var1val1
请参阅 Variable precedence: Where should I put a variable? 如何覆盖 group_vars。