我有两个 YAML 变量文件,它们被许多剧本重用:
# playbook/group_vars/all
settings:
a: 1
b: 2
# inventory/group_vars/main.yml
settings:
c: 3
Run Code Online (Sandbox Code Playgroud)
我希望在我的剧本中settings保持平等{ a: 1, b: 2, c: 3 }。
相反,它等于{ c: 3 },因为inventory/group_vars/*具有比playbook/group_vars/all和 更高的优先级,因为哈希值被覆盖,而不是合并。
使用命名约定和前缀单独定义变量,而不是使用哈希,如下所示:
# playbook/group_vars/all
settings_a: 1
settings_b: 2
# inventory/group_vars/main.yml
settings_c: 3
Run Code Online (Sandbox Code Playgroud)我们的团队认为这个解决方案不够优雅。
{{ list_common + list_specific }}
这需要对许多剧本进行更改(我们确实有很多),而且看起来也很糟糕。
--
是否有其他选项可以合并来自不同文件的哈希值,而不是重新定义(覆盖)它们?
我们试图实现的是停止跨变量文件重复列表并仅定义特定于组/主机的那些参数。