Может ли 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.