databus23 / helm-diff

A helm plugin that shows a diff explaining what a helm upgrade would change
Apache License 2.0
2.67k stars 279 forks source link

Diff is incorrect when values in values.yaml change and --reuse-values is used #457

Open chaehni opened 1 year ago

chaehni commented 1 year ago

We realized that the produced diff is incorrect for a helm upgrade call if new values have been added to values.yaml.

Example:

  1. install any chart
  2. modify the chart such that it has a new value in values.yaml (e.g. new_label: testing)
  3. modify the chart to set this label in a ressource:
  labels:
    new_label: {{ .Values.new_label }}
  1. call helm diff upgrade <release> <chart> --reuse-values - the diff shows the new label as new_label: testing

This diff is incorrect. With --reuse-values the new value in values.yaml should not slip in. helm upgrade <release> <chart> --reuse-values --dry-run correctly generates the manifest with the label new_label: nil. This is correct, the value new_label does not exist in the original install and since we used --reuse-values the new base values are ignored.

I'm aware that I can tell helm diff to use --dry-run to generate the diff via env. But I feel like this should be the default. Forgetting to set the env creates diffs that are incorrect.

lindhe commented 1 week ago

In this project's README, it says:

This is a Helm plugin giving you a preview of what a helm upgrade would change. It basically generates a diff between the latest deployed version of a release and a helm upgrade --debug --dry-run.

That makes it sound like diff using --dry-run is the default. Is it not?

EDIT: Later in the README, it seems to contradict itself and agree with you:

Set HELM_DIFF_USE_UPGRADE_DRY_RUN=true to use helm upgrade --dry-run instead of helm template to render manifests from the chart.