我想在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
的输出。
答案 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'`
如果您使用ksonnet,它可能会有所不同,因为ksonnet有自己的机制将数据传递给jsonnet AFAIK。