首页 > 解决方案 > 空对象不会在合并中覆盖?

问题描述

我在常用图表中使用以下部署:

{{- define "common.deployment" -}}
{{- $common := dict "Values" .Values.common -}} 
{{- $noCommon := omit .Values "common" -}} 
{{- $overrides := dict "Values" $noCommon -}} 
{{- $noValues := omit . "Values" -}} 
{{- with merge $noValues $overrides $common -}}
                  ...
        {{- if .Values.resources }}
        resources:
{{ toYaml .Values.resources | indent 12 }}
                  ...
{{- end -}}

它应该使用它来合并图表的值,如果值存在则覆盖。到目前为止,它工作正常,除了这种情况,when common/values.yamlhas :

resources:
  requests:
    cpu: 20m
    memory: 120Mi

使用它的图表values.yaml有:

resources: {}

因此,指定空对象,我希望删除资源块,但看起来合并不起作用,并且仍然优先考虑公共值。为什么会这样以及如何解决?

我发现合并功能在后台使用 mergo/merge 并且它不会合并空值。这里有什么解决方法?

标签: yamlkubernetes-helm

解决方案


找到关于开放 github 问题的解决方法- 使用

resources: null

它适用于我的 helm 2.16.3 测试


推荐阅读