Я использую следующее развертывание в общей диаграмме:
{{- 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 -}}
Он должен объединить значения диаграммы, используя ее, и перезаписать, если значения существуют. Пока все работает нормально, за исключением случая, когда common/values.yaml
имеет:
resources:
requests:
cpu: 20m
memory: 120Mi
И диаграмма, использующая его values.yaml
имеет:
resources: {}
Итак, указав пустой объект, я ожидайте удалить блок ресурсов, но похоже, что слияние не работает таким образом и все же определяет приоритеты общих значений. Почему так и как это исправить?
Я обнаружил, что функция слияния использует mergo / merge под капотом, и она не объединяет пустые значения. Какой обходной путь может быть здесь?