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.
Describe the bug
An NVCA Operator release installed before
podDisruptionBudgetwas introduced cannot be upgraded withhelm upgrade --reuse-valuesto 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=placeholderRendering fails at
templates/poddisruptionbudget.yamlwhile evaluating.Values.podDisruptionBudget.enabled.Expected behavior
The chart should render successfully when reused values predate the
podDisruptionBudgetconfiguration. In that case the PodDisruptionBudget should remain disabled. Existing validation should remain unchanged when the feature is explicitly enabled.Proposed fix and acceptance criteria
podDisruptionBudget.enabled.src/compute-plane-services/nvca/deployments/nvca-operatorand propagate it todeploy/helm/nvca-operator/nvca-operator.podDisruptionBudgetblock.minAvailableandmaxUnavailablesettings.Landing and backport plan
main. Afixcommit touching both release subprojects will produce patch releases for the current NVCA and NVCA Operator chart trains.release-src/compute-plane-services/nvca/v3.7branch currently exists.release-src/compute-plane-services/nvca/v3.7from 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-valuesnil-safety class for a different chart value.By submitting this issue, you agree to follow our code of conduct and our contributing guidelines.