diff --git a/.github/workflows/helm_ci.yml b/.github/workflows/helm_ci.yml index 0a75617d79..504c432bd1 100644 --- a/.github/workflows/helm_ci.yml +++ b/.github/workflows/helm_ci.yml @@ -560,7 +560,7 @@ jobs: print("cluster alias: hook waits on the renamed names and the chart's addresses") # Keys kept in a Secret are referenced, not inlined, so the hook - # must render valueFrom for non-string extraEnvironmentVars. + # must render valueFrom for map-valued extraEnvironmentVars. out = render(dict(jwt, **{ "global.seaweedfs.extraEnvironmentVars.WEED_JWT_FILER_SIGNING_KEY.secretKeyRef.name": "signing-keys", "global.seaweedfs.extraEnvironmentVars.WEED_JWT_FILER_SIGNING_KEY.secretKeyRef.key": "filerWrite", @@ -1224,6 +1224,43 @@ jobs: print("all-in-one env: shared key renders once, component value wins") PYEOF + echo "=== Testing extraEnvironmentVars: numbers and booleans render as values ===" + # Only a string rendered as value; anything else went to valueFrom, so an + # unquoted 3306 or true in a values file (or --set) became "valueFrom: 3306" + # and the API server rejected the workload. A map still renders valueFrom, + # and a null still renders an empty variable. --set-json decodes numbers as + # float64, as values files do, which quote would print as 1e+06. + helm template test $CHART_DIR \ + --set-json global.seaweedfs.extraEnvironmentVars.WEED_GLOBAL_INT=1000000 \ + --set master.extraEnvironmentVars.WEED_MASTER_VOLUME_GROWTH_COPY_1=7 \ + --set master.extraEnvironmentVars.WEED_EMPTY=null \ + --set filer.extraEnvironmentVars.WEED_MYSQL_ENABLED=true \ + --set filer.extraEnvironmentVars.WEED_MYSQL_PORT=3306 \ + --set filer.extraEnvironmentVars.WEED_REF.secretKeyRef.name=s \ + --set filer.extraEnvironmentVars.WEED_REF.secretKeyRef.key=k > /tmp/env-scalars.yaml + python3 - /tmp/env-scalars.yaml <<'PYEOF' + import sys, yaml + docs = [d for d in yaml.safe_load_all(open(sys.argv[1])) if d] + def env(suffix): + sts = next(d for d in docs if d.get("kind") == "StatefulSet" + and d["metadata"]["name"].endswith(suffix)) + return {e["name"]: e for e in sts["spec"]["template"]["spec"]["containers"][0]["env"]} + master, filer = env("-master"), env("-filer") + want = [(master, "WEED_MASTER_VOLUME_GROWTH_COPY_1", "7"), (master, "WEED_GLOBAL_INT", "1000000"), + (filer, "WEED_MYSQL_ENABLED", "true"), (filer, "WEED_MYSQL_PORT", "3306"), + (filer, "WEED_GLOBAL_INT", "1000000")] + failed = [f"{name}: {e.get(name)}" for e, name, value in want + if e.get(name) != {"name": name, "value": value}] + if master.get("WEED_EMPTY") != {"name": "WEED_EMPTY"}: + failed.append(f"WEED_EMPTY: {master.get('WEED_EMPTY')}") + if filer.get("WEED_REF", {}).get("valueFrom") != {"secretKeyRef": {"name": "s", "key": "k"}}: + failed.append(f"WEED_REF: {filer.get('WEED_REF')}") + if failed: + print("FAIL: extraEnvironmentVars rendered wrong:", *failed, sep="\n ", file=sys.stderr) + sys.exit(1) + print("extraEnvironmentVars: numbers and booleans render as values, a map as valueFrom, a null as empty") + PYEOF + echo "=== Testing bucket versioning: YAML bool false suspends like string \"false\" ===" # bool false used to be a silent no-op while string "false" suspended. BOOL_FALSE=$(helm template test $CHART_DIR \ diff --git a/k8s/charts/seaweedfs/templates/admin/admin-statefulset.yaml b/k8s/charts/seaweedfs/templates/admin/admin-statefulset.yaml index 35d2d4be2c..d42e2f9a6a 100644 --- a/k8s/charts/seaweedfs/templates/admin/admin-statefulset.yaml +++ b/k8s/charts/seaweedfs/templates/admin/admin-statefulset.yaml @@ -138,9 +138,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} {{- $secretExtraEnvironmentVars := .Values.admin.secretExtraEnvironmentVars }} diff --git a/k8s/charts/seaweedfs/templates/all-in-one/all-in-one-deployment.yaml b/k8s/charts/seaweedfs/templates/all-in-one/all-in-one-deployment.yaml index 37ef19c896..7fab512af7 100644 --- a/k8s/charts/seaweedfs/templates/all-in-one/all-in-one-deployment.yaml +++ b/k8s/charts/seaweedfs/templates/all-in-one/all-in-one-deployment.yaml @@ -118,9 +118,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end }} {{- end }} {{- end }} diff --git a/k8s/charts/seaweedfs/templates/cosi/cosi-deployment.yaml b/k8s/charts/seaweedfs/templates/cosi/cosi-deployment.yaml index a3cb650cef..1089ddda81 100644 --- a/k8s/charts/seaweedfs/templates/cosi/cosi-deployment.yaml +++ b/k8s/charts/seaweedfs/templates/cosi/cosi-deployment.yaml @@ -107,9 +107,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} volumeMounts: diff --git a/k8s/charts/seaweedfs/templates/filer/filer-statefulset.yaml b/k8s/charts/seaweedfs/templates/filer/filer-statefulset.yaml index 04321b49bb..770bfeffec 100644 --- a/k8s/charts/seaweedfs/templates/filer/filer-statefulset.yaml +++ b/k8s/charts/seaweedfs/templates/filer/filer-statefulset.yaml @@ -134,9 +134,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} {{- if .Values.filer.secretExtraEnvironmentVars }} diff --git a/k8s/charts/seaweedfs/templates/master/master-statefulset.yaml b/k8s/charts/seaweedfs/templates/master/master-statefulset.yaml index 08a371c30c..0b4fc38058 100644 --- a/k8s/charts/seaweedfs/templates/master/master-statefulset.yaml +++ b/k8s/charts/seaweedfs/templates/master/master-statefulset.yaml @@ -105,9 +105,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} command: diff --git a/k8s/charts/seaweedfs/templates/s3/s3-deployment.yaml b/k8s/charts/seaweedfs/templates/s3/s3-deployment.yaml index 2d40f0ff84..e4cfc95593 100644 --- a/k8s/charts/seaweedfs/templates/s3/s3-deployment.yaml +++ b/k8s/charts/seaweedfs/templates/s3/s3-deployment.yaml @@ -110,9 +110,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} command: diff --git a/k8s/charts/seaweedfs/templates/sftp/sftp-deployment.yaml b/k8s/charts/seaweedfs/templates/sftp/sftp-deployment.yaml index dd75336ca1..80aa821d26 100644 --- a/k8s/charts/seaweedfs/templates/sftp/sftp-deployment.yaml +++ b/k8s/charts/seaweedfs/templates/sftp/sftp-deployment.yaml @@ -101,9 +101,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} command: diff --git a/k8s/charts/seaweedfs/templates/shared/post-install-bucket-hook.yaml b/k8s/charts/seaweedfs/templates/shared/post-install-bucket-hook.yaml index 3952c73fbf..3f0142560d 100644 --- a/k8s/charts/seaweedfs/templates/shared/post-install-bucket-hook.yaml +++ b/k8s/charts/seaweedfs/templates/shared/post-install-bucket-hook.yaml @@ -124,9 +124,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 14 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end }} {{- end }} {{- end }} diff --git a/k8s/charts/seaweedfs/templates/volume/volume-statefulset.yaml b/k8s/charts/seaweedfs/templates/volume/volume-statefulset.yaml index 4f36c77913..bca6139829 100644 --- a/k8s/charts/seaweedfs/templates/volume/volume-statefulset.yaml +++ b/k8s/charts/seaweedfs/templates/volume/volume-statefulset.yaml @@ -152,9 +152,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} command: diff --git a/k8s/charts/seaweedfs/templates/worker/worker-deployment.yaml b/k8s/charts/seaweedfs/templates/worker/worker-deployment.yaml index 7607b72287..7feff0c5c7 100644 --- a/k8s/charts/seaweedfs/templates/worker/worker-deployment.yaml +++ b/k8s/charts/seaweedfs/templates/worker/worker-deployment.yaml @@ -104,9 +104,11 @@ spec: - name: {{ $key }} {{- if kindIs "string" $value }} value: {{ tpl $value $ | quote }} - {{- else }} + {{- else if kindIs "map" $value }} valueFrom: {{ toYaml $value | nindent 16 | trim }} + {{- else if not (kindIs "invalid" $value) }} + value: {{ toJson $value | quote }} {{- end -}} {{- end }} command: