简体   繁体   中英

Re-using UUID in helm configmap

There's a similar question that alludes to the possibility of auto-generating a uuid in helm charts when used as a secret or configmap. I'm trying precisely to do that, but I'm getting a new uuid each time.

My test case:

---
{{- $config := (lookup "v1" "ConfigMap" .Release.Namespace "{{ .Release.Name }}-testcase") -}}
apiVersion: v1
kind: ConfigMap
metadata:
  name: "{{ .Release.Name }}-testcase"
  namespace: "{{ .Release.Namespace }}"
  labels:
    app.kubernetes.io/managed-by: "{{ .Release.Service }}"
    app.kubernetes.io/instance: "{{ .Release.Name }}"
    app.kubernetes.io/version: "{{ .Chart.AppVersion }}"
    helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
data:
{{- if $config }}
  TEST_VALUE: {{ $config.data.TEST_VALUE | quote }}
{{- else }}
  TEST_VALUE: {{ uuidv4 | quote }}
{{ end }}

I initially deploy this with:

helm upgrade --install --namespace test mytest .

If I run it again, or run with helm diff upgrade --namespace test mytest. I get a new value for TEST_VALUE . When I dump the contents of $config it's an empty map {} .

I'm using Helm v3.9.0, kubectl 1.24, and kube server is 1.22.

NOTE: I couldn't ask in a comment thread on the other post because I don't have enough reputation.

Refering to my issue where you enclosed your stack overflow post: https://github.com/helm/helm/issues/11187

A way to make your configmap work is to save as a variable before conditionnaly set your value. This means every time you upgrade, you'll generate a UUID which will normally will not be used, but this is not dramatic. When assigning an existing value, := should become =. Also don't forget to b64enc your value in your manifest

{{- $config := uuidv4 | b64enc | quote -}}
{{- $config_lookup := (lookup "v1" "ConfigMap" .Release.Namespace "{{ .Release.Name }}-testcase") -}}
{{- if $config_lookup -}}
{{- $config = $config_lookup.data.TEST_VALUE -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: "{{ .Release.Name }}-testcase"
  namespace: "{{ .Release.Namespace }}"
  labels:
    app.kubernetes.io/managed-by: "{{ .Release.Service }}"
    app.kubernetes.io/instance: "{{ .Release.Name }}"
    app.kubernetes.io/version: "{{ .Chart.AppVersion }}"
    helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
data:
  TEST_VALUE: {{ $config | quote }}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM