在单个 jinja 代码块中设置多个变量

问题描述 投票:0回答:1

这是来自 SLS(盐堆栈)文件的示例代码,使用 Jinja:

{% set here = 'some-value' -%}
{%- set user = 'my_user' -%}
{%- set group = 'my_group' -%}

{%- set all_users = salt['user.list_users']() -%}
{%- if user in all_users -%}
{%- set usr_home = salt['user.info'](user).home -%}
{%- set prefix = 'some_prefix' ~ '_' ~ user %}

# This is just an example state
{{ prefix }}-dotvnc:
  file.directory:
    - name: {{ usr_home }}/.vnc
    - user: {{ user }}
    - group: {{ group }}
    - mode: '0700'

{% endif -%}

这看起来很丑,我想做这样的事情:

{% 
set here = 'some-value'
set user = 'my_user'
set group = 'my_group'

set all_users = salt['user.list_users']()
if user in all_users
  set usr_home = salt['user.info'](user).home
  set prefix = 'some_prefix' ~ '_' ~ user
%}

# This is just an example state
{{ prefix }}-dotvnc:
  file.directory:
    - name: {{ usr_home }}/.vnc
    - user: {{ user }}
    - group: {{ group }}
    - mode: '0700'

{% endif -%}

无法避免多个变量和命令,此示例显示了一个使用 jinja 的“用户的家”的模板,但渲染模板时用户可能不存在,因此其主目录可能不存在。

虽然第一个版本可以工作,但它非常丑陋,并且难以阅读。

有没有办法让这个不那么神秘?

不是盐中Jinja模板中的代码块的重复,因为在这种情况下不能使用字典查找。 (例如,代码是任意的。)

jinja2 salt-stack
1个回答
0
投票

不,您提供的第一个示例代码正是 Jinja 的工作方式。

© www.soinside.com 2019 - 2024. All rights reserved.