遍历未引用的配置值
Looping over unquoted config values
我正在尝试通过执行以下操作从值列表创建配置映射
{{- if index .Values "environmentVariables" }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "some-env.fullname" . }}
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}
具有以下值
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: 8080
但这会导致以下错误消息
Error: release my-chart-env-v2-some-env-test failed: ConfigMap in version "v1" cannot be handled as a ConfigMap: v1.ConfigMap: Data: ReadString: expects " or n, parsing 106 ...ER_PORT":8... at {"apiVersion":"v1","data":{"SERVER_CONTEXT_PATH":"/dokument-redskaber/my-chart-app/v2","SERVER_PORT":8080},"kind":"ConfigMap","metadata":{"labels":{"app.kubernetes.io/instance":"my-chart-env-v2-some-env-test","app.kubernetes.io/managed-by":"Tiller","app.kubernetes.io/name":"some-env","helm.sh/chart":"some-env-0.1.0"},"name":"my-chart-env-v2","namespace":"some-env-test"}}
如果我这样做
{{ $key }}: {{ $value | quote }}
有效。但我(认为我)不想引用我所有的价值观。简单地引用我的输入值是行不通的。有什么建议吗?
ConfigMap 的对象 data
字段要求所有值都是字符串。当我们有像 8080
这样的值时,它读作 int.
我们可以在此处构建 ConfigMap
对象:
1. 使用 quote
函数将所有值定义为字符串:
values.yaml
:
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: 8080
templates/configmap.yaml
的一部分:
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: {{ $value | quote }}
{{- end }}
2. 使用双引号将所有值定义为字符串:
values.yaml
:
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: 8080
templates/configmap.yaml
的一部分:
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: "{{ $value }}"
{{- end }}
3. 在values.yaml
:
中将所有int值定义为字符串值
values.yaml
:
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: '"8080"'
templates/configmap.yaml
的一部分:
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: {{ $value }}
{{- end }}
这里有一个小技巧:取值的时候,基本都是取"8080"
,完全可以设置为字符串值。
我正在尝试通过执行以下操作从值列表创建配置映射
{{- if index .Values "environmentVariables" }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "some-env.fullname" . }}
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}
具有以下值
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: 8080
但这会导致以下错误消息
Error: release my-chart-env-v2-some-env-test failed: ConfigMap in version "v1" cannot be handled as a ConfigMap: v1.ConfigMap: Data: ReadString: expects " or n, parsing 106 ...ER_PORT":8... at {"apiVersion":"v1","data":{"SERVER_CONTEXT_PATH":"/dokument-redskaber/my-chart-app/v2","SERVER_PORT":8080},"kind":"ConfigMap","metadata":{"labels":{"app.kubernetes.io/instance":"my-chart-env-v2-some-env-test","app.kubernetes.io/managed-by":"Tiller","app.kubernetes.io/name":"some-env","helm.sh/chart":"some-env-0.1.0"},"name":"my-chart-env-v2","namespace":"some-env-test"}}
如果我这样做
{{ $key }}: {{ $value | quote }}
有效。但我(认为我)不想引用我所有的价值观。简单地引用我的输入值是行不通的。有什么建议吗?
ConfigMap 的对象 data
字段要求所有值都是字符串。当我们有像 8080
这样的值时,它读作 int.
我们可以在此处构建 ConfigMap
对象:
1. 使用 quote
函数将所有值定义为字符串:
values.yaml
:
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: 8080
templates/configmap.yaml
的一部分:
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: {{ $value | quote }}
{{- end }}
2. 使用双引号将所有值定义为字符串:
values.yaml
:
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: 8080
templates/configmap.yaml
的一部分:
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: "{{ $value }}"
{{- end }}
3. 在values.yaml
:
values.yaml
:
environmentVariables:
SERVER_CONTEXT_PATH: /some/where/v2
SERVER_PORT: '"8080"'
templates/configmap.yaml
的一部分:
data:
{{- range $key, $value := .Values.environmentVariables }}
{{ $key }}: {{ $value }}
{{- end }}
这里有一个小技巧:取值的时候,基本都是取"8080"
,完全可以设置为字符串值。