作为 YAML 树的变量.如何保存缩进?



我有yml模板文件。模板是从 yml 树的中间开始的键的一部分。

模板工作是可以的,但缩进只保存最后一个键。如何保存所有键的缩进?

base.yml

app:
config1:
base: {{ service1.company.backend | to_nice_yaml(indent=2) }}
config2:
node: {{ service1.company.addr | to_nice_yaml(indent=2) }}

config.yml

service1:
company:
backend:
node1: "xxx"
node2: "yyy"
node3: "zzz"
addr:
street: ""

我需要得到:

app:
config1:
base:
node1: "xxx"
node2: "yyy"
node3: "zzz"
config2:
node:
street: ""

但真正的结果是:

app:
config1:
base:
node3: "zzz"
node1: "xxx"
node2: "yyy"
config2:
node:
street: ""

node1node2不保存缩进,Jinja2 解析器获取最后一个节点。在下一步中,不正确的文件用于无法正确处理它的其他角色。

在 Jinja2 中使用带有适当缩进集indent过滤器(也to_nice_yaml生成尾随换行符,因此trim是必需的(:

app:
config1:
base:
{{ service1.company.backend | to_nice_yaml(indent=2) | trim | indent(6) }}
config2:
node:
{{ service1.company.addr | to_nice_yaml(indent=2) | trim | indent(6) }}

或者创建一个帮助变量并依靠 Ansibleto_nice_yaml筛选整个值。例如:

...
vars:
helper_var:
app:
config1:
base: "{{ service1.company.backend }}"
config2:
node: "{{ service1.company.addr }}"
...
tasks:
- copy:
content: "{{ helper_var | to_nice_yaml(indent=2) }}"
dest: my_file

相关内容

  • 没有找到相关文章

最新更新