Если условие проверки значения возвращено шаблоном helm - PullRequest
1 голос
/ 10 апреля 2020

У меня есть родительский график с 2 подкартами. В родительской диаграмме есть global.myflag, в то время как у подшагов есть поля myflag в соответствующих им значениях. Yaml. Мне нужна гибкость, чтобы подкарты могли быть развернуты независимо друг от друга. Итак, я добавил шаблонную функцию в под-диаграмму _helper.tpl, где я хочу проверить - если существует global.myflag, используйте это значение, иначе используйте значение myflag из вложенной диаграммы

Шаблон вернется истина / ложь. Примерно так -

{{- define "isFlagEnabled" -}}
{{- $flag := false -}}
{{- if .Values.myflag -}}
{{- $flag := .Values.myflag -}}
{{- end -}}
{{- if .Values.global.myflag -}}
{{- $flag := .Values.global.myflag -}}
{{- end -}}
{{- printf "%s" $flag -}}
{{- end -}}

И используя это значение (true / false), я хочу установить некоторые значения в моем config.yaml.

{{- if eq (value from template) true -}}

У меня здесь два вопроса: 1. Можем ли мы выполнить условие «если» для значений шаблона? Как? 2. Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 11 апреля 2020

Определение шаблона isFlagEnabled

Ретуширование и очистка вашей функции

{{- define "isFlagEnabled" -}}
{{- if .Values.global -}} <-- check parent exists to avoid nil pointer evaluating interface {}.myflag
{{- if .Values.global.myflag -}}
{{- .Values.global.myflag -}}
{{- end -}}
{{- else if .Values.myflag -}} <-- make sure its else if so you wont override if both defined
{{- .Values.myflag -}}
{{- end -}}
{{- else -}}
{{- printf "false" }}
{{- end -}}

Использование шаблона

Внутри другого шаблона

При использовании шаблона внутри golang синтаксис шаблона, вам нужно будет избегать их с круглыми скобками:

{{- define "flagUsage" -}}
{{- if eq (include "isFlagEnabled" .) "true" -}}
{{- printf "%s" (include "isFlagEnabled" .) -}}
{{- end -}}
{{- end -}}

другой пример, используемый внутри ресурса

Обратите внимание, что шаблон используется в этом примере дважды, один раз как операнд для оператора if и один как текст для метки

{{- if eq (include "isFlagEnabled" .) "true" -}} <--- operand used in sprig function surrounded by `{{ }}`
apiVersion: v1
kind: Service
metadata:
name: {{ include "my-chart.fullname" . }}
labels:
    my-meta-label: {{ include "isFlagEnabled" . }} <---- plain text
spec:
type: {{ .Values.service.type }}
ports:
    - port: {{ .Values.service.port }}
    targetPort: http
    protocol: TCP
    name: http
selector:
    {{- include "my-chart.selectorLabels" . | nindent 4 }}
{{- end }}
...