如何在ansible中使用变量的值作为yaml键?

时间:2017-12-14 13:38:10

标签: ansible ansible-inventory

根据广告资源的不同,我想在我的剧本中用变量的名称替换YAML键:

config:
  {{ db_name }}:
    other_config

稍后,我在模板中使用它,通过to_nice_json将其转换为JSON。但是,在JSON中,我看到{{ db_name }}而不是变量名。是否有任何解决方法在密钥上下文中使用变量值?

3 个答案:

答案 0 :(得分:0)

如果您希望在模板中更改它,可以尝试使用replace而不是变量作为键。 例如,在模板中为使用regex(CHANGETHISVAR)的搜索设置名称并使用模块:

- replace:
    path: /path/to/your/file
    regexp: '(CHANGETHISVAR)'
    replace: 'db_name'

运行模板任务后添加此例程。

答案 1 :(得分:0)

  

但是,在JSON中,我看到{{ db_name }}而不是变量名

所以你做错了“JSON ”中的

示例:

---
- hosts: localhost
  gather_facts: no
  connection: local
  vars:
    db_name: DB1
    config: "{'{{ db_name }}':'value'}"
  tasks:
    - debug:
        var: config

结果:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "config": {
        "DB1": "value"
    }
}

答案 2 :(得分:0)

根据我对此处所述要求的理解,以下可能是生成动态JSON配置的可行方法:

  • 在YAML模板文件中有配置。
  • 根据主机名等生成YAML配置。
  • 使用include_vars从生成的YAML文件加载变量,并使用to_json过滤器或类似方法将其转换为JSON。