猿问

Helm 配置映射错误。预期的字符串;得到布尔值

我有一个包含多个模板的 Helm 图表。一个是运行良好的 configmap。但是当我想添加启用的部分时,我收到了错误消息。


executing "base-helm-chart/templates/configmap.yaml" at <$config>: wrong type for value; expected string; got bool

这是我使用的文件:


{{- if .Values.configMap.enabled }}

apiVersion: v1

kind: ConfigMap

metadata:

  namespace: {{ .Release.Namespace }}

  name: {{include "chart.fullname" .}}

  labels: {{ include "chart.labels" . | nindent 4 }}

data:

{{- range $name, $config := .Values.configMap }}

  {{ $name }}: |

{{ tpl $config $ | indent 4 }}

  {{- end }}

  {{- end -}}

值.yaml


configMap:

  enabled: true

  config.json: |

    food = pizza

    drink = soda

如果用户想从 values.yaml 中添加配置映射,我希望用户启用/禁用


喵喵时光机
浏览 100回答 2
2回答

万千封印

tpl您可以添加条件以跳过另一种类型的值,然后在函数中传递字符串{{- range $name, $config := .Values.configMap -}}{{ if typeOf $config | eq "string" }}{{ $name }}: |{{- tpl $config $ | nindent 12 }}{{ end }}{{ end }}{{ end }}如果您还想在输出中打印另一个键值,则可以使用、print或任何其他打印选项。printfprintln{{- range $name, $config := .Values.configMap -}}{{ if typeOf $config | eq "string" }}{{ $name }}: |{{- tpl $config $ | nindent 12 }}{{- else -}}{{ printf "%v: %v" $name $config }}{{ end }}{{ end }}{{ end }}

森林海

如果用户想从 values.yaml 中添加配置映射,我希望用户启用/禁用这是否意味着默认情况下为configMap空?如果是这种情况,您可以检查空值{{- if .Values.configMap }}apiVersion: v1kind: ConfigMapmetadata:&nbsp; namespace: {{ .Release.Namespace }}&nbsp; name: {{include "chart.fullname" .}}&nbsp; labels: {{ include "chart.labels" . | nindent 4 }}data:{{- range $name, $config := .Values.configMap }}&nbsp; {{ $name }}: |{{ tpl $config $ | indent 4 }}&nbsp; {{- end }}{{- end -}}默认情况values.yaml下是一个空字典:configMap: {}这样,只有当用户填写时configMap,才会生成manifest。除了这个可选的激活之外,您似乎在对值进行迭代时遇到问题,因为它们的类型不同。您可以使用更简单的toYaml过滤器(参见此处)最终结果可能是这样的:{{- if .Values.configMap }}apiVersion: v1kind: ConfigMapmetadata:&nbsp; namespace: {{ .Release.Namespace }}&nbsp; name: {{include "chart.fullname" .}}&nbsp; labels: {{ include "chart.labels" . | nindent 4 }}data:{{- toYaml .Values.configMap | nindent 2 -}}{{- end -}}
随时随地看视频慕课网APP

相关分类

Go
我要回答