Repository navigation
[INFRA-1333] feat(plane-enterprise): global.deterministicRender for GitOps (3.11.6) - #369
Conversation
WalkthroughThe chart adds the default-off ChangesDeterministic rendering
Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Feature Possibly related issues
Possibly related PRs
Suggested reviewers: Merge Risk:
|
|
Linked to Plane Work Item(s) References This comment was auto-generated by Plane |
…itOps (3.11.4) Every render differed, so ArgoCD showed releases as permanently out of sync: the migrator, Plane AI migrator, Argus migrator and MinIO bucket Jobs are named after the render time, and Argus stamps a `timestamp` pod annotation outside the forceRedeploy gate every other workload uses. Add global.deterministicRender (default false). When on, each of those Jobs is named after a hash of its own rendered spec. Identical values give an identical name, and any spec change (image, config checksum, chart version) gives a new Job, which Job immutability requires anyway. Argus moves onto the shared plane.podAnnotations. forceRedeploy still renames the Jobs on every render. Each Job's spec moves into a named template so its name can hash it. With the flag off, renders are byte-identical to before apart from the clock.
…Jobs when their own config changes (3.11.6) With global.deterministicRender on, two Jobs could keep their name when their input changed: - Argus: argus-env is not in plane.configChecksum, and the per-render timestamp is gone in this mode, so an Argus-only setting changed nothing in the Argus pod template or the migrator spec. argusPodAnnotations now adds checksum/argus-config (a hash of argus-env) in deterministic mode only. Adding argus-env to configChecksum instead would roll every workload. - MinIO bucket Job: the bucket name and credentials come from the doc-store Secret, not the Job spec. Its run suffix now hashes that Secret and the chart version, so the README's "reruns on image, config or chart version" holds. Default-mode renders are unchanged (diffed against master with the clock normalised). Version 3.11.6: master took 3.11.5 in #372.
0c5bdcd to
9cbe8a2
Compare
What
helm templateof the same values differed. The migrator, Plane AI migrator, Argus migrator and MinIO bucket Jobs are named…-<YYYYMMDD-HHMMSS>, and Argus stampstimestamp: nowon its pods outside theforceRedeploygate. ArgoCD shows such releases as permanently out of sync; a customer on 3.10.2 reported it.global.deterministicRender(defaultfalse). When on:plane.podAnnotations(checksum/config,timestamponly withforceRedeploy), pluschecksum/argus-config, because argus-env is not in the shared checksum.Where to look
templates/_helpers.tpl—plane.jobRunSuffix(hash vs clock) andplane.argusPodAnnotations(+checksum/argus-config)templates/workloads/{migrator,pi-migrator,argus-migrator}.job.yaml,minio.stateful.yaml— spec moved into adefine, name uses the suffix; the spec text is unchanged. MinIO's suffix also hashes the doc-store Secret + chart versiontemplates/workloads/argus.deployment.yaml— annotations via the helpervalues.yaml,README.md(GitOps paragraph + parameter row),Chart.yaml(3.11.6)Watch out for:
forceRedeployalso stop triggering migrations. Keeping the clock by default leaves every existing release and there-run helm upgradeadvice in the README unchanged.helm upgradewould then fail withfield is immutable.Blast Radius
forceRedeploy=true.Proof
Important
Confidence: Medium — render behaviour verified for every mode; no live ArgoCD or helm upgrade on a cluster
helm lint. With Argus, Pi and MinIO enabled:forceRedeploy=true), with the same 4 clock-named Jobs;checksum/argus-config; no line outside Argus changes andchecksum/configis untouched;env.docstore_bucketchange: the MinIO bucket Job is renamed; a chart-version-only change renames all three Jobs; withdoc_store_existingSecretrenders stay stable;planeVersionbump: the three migrators get new names, while the MinIO bucket Job keeps its name because its spec doesn't reference the version;services.web.replicas: the migrator name is unchanged;forceRedeploy: new names on every render;helm template r charts/plane-enterprise --set license.licenseDomain=x --set global.deterministicRender=true | grep -E '^ name: r-.*migrate-'twice → same names.helm upgradethat switches the flag on, on a cluster.Rollout
global.deterministicRender: true.external_secrets.*_existingSecretare invisible to the chart, so changing only those reruns no Job in this mode (README says so).Links
🤖 Generated with Claude Code
Summary by CodeRabbit