【问题标题】:Mapping a value in Helm 3 to another value将 Helm 3 中的一个值映射到另一个值
【发布时间】:2020-04-11 06:35:43
【问题描述】:

我正在构建 Helm 3 库图表,并希望将输入值转换为基于预设映射的另一个值。

假设我的values.yaml 包含以下值:

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

我有以下将长环境名称转换为短环境名称的约定:

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

我想使用存储在.Values.global.environment 中的值来生成一个以short 环境名称为前缀的部署名称。在这种情况下,它应该映射到 prod-<application_name>.

Helm 3 如何做到这一点?

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    templates/_helpers.tpl文件下添加辅助函数。

    不幸的是,go 模板中没有 switch 功能,所以它必须是“脏”的,否则

    {{/*
    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
    ...
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多