Сопоставление значения в Хелме 3 с другим значением - PullRequest
1 голос
/ 10 апреля 2020

Я строю библиотечную диаграмму Helm 3 и хотел бы преобразовать входное значение в другое значение, основанное на предустановленной карте.

Скажем, мой values.yaml включает следующее значение:

global:
  environment: production # (production/staging/test/development)

У меня есть следующее соглашение для преобразования длинного имени среды в короткое:

production => prod
staging => stage
test => test
development => dev

Я хотел бы использовать значение, хранящееся в .Values.global.environment, для генерации имени развертывания с префиксом с коротким именем среды. В этом случае его следует сопоставить с prod-<application_name>.

Как этого можно достичь с помощью шлема 3?

1 Ответ

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

Добавить вспомогательную функцию в файл templates/_helpers.tpl.

К сожалению, в шаблонах go нет функции переключения, поэтому она должна быть "грязной", если еще

{{/*
Environment name mapping
*/}}
{{- define "my-chart.environment" -}}
{{- if .Values.global.environment -}}
{{- if eq .Values.global.environment "production" -}}
{{- printf "prod" -}}
{{- else if eq .Values.global.environment "staging" -}}
{{- printf "stage" -}}
{{- else if eq .Values.global.environment "test" -}}
{{- printf "test" -}}
{{- else if eq .Values.global.environment "development" -}}
{{- printf "dev" -}}
{{- end -}}
{{- end -}}
{{- end -}}

затем используйте этот шаблон в шаблоне my-chart.fullname

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "my-chart.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
##### ADDITIONAL LINES
{{- if .Values.global.environment -}}
{{- printf "%s-%s-%s" (include "my-chart.environment" .) .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
##### END ADDITIONAL LINES
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}

Тест:

/apps/my-chart # helm version
version.BuildInfo{Version:"v3.1.2", GitCommit:"d878d4d45863e42fd5cff6743294a11d28a9abce", GitTreeState:"clean", GoVersion:"go1.13.8"}

/apps/my-chart # cat ./values.yaml
# Default values for my-chart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

global:
  environment: development

Запуск helm template . Вывод:

...
...
# Source: my-chart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dev-RELEASE-NAME-my-chart
...
...
...