#kubernetes #helmfile
#kubernetes #kubernetes-helm
Вопрос:
Мы используем диаграммы helm для развертывания в kubernetes и helm для создания этих диаграмм. К сожалению, я не знаком с helm или шаблонами helm (и лишь умеренно знаком с kubernetes), поэтому, задавая вопрос ниже, я могу использовать неправильную терминологию (на самом деле я, возможно, уже делал это в этом параграфе), поэтому, пожалуйста, потерпите, пока я набираю скорость.
У меня есть шаблон helm, foo.yaml, который выглядит следующим образом:
{{- define "env.variables" }}
echo "--- Setting env variables ---"
export foo={{ .Values.global_vars.foo }}
{{- end }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: "{{ .Values.global_vars.bar }}-set-env-vars"
data:
set-env-vars.sh: {{ include "env.variables" . | b64enc }}
Как вы можете видеть, он определяет скрипт, который создает некоторые переменные среды. Я работаю над требованием создавать только те переменные, для которых какое-либо условие истинно ( .Values.global_vars.baz == 1
)
Я полагаю, я мог бы добиться этого, выполнив что-то вроде:
{{- define "env.variables" }}
if [ {{ .Values.global_vars.baz }} = 1 ]
then
echo "--- Setting env variables ---"
export foo={{ .Values.global_vars.foo }}
fi
{{- end }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: "{{ .Values.global_vars.bar }}-set-env-vars"
data:
set-env-vars.sh: {{ include "env.variables" . | b64enc }}
но это не кажется очень элегантным способом сделать это. Могу ли я ввести условное выражение data
, которое включает только сценарий, в котором выполняется условие. Что-то вроде этого:
{{- define "env.variables" }}
echo "--- Setting env variables ---"
export foo={{ .Values.global_vars.foo }}
{{- end }}
{{- define "no.env.variables" }}
echo "--- No env variables to set ---"
{{- end }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: "{{ .Values.global_vars.bar }}-set-env-vars"
data:
set-env-vars.sh: {{ if {{ .Values.global_vars.bar }} = 1 then include "env.variables" else include "no.env.variables" . | b64enc }}
Надеюсь, это имеет смысл. Это буквально моя первая экскурсия в helm, поэтому я ищу руководство для новичков.
Ответ №1:
Необычные {{ }}
вещи в файлах helm — это шаблоны GO. У них есть несколько встроенных функций, одна из них — управляющие структуры, такие как if-else . Они позволяют вам отображать часть шаблона условно.
Вы можете добавить условие к env.variables
именованному шаблону:
{{ define "env.variables" }}
{{ if eq .Values.global_vars.baz "1" }}
echo "--- Setting env variables ---"
export foo={{ .Values.global_vars.foo }}
{{ else }}
echo "--- No env variables to set ---"
{{ end }}
{{ end }}
data:
set-env-vars.sh: {{ include "env.variables" . | b64enc }}
или в set-env-vars.sh
значение:
{{- define "env.variables" }}
echo "--- Setting env variables ---"
export foo={{ .Values.global_vars.foo }}
{{- end }}
{{- define "no.env.variables" }}
echo "--- No env variables to set ---"
{{- end }}
data:
set-env-vars.sh: {{ if eq .Values.global_vars.baz "1" }}
{{- include "env.variables" . | b64enc }}
{{- else }}
{{- include "env.variables" . | b64enc }}
{{- end }}
Эффект будет тот же.
Одной из запутанных вещей может быть if eq .Values.global_vars.baz "1"
синтаксис. Это eq
функция, а следующие значения являются ее аргументами (шаблоны GO не имеют оператора equals).
Комментарии:
1. Отличный ответ, спасибо. Я закончил на сегодня, но попробую это в понедельник утром. Просто хотел прийти сюда сейчас и подтвердить ваш ответ. Спасибо.
2. попробовал ваше предложение, сработало отлично, спасибо.