Может ли jsonnet использовать оболочку?

Я хотел бы написать код, как показано ниже, в 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.


person che yang    schedule 27.05.2018    source источник


Ответы (2)


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

person Indiana Kernick    schedule 27.05.2018

Невозможно вызвать внешние команды из 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.

person sbarzowski    schedule 28.05.2018