有没有办法像其他文件中的 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