jsonnet可以使用shell吗?

时间:2018-05-27 11:47:00

标签: jsonnet ksonnet

我想在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 个答案:

答案 0 :(得分:0)

使用curl获取您的数据,将其传输到文件中,调用jsonnet,然后local region = importstr “path/to/fetched/data”

答案 1 :(得分:0)

无法从Jsonnet中调用外部命令。这是设计的(见Hermeticity 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'`

如果您使用kso​​nnet,它可能会有所不同,因为ksonnet有自己的机制将数据传递给jsonnet AFAIK。