【问题标题】:Insert Environment Variable using Jinja in SaltStack在 SaltStack 中使用 Jinja 插入环境变量
【发布时间】:2018-12-10 12:15:22
【问题描述】:

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

有人可以帮我解决这个问题吗? 谢谢。

【问题讨论】:

    标签: jinja2 salt-stack


    【解决方案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" %}
    

    【讨论】:

    • 谢谢。我删除了 set 行并将 instance_id 替换为 grains['INSTANCE_ID'] 并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 2020-10-07
    • 2020-09-20
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多