在SaltStack中使用Jinja插入环境变量

时间:2018-12-10 12:15:22

标签: jinja2 salt-stack salt

我正在尝试读取文件夹内的JSON文件。使用import_json。 这是我的代码

{% set instance_id = grains['INSTANCE_ID'] %}
INSTANCE_ID Env Var:
  environ.setenv:
    - name: INSTANCE_ID
    - value: {{ grains['INSTANCE_ID'] }}
    - update_minion: True

{% import_json "/tmp/$INSTANCE_ID/conf.json" as config_properties %}

但是我收到此错误

Data failed to compile:
Rendering SLS 'base:cloud.steps.conf' failed: Jinja error: /tmp/$INSTANCE_ID/conf.json.

虽然当我手动插入INSTANCE_ID时,它可以按预期工作。

我想要的是能够插入$INSTANCE_ID或直接插入谷物值{{ grains['INSTANCE_ID'] }}

有人可以帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

{% import_json "/tmp/$INSTANCE_ID/conf.json" as config_properties %}

我想您正在尝试在上述语句中求值变量$INSTANCE_ID。 Jinja模板计算表达式语句中的变量。

在这种情况下,使用set

在第一行中设置变量
{% set instance_id = grains['INSTANCE_ID'] %}

因此,您可以在表达式中将其与字符串附加项一起使用,例如

{% import_json "/tmp/" + instance_id + "/conf.json" as config_properties %}

以上陈述可以解决您的错误。

此外,我建议使用变量来评估上面的字符串表达式的值,例如

{% set conf_json_path = "/tmp/" + instance_id + "/conf.json" %}

并像这样使用它

{% import_json conf_json_path as config_properties %}

希望获得帮助!


如果您希望直接使用grains字典,则可以使用类似的值

{% set conf_json_path = "/tmp/" + grains['INSTANCE_ID'] + "/conf.json" %}