Java 如何在jsonnet文件中设置主机名?

Java 如何在jsonnet文件中设置主机名?,java,jsonnet,Java,Jsonnet,我正试图掌握jsonnet文件的诀窍。到目前为止,我所拥有的只是硬编码的值,但是如果我想要获取Java应用程序的主机名,该怎么办呢。例如,在Java中,我只需执行以下操作: String hostName=System.getenv(“主机名”); 但很明显,我不能在jsonnet文件中只包含一个键值对,如下面的JSON {name: "hostname", value:System.getenv("HOSTNAME")} 我需要一些帮助来理解我如何

我正试图掌握
jsonnet
文件的诀窍。到目前为止,我所拥有的只是硬编码的值,但是如果我想要获取Java应用程序的主机名,该怎么办呢。例如,在Java中,我只需执行以下操作:

String hostName=System.getenv(“主机名”);
但很明显,我不能在jsonnet文件中只包含一个键值对,如下面的JSON

{name: "hostname", value:System.getenv("HOSTNAME")} 
我需要一些帮助来理解我如何做到这一点


我已经查阅了
std.extvar(x)
,但无论出于何种原因,我所看到的示例都不清楚。这个方法相关吗?否则,我不太确定。

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

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

std.extVar('HOSTNAME')
您还可以使用顶级参数机制来达到类似的效果(顶级参数作为函数参数传递给已计算脚本)

有关这些功能的更深入解释,请参见

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

  • 您可以轻松地在另一台机器上进行评估,即使是在完全不同的平台上,也可以得到完全相同的结果
  • 您永远不会被锁定在任何特定机器上的配置中–您始终可以在任何机器上传递任何参数(对于开发和调试非常有用)
  • 避免意外–评估不会有一天中断,因为本地配置的某些随机方面发生了更改,代码的某些深层部分恰好依赖于此–所有参数都已考虑在内