feat(snd): accept updateStrategy as an optional, ignored field#408
Conversation
Re-adds the updateStrategy schema dropped in #395, now as an optional field the controller ignores (in-place is the only rollout behavior). This is the migration-safe intermediate for removing the field from the ~50 live SeiNodeDeployments: the deployed CRD requires updateStrategy, the post-#395 CRD rejects it, and there is no schema under which the field can be both present (on live objects) and absent (in purged manifests). An optional field is valid under both — the rollout's CRD accepts the existing objects without a pre-purge. Manifest cleanup and final field removal follow as separate, unpressured steps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR SummaryLow Risk Overview The API adds No reconciler or planner code reads this field; behavior is unchanged. Reviewed by Cursor Bugbot for commit 10fdf1d. Bugbot is set up for automated code reviews on this repo. Configure here. |
What
Re-adds the
updateStrategyschema removed in #395 — now as an optional field the controller ignores (in-place remains the only rollout behavior). Schema-only; no consuming code returns.Why
This is the migration-safe intermediate for retiring
updateStrategyfrom the ~50 live SeiNodeDeployments. The field is arequired → removedchange with nooptionalstep:d4c69a90) marks it required → purging it from manifests failsspec.updateStrategy: Required valuefield not declared in schemaThere is no single schema under which the field is both present (on live objects) and absent (in purged manifests). An optional field is valid under both — so the eventual controller rollout's CRD accepts the existing objects with no pre-purge, dissolving the trap. (We hit the live form of this: a harbor manifest purge broke Flux and was reverted.)
Both the kubernetes-specialist and platform-engineer independently recommended this optional-intermediate over an atomic CRD-bump+purge (which races the apiserver's structural-schema propagation non-deterministically).
Scope
+optionalfield + theUpdateStrategy/UpdateStrategyTypetypes, regenerated CRD + deepcopy.make manifests generateconfirms it is not inspec.required.Deferred (separate, unpressured)
Manifest cleanup (all cell manifests and
seictl/nodedeployment/presets/*) and final field removal — tracked separately; no rollout pressure once the field is optional.