ansible - 渲染一个没有注释的 ansible 模板化 json 文件
问题描述
我有一个模板化的 json 文件foo.json.j2
,其中包含大量文档(“带注释的 json”)。在服务器上,该文件不得包含注释。
有没有一种方法(或模块)可以用来渲染没有注释的模板?
我显然可以通过一个简单的脚本或 minifer 手动执行此操作,但它需要是幂等的,所以我认为它需要是一个以 ansible 为中心的解决方案。
更新:
示例:
// comment
{
"foo": "bar", // comment
"baz": 10
}
解决方案
正如@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"
}
}
推荐阅读
- ios - 运行时致命错误
- vba - '编译错误:未定义用户定义类型'
- python-3.6 - 当 func1 和 func2 很可能是同一个 Python 时,在 func2 中出现错误
- mysql - 来自同一个表的子查询
- python-3.x - 扭曲升级 - 现在无法访问站点路径
- node.js - Node.js 回调不是函数
- google-sheets - 如果第一个 AVERAGEIFS 公式不起作用(Google 表格),如何让第二个 AVERAGEIFS 公式接管?(使用 IFERROR 或 SUMPRODUCT??)
- ios - 在 xCode 9.4 和 iOS 11 中每次调用 ViewDidLoad() 方法
- python - 将结果分配给虚拟变量 _
- javascript - Node.js:具有 Promises 和异步函数管理器的线程工作者