gpt4 book ai didi

ansible - 作为 YAML 树的变量。如何保存缩进?

转载 作者:行者123 更新时间:2023-12-02 12:54:31 27 4
gpt4 key购买 nike

我有带有模板的 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 解析器获取最后一个节点。下一步,其他角色使用了不正确的文件,而该角色无法正确处理该文件。

最佳答案

使用indent filter在 Jinja2 中,设置适当的缩进(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

关于ansible - 作为 YAML 树的变量。如何保存缩进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51084328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com