作为 YAML 树的变量。如何保存缩进?
Variable as a YAML tree. How to save indent?
我有 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: ""
node1
和 node2
不保存缩进,Jinja2 解析器获取最后一个节点。在下一步中,其他角色使用了不正确的文件,无法正确处理它。
在 Jinja2 中使用 indent
filter 并设置适当的缩进(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) }}
或者创建一个辅助变量并依赖 Ansible to_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
我有 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: ""
node1
和 node2
不保存缩进,Jinja2 解析器获取最后一个节点。在下一步中,其他角色使用了不正确的文件,无法正确处理它。
在 Jinja2 中使用 indent
filter 并设置适当的缩进(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) }}
或者创建一个辅助变量并依赖 Ansible to_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