渲染一个没有注释的 ansible 模板化 json 文件
Render an ansible templated json file without comments
我有一个模板化的 json 文件 foo.json.j2
,其中包含大量文档 ("json with comments")。在服务器上,该文件不得包含注释。
有没有一种方法(或模块)可以用来渲染没有评论的模板?
我显然可以通过一个简单的脚本或 minifer 手动完成此操作,但它需要是幂等的,所以我认为它需要一个以 ansible 为中心的解决方案。
更新:
示例:
// comment
{
"foo": "bar", // comment
"baz": 10
}
如@rolf82 评论所述,json has no syntax for comments 所以如果没有具体的例子,很难想象你在说什么。
同时,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"
}
}
我有一个模板化的 json 文件 foo.json.j2
,其中包含大量文档 ("json with comments")。在服务器上,该文件不得包含注释。
有没有一种方法(或模块)可以用来渲染没有评论的模板?
我显然可以通过一个简单的脚本或 minifer 手动完成此操作,但它需要是幂等的,所以我认为它需要一个以 ansible 为中心的解决方案。
更新:
示例:
// comment
{
"foo": "bar", // comment
"baz": 10
}
如@rolf82 评论所述,json has no syntax for comments 所以如果没有具体的例子,很难想象你在说什么。
同时,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"
}
}