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

How to set a hostname in a jsonnet file?

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

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

但显然我不能在 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')

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

请参阅:https://jsonnet.org/learning/tutorial.html#parameterize-entire-config 以获得对这些功能的更深入的解释。

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

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