mirror of
https://github.com/cozystack/cozystack.git
synced 2026-11-06 03:57:52 +09:00
Four blockers, plus the immutability finding carried over from the second round and the minors alongside it. The optional-package helper emitted a Package carrying a variant and nothing else, and package_reconciler takes a component's HelmRelease values from the Package alone, so the worker image catalog documented four operator knobs that no supported path could set. That left the two scenarios the feature exists for -- air-gapped and non-replicated storage -- with a render guard naming a fix the operator could not apply. The helper now takes the same components argument its non-optional twin already had, iaas.yaml forwards a new platform-level kubernetesWorkerImage block, and the nine other optional packages get the same path. The transient headroom a clone needs was written down only in the CI harness. It is a property of the feature, so it belongs in diskSize and in the catalog's storage description, with the arithmetic spelled out. The catalog told operators to set nodeGroups.<name> on a Kubernetes CR, inert since the Phase 2 split, one paragraph above the query that gets it right. talos.version promised the matrix covers every pairing; the helper's own comment says the opposite three paragraphs above the code, and cozyvalues-gen copies the optimistic half into the schema, the README and the dashboard. Both now say what the guard does. An entry whose golden exists is now enforced immutable rather than merely documented so, because the documented recovery -- delete the golden -- runs into the deletion blast radius the same file warns about. Beside it the catalog refuses a duplicate (schematicID, version) and pattern-checks both fields, so it can no longer create a golden whose name a pool cannot reconstruct. The absence and Failed golden guards now fire only for a pool still waiting for its first disk. A pool that cloned months ago has no stake in the source, and aborting its whole HelmRelease on a periodic reconcile was the blast radius the mid-import case already refuses. An empty storageClass on either side now resolves against the cluster default before the cross-class comparison, which is the one corner that cannot be a clone and was passing unchecked. The image resolution is a named template both nodegroup.yaml and talos-reconcile-job.yaml call, carrying the format checks with it, so the boot disk and the in-guest installer cannot drift apart -- the argument this PR already made for the support matrix. The pool field is renamed image -> osImage. It landed one character from the existing images (chart-internal helper overrides) with an unrelated meaning and the same air-gapped motivation in its description. This is new CR surface that has not shipped, so the rename is free now and a migration later. Also: the schema enum drift guard iterated over a command substitution whose failure looked like an empty result, so a renamed property disarmed it; the e2e golden wait reported nothing when the outer timeout fired before the inner one; and ComputePlane's pool-shape allowlist now records the exclusion of osImage rather than leaving it merely absent. Assisted-By: LLM Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>