我想在 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
。
无法从 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。