Skip to content

NVCA Operator upgrade with --reuse-values fails when podDisruptionBudget is absent #1902

Description

@mikeyrcamp

Describe the bug

An NVCA Operator release installed before podDisruptionBudget was introduced cannot be upgraded with helm upgrade --reuse-values to a release that includes the setting.

Helm reuses the release's stored values without backfilling newly added chart defaults. The PodDisruptionBudget template directly evaluates .Values.podDisruptionBudget.enabled, so an older values set without the parent map fails with a nil-pointer error. The issue is reproducible when carrying values from NVCA 3.2.22 into NVCA 3.7.0.

Steps or code to reproduce bug

The upgrade behavior can be reproduced without a live cluster by rendering the 3.7.0 source chart after removing the value that did not exist in older releases:

git checkout src/compute-plane-services/nvca/v3.7.0
cp -R src/compute-plane-services/nvca/deployments/nvca-operator /tmp/nvca-operator-reused-values
yq -i 'del(.podDisruptionBudget)' /tmp/nvca-operator-reused-values/values.yaml
helm template nvca-operator /tmp/nvca-operator-reused-values \
  --set-string ngcConfig.serviceKey=placeholder

Rendering fails at templates/poddisruptionbudget.yaml while evaluating .Values.podDisruptionBudget.enabled.

Expected behavior

The chart should render successfully when reused values predate the podDisruptionBudget configuration. In that case the PodDisruptionBudget should remain disabled. Existing validation should remain unchanged when the feature is explicitly enabled.

Proposed fix and acceptance criteria

  • Guard the parent map before reading podDisruptionBudget.enabled.
  • Apply the source change to src/compute-plane-services/nvca/deployments/nvca-operator and propagate it to deploy/helm/nvca-operator/nvca-operator.
  • Add regression coverage for source and vendored charts using values that omit the entire podDisruptionBudget block.
  • Preserve validation for explicit minAvailable and maxUnavailable settings.

Landing and backport plan

  • Required: land the source, vendored chart, and regression test together in a pull request targeting main. A fix commit touching both release subprojects will produce patch releases for the current NVCA and NVCA Operator chart trains.
  • No release-src/compute-plane-services/nvca/v3.7 branch currently exists.
  • The current NVCA release is 3.9.1. Under the repository's N and N-1 backport policy, the maintained minor trains are 3.9 and 3.8, so 3.7 does not receive a routine backport.
  • If maintainers approve an exception for existing 3.7 consumers, create release-src/compute-plane-services/nvca/v3.7 from the 3.7.0 tag, then land a separate backport pull request and manually publish the appropriate patch tag as documented in the release policy.

Additional context

The PodDisruptionBudget configuration was introduced in #808. PR #1850 addresses the same --reuse-values nil-safety class for a different chart value.


By submitting this issue, you agree to follow our code of conduct and our contributing guidelines.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingneeds-triageIssue or PR awaiting maintainer triagereleased

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions