无需运行Ansible,如何通过命令行展开Jinja2模板生成标准YAML?
问题描述
我有一个包含Jinja2语法的YAML模板文件:
foo: - "A" - "B" bar: inner2: "{{ foo }}" baz: bla: inner1: "{{bar.inner2 | sort | join | lower}}"
希望将其展开为标准YAML格式:
foo: - "A" - "B" bar: inner2: - "A" - "B" baz: bla: inner1: "ab"
请问有没有不需要运行Ansible的命令行工具,能实现类似 expand-jinja ansible/roles/X/default/main.yml > out.yml 的功能来完成这个转换?
可行方案
有,用jinja2-cli这个工具就能搞定,它是专门用来渲染Jinja2模板的命令行工具,完全不需要依赖Ansible。
安装方法
直接用pip安装即可:
pip install jinja2-cli
使用步骤
- 先把模板里的变量部分提取成单独的YAML变量文件,比如命名为
vars.yml,内容如下:
foo: - "A" - "B"
- 把原模板中的变量定义移除,剩下的模板内容保存为
template.j2:
bar: inner2: "{{ foo }}" baz: bla: inner1: "{{bar.inner2 | sort | join | lower}}"
- 执行以下命令完成渲染:
jinja2 template.j2 vars.yml > out.yml
生成的out.yml就是你想要的标准YAML格式。
如果不想拆分文件,也可以通过--format yaml参数直接从原文件读取变量(需要调整原模板结构,将变量与模板逻辑分离),或者用-D参数逐个传递变量,但拆分文件的方式逻辑更清晰,也更易维护。
内容的提问来源于stack exchange,提问作者Kokizzu
相关产品推荐
相关产品推荐

