如何在 Helm Chart 中覆盖 Table/Mapping
How to overwrite Table/Mapping in Helm Chart
我有一个 values.yaml
ingress:
enabled: false
volume:
hostPath:
path: /tmp
type: DirectoryOrCreate
我有一个 overlay.yaml
可以更改 values.yaml
的值。
ingress:
enabled: true
volume:
persistentVolumeClaim:
claimName: test
对于入口,它的工作正如我所怀疑的那样,因为 enabled
的值将变为 true。但是,对于该卷,表格似乎相互添加而不是被覆盖。例如,我会得到类似的东西:
volume:
persistentVolumeClaim:
claimName: test
hostPath:
path: /tmp
type: DirectoryOrCreate
我想在 values.yaml 中指定默认卷类型及其配置(例如路径),但其他人可以通过覆盖自由更改它。但是,我现在拥有的是“添加”卷类型而不是覆盖它。有办法实现吗?
null
是 a specific valid YAML value(与 JSON null
相同)。如果您将 Helm 值设置为 null
,那么 Go text/template
逻辑会将其解组为 Go nil
并且它将在 if
语句和类似条件中显示为“false” .
volume:
persistentVolumeClaim:
claimName: test
hostPath: null
不过,我可能会在图表逻辑中避免这个问题。一种方法是使用单独的 type
字段来说明您要查找的子字段:
# the chart's defaults in values.yaml
volume:
type: HostPath
hostPath: { ... }
# your `helm install -f` overrides
volume:
type: PersistentVolumeClaim
persistentVolumeClaim: { ... }
# (the default hostPath: will be present but unused)
第二个选项是使默认值“不存在”,并且要么完全禁用该功能,要么在图表代码中构建合理的默认值(如果不存在)。
# values.yaml
# volume specifies where the application will keep persistent data.
# If unset, each replica will have independent data and this data will
# be lost on restart.
#
# volume:
#
# persistentVolumeClaim stores data in an existing PVC.
#
# persistentVolumeClaim:
# name: ???
# deep in templates/deployment.yaml
volumes:
{{- if .Values.volume.persistentVolumeClaim }}
- name: storage
persistentVolumeClaim:
claimName: {{ .Values.volume.persistentVolumeClaim.name }}
{{- else if .Values.volume.hostPath }}
- name: storage
hostPath:
path: {{ .Values.volume.hostPath.path }}
{{- end }}
{{-/* (just don't create a volume if not set) */}}
或者,始终提供一些类型的存储,即使它不是那么有用:
volumes:
- name: storage
{{- if .Values.volume.persistentVolumeClaim }}
persistentVolumeClaim:
claimName: {{ .Values.volume.persistentVolumeClaim.name }}
{{- else if .Values.volume.hostPath }}
hostPath:
path: {{ .Values.volume.hostPath.path }}
{{- else }}
emptyDir: {}
{{- end }}
我有一个 values.yaml
ingress:
enabled: false
volume:
hostPath:
path: /tmp
type: DirectoryOrCreate
我有一个 overlay.yaml
可以更改 values.yaml
的值。
ingress:
enabled: true
volume:
persistentVolumeClaim:
claimName: test
对于入口,它的工作正如我所怀疑的那样,因为 enabled
的值将变为 true。但是,对于该卷,表格似乎相互添加而不是被覆盖。例如,我会得到类似的东西:
volume:
persistentVolumeClaim:
claimName: test
hostPath:
path: /tmp
type: DirectoryOrCreate
我想在 values.yaml 中指定默认卷类型及其配置(例如路径),但其他人可以通过覆盖自由更改它。但是,我现在拥有的是“添加”卷类型而不是覆盖它。有办法实现吗?
null
是 a specific valid YAML value(与 JSON null
相同)。如果您将 Helm 值设置为 null
,那么 Go text/template
逻辑会将其解组为 Go nil
并且它将在 if
语句和类似条件中显示为“false” .
volume:
persistentVolumeClaim:
claimName: test
hostPath: null
不过,我可能会在图表逻辑中避免这个问题。一种方法是使用单独的 type
字段来说明您要查找的子字段:
# the chart's defaults in values.yaml
volume:
type: HostPath
hostPath: { ... }
# your `helm install -f` overrides
volume:
type: PersistentVolumeClaim
persistentVolumeClaim: { ... }
# (the default hostPath: will be present but unused)
第二个选项是使默认值“不存在”,并且要么完全禁用该功能,要么在图表代码中构建合理的默认值(如果不存在)。
# values.yaml
# volume specifies where the application will keep persistent data.
# If unset, each replica will have independent data and this data will
# be lost on restart.
#
# volume:
#
# persistentVolumeClaim stores data in an existing PVC.
#
# persistentVolumeClaim:
# name: ???
# deep in templates/deployment.yaml
volumes:
{{- if .Values.volume.persistentVolumeClaim }}
- name: storage
persistentVolumeClaim:
claimName: {{ .Values.volume.persistentVolumeClaim.name }}
{{- else if .Values.volume.hostPath }}
- name: storage
hostPath:
path: {{ .Values.volume.hostPath.path }}
{{- end }}
{{-/* (just don't create a volume if not set) */}}
或者,始终提供一些类型的存储,即使它不是那么有用:
volumes:
- name: storage
{{- if .Values.volume.persistentVolumeClaim }}
persistentVolumeClaim:
claimName: {{ .Values.volume.persistentVolumeClaim.name }}
{{- else if .Values.volume.hostPath }}
hostPath:
path: {{ .Values.volume.hostPath.path }}
{{- else }}
emptyDir: {}
{{- end }}