我正在尝试读取文件夹内的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'] }}
有人可以帮我吗? 谢谢。
答案 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" %}