saltstack,插入到模板中的多行支柱项目
saltstack, multi-line pillar items interpolated into template
我有一个像这样的柱子:
inline_blocks:
the_seven: |
dog cat horse cow
ardvaark beatle snail
然后我想将其插入到文件中
{% set inline_block = pillar['inline_blocks'].get(val, '') %}
/etc/animals.conf:
file.managed:
- source: salt://farm/animals.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
extras: {{ inline_block }}
然后在 animals.conf
,
{{ extras }}
我希望如果键 val
在 inline_blocks
中,那么它的值将被插入。如果不是,一个空字符串将被插入。
确实,如果我明确地编写默认语句,就会发生这种情况:
- defaults:
extras: |
dog cat horse cow
ardvaark beatle snail
但是如上所述,我收到错误 could not find expected ':'
。
作为现实检查,pillar.items
愉快地检索了支柱条目,因此 (1) 可以检索支柱条目,并且 (2) 可以对值进行插值,但是 (X) 多行.sls 文件中的值导致问题。
任何指示正确的语法是什么?
发生的事情是
- defaults:
extras: {{ inline_block }}
加工成
- defaults:
extras: dog cat horse cow
ardvaark beatle snail
因此 YAML 尝试将第二行解析为另一个顶级键。但是,标记此密钥结尾的 :
永远不会出现,因此会出现错误。
要修复它,请执行以下操作:
- defaults:
extras: |
{{ inline_block | indent(10) }}
indent
不缩进第一行,但会在随后的每一行中添加 10 个空格。
此问题也在 bug 中讨论过,但针对的是 content
参数。它似乎也适用于作为 defaults
或 context
传递的多行 YAML 块。
由于您使用 Jinja 模板文件作为源,我们可以轻松地从模板本身获取支柱数据(正如上面 link 中的评论之一所建议的)。
将支柱视为:
inline_blocks:
val: |
dog cat horse cow
ardvaark beatle snail
那么 animals.conf.j2
模板为:
{{ salt.pillar.get('inline_blocks:val', default="foo") }}
注意:如果保证这个pillar data一直被定义,我们甚至可以在模板中使用pillar['inline_blocks']['val']
。
渲染状态如下:
create-animals-conf:
file.managed:
- name: /tmp/animals.conf
- source: salt://animals.conf.j2
- mode: 0664
- template: jinja
应按预期生成模板:
$ cat /tmp/animals.conf
dog cat horse cow
ardvaark beatle snail
我有一个像这样的柱子:
inline_blocks:
the_seven: |
dog cat horse cow
ardvaark beatle snail
然后我想将其插入到文件中
{% set inline_block = pillar['inline_blocks'].get(val, '') %}
/etc/animals.conf:
file.managed:
- source: salt://farm/animals.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
extras: {{ inline_block }}
然后在 animals.conf
,
{{ extras }}
我希望如果键 val
在 inline_blocks
中,那么它的值将被插入。如果不是,一个空字符串将被插入。
确实,如果我明确地编写默认语句,就会发生这种情况:
- defaults:
extras: |
dog cat horse cow
ardvaark beatle snail
但是如上所述,我收到错误 could not find expected ':'
。
作为现实检查,pillar.items
愉快地检索了支柱条目,因此 (1) 可以检索支柱条目,并且 (2) 可以对值进行插值,但是 (X) 多行.sls 文件中的值导致问题。
任何指示正确的语法是什么?
发生的事情是
- defaults:
extras: {{ inline_block }}
加工成
- defaults:
extras: dog cat horse cow
ardvaark beatle snail
因此 YAML 尝试将第二行解析为另一个顶级键。但是,标记此密钥结尾的 :
永远不会出现,因此会出现错误。
要修复它,请执行以下操作:
- defaults:
extras: |
{{ inline_block | indent(10) }}
indent
不缩进第一行,但会在随后的每一行中添加 10 个空格。
此问题也在 bug 中讨论过,但针对的是 content
参数。它似乎也适用于作为 defaults
或 context
传递的多行 YAML 块。
由于您使用 Jinja 模板文件作为源,我们可以轻松地从模板本身获取支柱数据(正如上面 link 中的评论之一所建议的)。
将支柱视为:
inline_blocks:
val: |
dog cat horse cow
ardvaark beatle snail
那么 animals.conf.j2
模板为:
{{ salt.pillar.get('inline_blocks:val', default="foo") }}
注意:如果保证这个pillar data一直被定义,我们甚至可以在模板中使用pillar['inline_blocks']['val']
。
渲染状态如下:
create-animals-conf:
file.managed:
- name: /tmp/animals.conf
- source: salt://animals.conf.j2
- mode: 0664
- template: jinja
应按预期生成模板:
$ cat /tmp/animals.conf
dog cat horse cow
ardvaark beatle snail