Как установить имя хоста в файле jsonnet?

Я пытаюсь разобраться с jsonnet файлами. Пока все, что у меня есть, - это жестко запрограммированные значения, но что, если я хочу получить имя хоста для приложения Java. Например, на Java я бы просто сделал:

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

Но, очевидно, я не могу просто иметь пару ключ-значение, такую ​​как следующий JSON, в файле jsonnet.

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

Мне нужна небольшая помощь, чтобы понять, как я могу это сделать.

Я просмотрел std.extvar(x), но примеры, на которые я смотрю, просто не понятны мне по какой-то причине. Актуален ли этот метод? В противном случае я не совсем уверен.


person Cameron    schedule 24.06.2020    source источник


Ответы (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 зависит только от кода и явно переданных параметров. Это дает много преимуществ, например:

  • Вы можете легко провести оценку на другой машине, даже на совершенно другой платформе, и получить точно такой же результат.
  • Вы никогда не привязаны к конфигурации на какой-либо конкретной машине - вы всегда можете передать любые параметры на любой машине (очень полезно для разработки и отладки).
  • Избегайте сюрпризов - оценка не сломается в один прекрасный день, потому что некоторые случайные аспекты локальной конфигурации изменились и от этого зависит какая-то глубокая часть кода - все параметры учтены.
person sbarzowski    schedule 25.06.2020