Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] Incomplete diff showing when using parent chart and dependencies with kustomize #716

Open
obirhuppertz opened this issue Jan 9, 2025 · 0 comments

Comments

@obirhuppertz
Copy link

Hello,

helm-diff is showing an incomplete diff
... if resources are added via kustomize and the helm chart is local and has dependencies.
helm-diff is behaving correctly
... when not using dependencies and just using a local helm chart with kustomize postRenderer.

Needed resources are provided as code under section resources so it can be reproduced locally.

Versions

# kubectl version with installed kustomize (https://kubectl.docs.kubernetes.io/installation/kustomize/)
Client Version: v1.32.0
Kustomize Version: v5.5.0

# helm version
version.BuildInfo{Version:"v3.16.4", GitCommit:"7877b45b63f95635153b29a42c0c2f4273ec45ca", GitTreeState:"dirty", GoVersion:"go1.23.4"}

# helm diff version
3.9.13

For the sake of this example no complex configuration should be needed as we are just about to throw a diff against a kubernetes cluster and verify if the additional resources come up in the output diff when running helm diff upgrade command as shown under resources/helm-upgrade-command.

Please note that the vpa subchart in goldlocks is set to enabled: false to avoid mis-interpretation.

Actual Result

After running the diff command helmChartAfterKustomize.yaml is showing the VerticalPodAutoscaler that was added to the manifest via vpa-controller.yaml where as in the diff_output.txt or stdout its no where to be found that its to be added.

Expected Result

The diff output should show added resource via postRenderer -> kustomize

Resources

The following instructions under resources should create a directory structure like so

.
├── helm
│   └── Chart.yaml
│   └── values.yaml
├── all.yaml # auto created when helm post-renderer is executed
├── diff_output.txt # auto created when helm diff upgrade is run
├── helmChartAfterKustomize.yaml # auto created when helm post-renderer is executed
├── kustomization.yaml
└── vpa-controller.yaml

helm upgrade command

  helm diff upgrade \
    --allow-unreleased \
    --color \
    --post-renderer ./kustomize.sh \
    --three-way-merge \
    --values values.yaml \
    --version "1.0.0" \
    goldilocks helm \
  | tee >(sed $'s/\033[[][^A-Za-z]*[A-Za-z]//g' > diff_output.txt)

kustomize.sh

#!/usr/bin/env bash
set -euo pipefail

kustomizeInput=$(</dev/stdin)

printf "%s" "${kustomizeInput}" > all.yaml

kustomizeOutput=$(kubectl kustomize .)

# add YAML resource separator at the beginning
kustomizeOutput="---
${kustomizeOutput}"

# create local copy for debugging purpose
printf "%s" "${kustomizeOutput}" | envsubst | tee helmChartAfterKustomize.yaml

create helm/Chart.yaml

---
apiVersion: v2
name: goldilocks-dashboard
description: A Parent Helm chart for our goldilocks dashboard
type: application
version: 1.0.0
dependencies:
- name: goldilocks
  repository: "https://charts.fairwinds.com/stable"
  version: 9.0.1
- name: oauth2-proxy
  alias: proxy-dashboard
  repository: https://oauth2-proxy.github.io/manifests
  version: 7.8.1

create helm/values.yaml

---
# for a list of all available attributes see
# see https://artifacthub.io/packages/helm/fairwinds-stable/goldilocks?modal=values
goldilocks: {}

# for a list of all available attributes see
# see https://artifacthub.io/packages/helm/oauth2-proxy/oauth2-proxy?modal=values
proxy-dashboard: {}

create values.yaml

---
goldilocks:
  vpa:
    enabled: false

  dashboard:
    ingress:
      enabled: false

kustomization.yaml

---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - all.yaml
  - vpa-controller.yaml

vpa-controller.yaml

---
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: goldilocks-controller
  namespace: goldilocks
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: goldilocks-controller
  updatePolicy:
    updateMode: Auto
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant