Может ли jsonnet использовать shell?

Я хотел бы написать код, как показано ниже в jsonnet. Может ли jsonnet это поддержать?

local region = `curl http://100.100.100.200/latest/metadata/region_id`

region переменная должна быть выходом выполнения curl http://100.100.100.200/latest/metadata/region_id,

2 ответа

Получите ваши данные с curl, передать его в файл, вызвать jsonnet, затем local region = importstr “path/to/fetched/data”,

Невозможно вызывать внешние команды из Jsonnet. Это сделано специально (см. Герметичность https://jsonnet.org/articles/design.html).

Необходимо явно передавать данные в Jsonnet. Для этого есть три механизма:

1) import / importstr который является лучшим для статических вещей, которые живут вместе с кодом. Но вы можете использовать их другими способами (см. Ответ Kerndog73).

2) Внешние переменные - глобальные параметры, которые доступны во всей программе, например:

jsonnet --ext-str from_curl="$(curl 'https://example.com')" -e 'std.extVar("from_curl")'

3) Аргументы верхнего уровня - если ваша программа jsonnet оценивает функцию, вы можете передать ей аргументы:

`jsonnet --tla-str from_curl="$(curl 'https://jsonplaceholder.typicode.com/posts/1')" -e 'function(from_curl) from_curl'`

Если вы используете ksonnet, он может отличаться, потому что ksonnet имеет свои собственные механизмы для передачи данных в jsonnet AFAIK.

Другие вопросы по тегам