首页 > 解决方案 > 渲染一个没有注释的 ansible 模板化 json 文件

问题描述

我有一个模板化的 json 文件foo.json.j2,其中包含大量文档(“带注释的 json”)。在服务器上,该文件不得包含注释。

有没有一种方法(或模块)可以用来渲染没有注释的模板?

我显然可以通过一个简单的脚本或 minifer 手动执行此操作,但它需要是幂等的,所以我认为它需要是一个以 ansible 为中心的解决方案。

更新:
示例:

// comment
{
  "foo": "bar",   // comment
  "baz": 10
}

标签: ansibleansible-template

解决方案


正如@rolf82 评论中所报道的,json 没有评论语法,所以如果没有具体的例子,很难想象你在说什么。

同时,jinja2 支持模板中的注释,这些注释不会在最终输出中呈现。以下test.json.j2模板:

{#- This is a jinja2 templated json file with comments -#}
{
    "test":"{{ var1 }}",
    
    {#- Here we start a dict #}
    
    "testDict":
        {
            "element1":"{{ var2 }}",
            "element2":"{{ var3 }}"
        }
    
    {#- End of dict #}

}

以下剧本使用

---
- hosts: localhost
  gather_facts: false

  vars:
    var1: 1
    var2: 2
    var3: 3

  tasks:
    - template:
        src: test.json.j2
        dest: /tmp/tmp.json

    - vars:
        content: "{{ lookup('file', '/tmp/tmp.json') | string }}"
      debug:
        msg: "{{ content | from_json }}"

将给出以下结果:

$ ansible-playbook play.yml 

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [template] ***************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "test": "1",
        "testDict": {
            "element1": "2",
            "element2": "3"
        }
    }
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

并导致将以下文件写入磁盘:

$ cat /tmp/tmp.json

{
    "test":"1",    
    "testDict":
        {
            "element1":"2",
            "element2":"3"
        }
}

推荐阅读