【问题标题】:How to set a hostname in a jsonnet file?如何在 jsonnet 文件中设置主机名?
【发布时间】:2020-06-24 21:27:32
【问题描述】:

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

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

但显然我不能在 jsonnet 文件中只包含如下 JSON 的键值对。

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

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

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

【问题讨论】:

    标签: java jsonnet


    【解决方案1】:

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

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

    foo.jsonnet:

    std.extVar('HOSTNAME')
    

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2011-08-11
      • 1970-01-01
      • 2020-10-12
      相关资源
      最近更新 更多