Helm3 использует функцию поиска для загрузки переменной

В настоящее время я пытаюсь использовать функцию поиска через Helm 3.1 для загрузки переменной во время установки.

{{ $ingress := (lookup "v1" "Ingress" "mynamespace" "ingressname").status.loadBalancer.ingress[0].hostname }}

Конечно, это возвращает «плохой персонаж [». Если я удалю его, он вернет «нулевой указатель, оценивающий интерфейс {}.loadBalancer».

Возможно ли то, что я пытаюсь сделать?

Спасибо

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь использовать «обычный» синтаксис индексации массива, но диаграммы helm используют «шаблоны golang», поэтому индексация массива выполняется через функция index.

{{ $ingress := (index (lookup "v1" "Ingress" "mynamespace" "ingressname").status.loadBalancer.ingress 0).hostname }}

после дальнейших размышлений я могу легко представить, что ошибка указателя nil происходит во время helm template запусков, поскольку lookup возвращает map[] при работе в автономном режиме

В этом случае вы захотите использовать функцию index для навигации по пути каждый:

{{ $ingress := (index (index (index (index (index (lookup "v1" "Ingress" "mynamespace" "ingressname") "status") "loadBalancer")  "ingress") 0) "hostname") }}

или подтвердите, что поиск находится в «автономном» режиме, и обойдите его:

      {{ $ingress := "fake.example.com" }}
      {{ $maybeLookup := (lookup "v1" "Ingress" "mynamespace" "ingressname") }}
      {{ if $maybeLookup }}
      {{   $ingress = (index $maybeLookup.status.loadBalancer.ingress 0).hostname }}
      {{ end }}

Спасибо за ответ mdaniel. Я попробовал это, но получил ниже. Ошибка, которую я получаю сейчас:: nil pointer evaluating interface {}.loadBalancer Я могу подтвердить, что вход действительно находится в пространстве имен, на которое я ссылаюсь, и у меня есть правильное имя для пространства имен/входа. Путь JSON через kubectl возвращает его. Пример рабочего кубектла:kubectl get ingress/ingressname -n namespace -o jsonpath = "{.status.loadBalancer.ingress[0].hostname}"

CriticalFoxes 17.03.2022 13:14

В таком случае мне жаль, что я удалил свой предыдущий комментарий, потому что вам может быть полезно посмотреть, что видит helm с помощью {{ $x := (lookup "v1" "Ingress" "myns" "thename") | toJson }}{{ fail $x }}, а затем запустить helm install, потому что lookup связывается только с k8s во время операций жить, helm template и helm install --dry-run не будут этого делать.

mdaniel 17.03.2022 16:38

Макданиэль, спасибо. {{ $ingress := ( index (lookup "networking.k8s.io/v1" "Ingress" "mynamespace" "ingress").status.loadBalancer.ingress 0).hostname }} Ваш ответ правильный, моя проблема в том, что я вызывал не тот API. У меня был v1, хотя должен был быть networking.k8s.io/v1. Спасибо за помощь!

CriticalFoxes 17.03.2022 16:52

Ах, да, мне жаль, что я не заметил этого раньше, и я рад, что у вас наконец получилось!

mdaniel 17.03.2022 16:54

Не волнуйтесь. Я ценю ваше время и понимание. Однозначно приведет к решению проблемы.

CriticalFoxes 17.03.2022 23:56

Другие вопросы по теме