Summary
docs/operations/backup-classes.md documents overriding the cozy-default backup S3 coordinates (backupStorage.endpoint, region, systemSecretName, etc.) by setting spec.components.backupstrategy-controller.values on the Package cozystack.cozystack-platform CR. This override has no effect: the platform chart never propagates those values to the backupstrategy-controller component, so an admin cannot point the default backup flow at an external or TLS S3 endpoint through the documented path.
Evidence
- Documented override (does not work):
docs/operations/backup-classes.md (section "Admin overrides for cozy-default") instructs:
kind: Package
metadata:
name: cozystack.cozystack-platform
spec:
components:
backupstrategy-controller:
values:
backupStorage:
endpoint: ...
- The
cozystack.cozystack-platform Package exposes exactly one component, platform (the platform chart itself), see packages/core/installer/example/platform.yaml (spec.components.platform.values). There is no backupstrategy-controller component under this PackageSource, so the operator silently ignores it.
- The platform chart renders the child
Package cozystack.backupstrategy-controller via the cozystack.platform.package.default helper with no components argument: packages/core/platform/templates/bundles/system.yaml ({{include "cozystack.platform.package.default" (list "cozystack.backupstrategy-controller" $) }}).
packages/core/platform/templates/_helpers.tpl: the .default helper calls cozystack.platform.package with only three positional args, so $components stays empty and the rendered child Package omits spec.components entirely ({{- if $components }} gate). Nothing in the platform chart reads .Values.components.backupstrategy-controller.
Impact
- Admins running against an external S3 or the in-cluster TLS SeaweedFS cannot set
backupStorage.endpoint (or region / systemSecretName) through the documented supported override path.
- The only working override is patching the child
Package cozystack.backupstrategy-controller with spec.components.backupstrategy-controller.values (the operator does read child-Package components), but this is undocumented, and the platform helm-reconcile re-renders that child Package without a components block, risking that admin patch being reverted.
Proposed fix
Pick one:
- Wire the platform chart to pass a
backupstrategy-controller components block (analogous to how monitoring-agents is rendered via cozystack.platform.package with an explicit components dict) so spec.components.backupstrategy-controller.values on the cozystack-platform Package actually reaches the child HelmRelease; or
- Correct the documentation to point at the child
Package cozystack.backupstrategy-controller override path, and confirm that path survives platform helm-reconcile (protect it from being pruned by the empty components re-render).
Summary
docs/operations/backup-classes.mddocuments overriding thecozy-defaultbackup S3 coordinates (backupStorage.endpoint,region,systemSecretName, etc.) by settingspec.components.backupstrategy-controller.valueson thePackage cozystack.cozystack-platformCR. This override has no effect: the platform chart never propagates those values to thebackupstrategy-controllercomponent, so an admin cannot point the default backup flow at an external or TLS S3 endpoint through the documented path.Evidence
docs/operations/backup-classes.md(section "Admin overrides forcozy-default") instructs:cozystack.cozystack-platformPackage exposes exactly one component,platform(the platform chart itself), seepackages/core/installer/example/platform.yaml(spec.components.platform.values). There is nobackupstrategy-controllercomponent under this PackageSource, so the operator silently ignores it.Package cozystack.backupstrategy-controllervia thecozystack.platform.package.defaulthelper with no components argument:packages/core/platform/templates/bundles/system.yaml({{include "cozystack.platform.package.default" (list "cozystack.backupstrategy-controller" $) }}).packages/core/platform/templates/_helpers.tpl: the.defaulthelper callscozystack.platform.packagewith only three positional args, so$componentsstays empty and the rendered child Package omitsspec.componentsentirely ({{- if $components }}gate). Nothing in the platform chart reads.Values.components.backupstrategy-controller.Impact
backupStorage.endpoint(or region / systemSecretName) through the documented supported override path.Package cozystack.backupstrategy-controllerwithspec.components.backupstrategy-controller.values(the operator does read child-Package components), but this is undocumented, and the platform helm-reconcile re-renders that child Package without acomponentsblock, risking that admin patch being reverted.Proposed fix
Pick one:
backupstrategy-controllercomponents block (analogous to howmonitoring-agentsis rendered viacozystack.platform.packagewith an explicit components dict) sospec.components.backupstrategy-controller.valueson thecozystack-platformPackage actually reaches the child HelmRelease; orPackage cozystack.backupstrategy-controlleroverride path, and confirm that path survives platform helm-reconcile (protect it from being pruned by the emptycomponentsre-render).