1

我正在尝试掌握jsonnet文件的窍门。到目前为止,我所拥有的只是硬编码值,但如果我想获取 Java 应用程序的主机名怎么办。例如,在 Java 中,我会这样做:

String hostName = System.getenv("HOSTNAME");

但显然我不能只在 jsonnet 文件中有一个像下面的 JSON 这样的键值对。

{name: "hostname", value:System.getenv("HOSTNAME")} 

我需要一些帮助来了解如何做到这一点。

我已经查过了,std.extvar(x)但无论出于何种原因,我所看到的例子对我来说都不是很清楚。这种方法是否相关?否则,我不确定。

4

1 回答 1

2

Jsonnet 要求显式传递所有参数。要在 Jsonnet 代码中使用主机名,您需要将其传递给解释器。例如,您可以按如下方式运行它:

❯ jsonnet --ext-str "HOSTNAME=$HOST" foo.jsonnet

foo.jsonnet:

std.extVar('HOSTNAME')

您还可以使用顶级参数机制达到类似的效果(顶级参数作为函数参数传递给评估脚本。

请参阅:https ://jsonnet.org/learning/tutorial.html#parameterize-entire-config以更深入地了解这些功能。

仅供参考,不能直接获取任何环境变量或直接访问系统是设计使然。Jsonnet 评估的结果仅取决于代码和显式传递的参数。这有很多好处,例如:

  • 即使在完全不同的平台上,您也可以轻松地在另一台机器上进行评估,并获得完全相同的结果。
  • 你永远不会被锁定在任何特定机器上的配置——你总是可以在任何机器上传递任何参数(对于开发和调试非常有用)。
  • 避免意外——评估不会中断,因为本地配置的某些随机方面发生了变化,并且代码的某些深层部分恰好依赖于它——所有参数都被考虑在内。
于 2020-06-25T18:25:44.063 回答