Вставьте переменную среды с помощью Jinja в SaltStack - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь прочитать файл 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 голосов
/ 10 декабря 2018
{% 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" %}
...