【发布时间】:2018-05-27 11:46:59
【问题描述】:
我想在 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 中编写如下代码。 jsonnet能支持吗?
local region = `curl http://100.100.100.200/latest/metadata/region_id`
region 变量应该是执行curl http://100.100.100.200/latest/metadata/region_id 的输出。
【问题讨论】:
使用curl 获取您的数据,将其通过管道传输到文件中,调用jsonnet,然后调用local region = importstr “path/to/fetched/data”。
【讨论】:
无法从 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。
【讨论】: