首页 文章

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

提问于
浏览
1

我正在尝试读取文件夹中的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 回答

  • 1
    {% 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" %}
    

相关问题