小编Jas*_*omb的帖子

如何在ansible中跨不同变量文件合并hash类型的变量?

我有两个 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)

我们的团队认为这个解决方案不够优雅。

  • 使用 set_fact 和/或 Jinja 的“+”运算符

{{ list_common + list_specific }}

这需要对许多剧本进行更改(我们确实有很多),而且看起来也很糟糕。

--

是否有其他选项可以合并来自不同文件的哈希值,而不是重新定义(覆盖)它们?

我们试图实现的是停止跨变量文件重复列表并仅定义特定于组/主机的那些参数。

automation linux ansible yaml

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

ansible ×1

automation ×1

linux ×1

yaml ×1