【问题标题】:Can jsonnet use shell?jsonnet可以用shell吗?
【发布时间】: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 ksonnet


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        相关资源
        最近更新 更多