From bf69b5e1c441c456a558b5dc778cc1bd5ae6af71 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 4 Feb 2026 00:52:09 +0100 Subject: [PATCH 1/4] fix(backup-controller): add backupstrategy-controller as dependency backup-controller creates a Velero strategy resource (strategy.backups.cozystack.io/v1alpha1), but the CRD for this resource is provided by backupstrategy-controller package. Without this dependency, Helm fails with: no matches for kind "Velero" in version "strategy.backups.cozystack.io/v1alpha1" Co-Authored-By: Claude Signed-off-by: Andrei Kvapil --- packages/core/platform/sources/backup-controller.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/platform/sources/backup-controller.yaml b/packages/core/platform/sources/backup-controller.yaml index f68e168b..5a60eacb 100644 --- a/packages/core/platform/sources/backup-controller.yaml +++ b/packages/core/platform/sources/backup-controller.yaml @@ -13,6 +13,7 @@ spec: - name: default dependsOn: - cozystack.networking + - cozystack.backupstrategy-controller components: - name: backup-controller path: system/backup-controller From 2c3ee85259a0461ec5218d939e69ab12e63b094d Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 4 Feb 2026 00:56:55 +0100 Subject: [PATCH 2/4] fix(platform): make backupstrategy-controller required backupstrategy-controller provides the CRD that backup-controller depends on. Since backup-controller is required, backupstrategy-controller must also be required. Co-Authored-By: Claude Signed-off-by: Andrei Kvapil --- packages/core/platform/templates/bundles/system.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/platform/templates/bundles/system.yaml b/packages/core/platform/templates/bundles/system.yaml index faab22eb..2d8b7e33 100644 --- a/packages/core/platform/templates/bundles/system.yaml +++ b/packages/core/platform/templates/bundles/system.yaml @@ -131,7 +131,7 @@ {{include "cozystack.platform.package.default" (list "cozystack.monitoring-application" $) }} {{include "cozystack.platform.package.default" (list "cozystack.etcd-application" $) }} {{include "cozystack.platform.package.default" (list "cozystack.cozystack-basics" $) }} -{{include "cozystack.platform.package.optional.default" (list "cozystack.backupstrategy-controller" $) }} +{{include "cozystack.platform.package.default" (list "cozystack.backupstrategy-controller" $) }} {{include "cozystack.platform.package.default" (list "cozystack.backup-controller" $) }} {{include "cozystack.platform.package.optional.default" (list "cozystack.velero" $) }} {{include "cozystack.platform.package.default" (list "cozystack.vertical-pod-autoscaler" $) }} From 205d68c6b552dcba35a469ce742a4db9fce41b6f Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 4 Feb 2026 01:21:37 +0100 Subject: [PATCH 3/4] refactor(backup): merge backupstrategy-controller into backup-controller The two controllers had a circular dependency: - backup-controller needed strategy.backups.cozystack.io CRD from backupstrategy-controller - backupstrategy-controller needed backups.cozystack.io CRD from backup-controller This merges both controllers into a single package to resolve the dependency cycle. The backup-controller package now includes: - Both controller deployments - All CRDs (backups.cozystack.io and strategy.backups.cozystack.io) - Combined RBAC rules Co-Authored-By: Claude Signed-off-by: Andrei Kvapil --- .../platform/sources/backup-controller.yaml | 1 - .../sources/backupstrategy-controller.yaml | 22 ------------------ .../platform/templates/bundles/system.yaml | 1 - .../strategy.backups.cozystack.io_jobs.yaml | 0 ...trategy.backups.cozystack.io_veleroes.yaml | 0 .../templates/backupstrategy-deployment.yaml} | 0 .../templates/backupstrategy-rbac-bind.yaml} | 0 .../templates/backupstrategy-rbac.yaml} | 0 .../templates/backupstrategy-sa.yaml} | 0 packages/system/backup-controller/values.yaml | 15 ++++++++++++ .../backupstrategy-controller/Chart.yaml | 3 --- .../system/backupstrategy-controller/Makefile | 18 --------------- .../definitions/.gitattributes | 1 - .../backupstrategy-controller/Dockerfile | 23 ------------------- .../templates/crds.yaml | 4 ---- .../backupstrategy-controller/values.yaml | 14 ----------- 16 files changed, 15 insertions(+), 87 deletions(-) delete mode 100644 packages/core/platform/sources/backupstrategy-controller.yaml rename packages/system/{backupstrategy-controller => backup-controller}/definitions/strategy.backups.cozystack.io_jobs.yaml (100%) rename packages/system/{backupstrategy-controller => backup-controller}/definitions/strategy.backups.cozystack.io_veleroes.yaml (100%) rename packages/system/{backupstrategy-controller/templates/deployment.yaml => backup-controller/templates/backupstrategy-deployment.yaml} (100%) rename packages/system/{backupstrategy-controller/templates/rbac-bind.yaml => backup-controller/templates/backupstrategy-rbac-bind.yaml} (100%) rename packages/system/{backupstrategy-controller/templates/rbac.yaml => backup-controller/templates/backupstrategy-rbac.yaml} (100%) rename packages/system/{backupstrategy-controller/templates/sa.yaml => backup-controller/templates/backupstrategy-sa.yaml} (100%) delete mode 100644 packages/system/backupstrategy-controller/Chart.yaml delete mode 100644 packages/system/backupstrategy-controller/Makefile delete mode 100644 packages/system/backupstrategy-controller/definitions/.gitattributes delete mode 100644 packages/system/backupstrategy-controller/images/backupstrategy-controller/Dockerfile delete mode 100644 packages/system/backupstrategy-controller/templates/crds.yaml delete mode 100644 packages/system/backupstrategy-controller/values.yaml diff --git a/packages/core/platform/sources/backup-controller.yaml b/packages/core/platform/sources/backup-controller.yaml index 5a60eacb..f68e168b 100644 --- a/packages/core/platform/sources/backup-controller.yaml +++ b/packages/core/platform/sources/backup-controller.yaml @@ -13,7 +13,6 @@ spec: - name: default dependsOn: - cozystack.networking - - cozystack.backupstrategy-controller components: - name: backup-controller path: system/backup-controller diff --git a/packages/core/platform/sources/backupstrategy-controller.yaml b/packages/core/platform/sources/backupstrategy-controller.yaml deleted file mode 100644 index 3647e8dc..00000000 --- a/packages/core/platform/sources/backupstrategy-controller.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -apiVersion: cozystack.io/v1alpha1 -kind: PackageSource -metadata: - name: cozystack.backupstrategy-controller -spec: - sourceRef: - kind: OCIRepository - name: cozystack-packages - namespace: cozy-system - path: / - variants: - - name: default - dependsOn: - - cozystack.networking - components: - - name: backupstrategy-controller - path: system/backupstrategy-controller - install: - privileged: true - namespace: cozy-backupstrategy-controller - releaseName: backupstrategy-controller diff --git a/packages/core/platform/templates/bundles/system.yaml b/packages/core/platform/templates/bundles/system.yaml index 2d8b7e33..c206cb44 100644 --- a/packages/core/platform/templates/bundles/system.yaml +++ b/packages/core/platform/templates/bundles/system.yaml @@ -131,7 +131,6 @@ {{include "cozystack.platform.package.default" (list "cozystack.monitoring-application" $) }} {{include "cozystack.platform.package.default" (list "cozystack.etcd-application" $) }} {{include "cozystack.platform.package.default" (list "cozystack.cozystack-basics" $) }} -{{include "cozystack.platform.package.default" (list "cozystack.backupstrategy-controller" $) }} {{include "cozystack.platform.package.default" (list "cozystack.backup-controller" $) }} {{include "cozystack.platform.package.optional.default" (list "cozystack.velero" $) }} {{include "cozystack.platform.package.default" (list "cozystack.vertical-pod-autoscaler" $) }} diff --git a/packages/system/backupstrategy-controller/definitions/strategy.backups.cozystack.io_jobs.yaml b/packages/system/backup-controller/definitions/strategy.backups.cozystack.io_jobs.yaml similarity index 100% rename from packages/system/backupstrategy-controller/definitions/strategy.backups.cozystack.io_jobs.yaml rename to packages/system/backup-controller/definitions/strategy.backups.cozystack.io_jobs.yaml diff --git a/packages/system/backupstrategy-controller/definitions/strategy.backups.cozystack.io_veleroes.yaml b/packages/system/backup-controller/definitions/strategy.backups.cozystack.io_veleroes.yaml similarity index 100% rename from packages/system/backupstrategy-controller/definitions/strategy.backups.cozystack.io_veleroes.yaml rename to packages/system/backup-controller/definitions/strategy.backups.cozystack.io_veleroes.yaml diff --git a/packages/system/backupstrategy-controller/templates/deployment.yaml b/packages/system/backup-controller/templates/backupstrategy-deployment.yaml similarity index 100% rename from packages/system/backupstrategy-controller/templates/deployment.yaml rename to packages/system/backup-controller/templates/backupstrategy-deployment.yaml diff --git a/packages/system/backupstrategy-controller/templates/rbac-bind.yaml b/packages/system/backup-controller/templates/backupstrategy-rbac-bind.yaml similarity index 100% rename from packages/system/backupstrategy-controller/templates/rbac-bind.yaml rename to packages/system/backup-controller/templates/backupstrategy-rbac-bind.yaml diff --git a/packages/system/backupstrategy-controller/templates/rbac.yaml b/packages/system/backup-controller/templates/backupstrategy-rbac.yaml similarity index 100% rename from packages/system/backupstrategy-controller/templates/rbac.yaml rename to packages/system/backup-controller/templates/backupstrategy-rbac.yaml diff --git a/packages/system/backupstrategy-controller/templates/sa.yaml b/packages/system/backup-controller/templates/backupstrategy-sa.yaml similarity index 100% rename from packages/system/backupstrategy-controller/templates/sa.yaml rename to packages/system/backup-controller/templates/backupstrategy-sa.yaml diff --git a/packages/system/backup-controller/values.yaml b/packages/system/backup-controller/values.yaml index 84038de8..d58cdc54 100644 --- a/packages/system/backup-controller/values.yaml +++ b/packages/system/backup-controller/values.yaml @@ -12,3 +12,18 @@ backupController: limits: cpu: 500m memory: 128Mi + +backupStrategyController: + image: "ghcr.io/cozystack/cozystack/backupstrategy-controller:v1.0.0-beta.2@sha256:5cbc85679790aa14fb55568439c669a704e29f02236df179abbb3a25c56a2aa7" + replicas: 2 + debug: false + metrics: + enabled: true + bindAddress: ":8443" + resources: + requests: + cpu: 10m + memory: 64Mi + limits: + cpu: 500m + memory: 128Mi diff --git a/packages/system/backupstrategy-controller/Chart.yaml b/packages/system/backupstrategy-controller/Chart.yaml deleted file mode 100644 index bf556f3b..00000000 --- a/packages/system/backupstrategy-controller/Chart.yaml +++ /dev/null @@ -1,3 +0,0 @@ -apiVersion: v2 -name: cozy-backupstrategy-controller -version: 0.0.0 # Placeholder, the actual version will be automatically set during the build process diff --git a/packages/system/backupstrategy-controller/Makefile b/packages/system/backupstrategy-controller/Makefile deleted file mode 100644 index e6f23ca7..00000000 --- a/packages/system/backupstrategy-controller/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -NAME=backupstrategy-controller -NAMESPACE=cozy-backup-controller - -include ../../../hack/common-envs.mk -include ../../../hack/package.mk - -image: image-backupstrategy-controller - -image-backupstrategy-controller: - docker buildx build -f images/backupstrategy-controller/Dockerfile ../../.. \ - --tag $(REGISTRY)/backupstrategy-controller:$(call settag,$(TAG)) \ - --cache-from type=registry,ref=$(REGISTRY)/backupstrategy-controller:latest \ - --cache-to type=inline \ - --metadata-file images/backupstrategy-controller.json \ - $(BUILDX_ARGS) - IMAGE="$(REGISTRY)/backupstrategy-controller:$(call settag,$(TAG))@$$(yq e '."containerimage.digest"' images/backupstrategy-controller.json -o json -r)" \ - yq -i '.backupStrategyController.image = strenv(IMAGE)' values.yaml - rm -f images/backupstrategy-controller.json diff --git a/packages/system/backupstrategy-controller/definitions/.gitattributes b/packages/system/backupstrategy-controller/definitions/.gitattributes deleted file mode 100644 index f581feca..00000000 --- a/packages/system/backupstrategy-controller/definitions/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.yaml linguist-generated diff --git a/packages/system/backupstrategy-controller/images/backupstrategy-controller/Dockerfile b/packages/system/backupstrategy-controller/images/backupstrategy-controller/Dockerfile deleted file mode 100644 index c4f60746..00000000 --- a/packages/system/backupstrategy-controller/images/backupstrategy-controller/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM golang:1.25-alpine AS builder - -ARG TARGETOS -ARG TARGETARCH - -WORKDIR /workspace - -COPY go.mod go.sum ./ -RUN GOOS=$TARGETOS GOARCH=$TARGETARCH go mod download - -COPY api api/ -COPY pkg pkg/ -COPY cmd cmd/ -COPY internal internal/ - -RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build -ldflags="-extldflags=-static" -o /backupstrategy-controller cmd/backupstrategy-controller/main.go - -FROM scratch - -COPY --from=builder /backupstrategy-controller /backupstrategy-controller -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt - -ENTRYPOINT ["/backupstrategy-controller"] diff --git a/packages/system/backupstrategy-controller/templates/crds.yaml b/packages/system/backupstrategy-controller/templates/crds.yaml deleted file mode 100644 index 32b438c1..00000000 --- a/packages/system/backupstrategy-controller/templates/crds.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{- range $path, $_ := .Files.Glob "definitions/*.yaml" }} ---- -{{ $.Files.Get $path }} -{{- end }} diff --git a/packages/system/backupstrategy-controller/values.yaml b/packages/system/backupstrategy-controller/values.yaml deleted file mode 100644 index d4c9f253..00000000 --- a/packages/system/backupstrategy-controller/values.yaml +++ /dev/null @@ -1,14 +0,0 @@ -backupStrategyController: - image: "ghcr.io/cozystack/cozystack/backupstrategy-controller:v1.0.0-beta.2@sha256:5cbc85679790aa14fb55568439c669a704e29f02236df179abbb3a25c56a2aa7" - replicas: 2 - debug: false - metrics: - enabled: true - bindAddress: ":8443" - resources: - requests: - cpu: 10m - memory: 64Mi - limits: - cpu: 500m - memory: 128Mi From fd08fdaa08f36e29da2b152a9666176fa6a76bd8 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 4 Feb 2026 04:12:24 +0100 Subject: [PATCH 4/4] fix(build): move backupstrategy-controller image build to backup-controller The backupstrategy-controller directory was removed but image build was still referenced separately in root Makefile. Now both images are built from backup-controller package. Co-Authored-By: Claude Signed-off-by: Andrei Kvapil --- Makefile | 1 - hack/update-codegen.sh | 3 +-- packages/system/backup-controller/Makefile | 13 ++++++++++- .../backupstrategy-controller/Dockerfile | 23 +++++++++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 packages/system/backup-controller/images/backupstrategy-controller/Dockerfile diff --git a/Makefile b/Makefile index 53d4f82b..f1779174 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,6 @@ build: build-deps make -C packages/system/cozystack-api image make -C packages/system/cozystack-controller image make -C packages/system/backup-controller image - make -C packages/system/backupstrategy-controller image make -C packages/system/lineage-controller-webhook image make -C packages/system/cilium image make -C packages/system/linstor image diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh index 188325e8..4023db3c 100755 --- a/hack/update-codegen.sh +++ b/hack/update-codegen.sh @@ -28,7 +28,6 @@ OPERATOR_CRDDIR=packages/core/installer/definitions COZY_CONTROLLER_CRDDIR=packages/system/cozystack-controller/definitions COZY_RD_CRDDIR=packages/system/application-definition-crd/definition BACKUPS_CORE_CRDDIR=packages/system/backup-controller/definitions -BACKUPSTRATEGY_CRDDIR=packages/system/backupstrategy-controller/definitions trap 'rm -rf ${TMPDIR}' EXIT @@ -70,6 +69,6 @@ mv ${TMPDIR}/cozystack.io_applicationdefinitions.yaml \ ${COZY_RD_CRDDIR}/cozystack.io_applicationdefinitions.yaml mv ${TMPDIR}/backups.cozystack.io*.yaml ${BACKUPS_CORE_CRDDIR}/ -mv ${TMPDIR}/strategy.backups.cozystack.io*.yaml ${BACKUPSTRATEGY_CRDDIR}/ +mv ${TMPDIR}/strategy.backups.cozystack.io*.yaml ${BACKUPS_CORE_CRDDIR}/ mv ${TMPDIR}/*.yaml ${COZY_CONTROLLER_CRDDIR}/ diff --git a/packages/system/backup-controller/Makefile b/packages/system/backup-controller/Makefile index 472a99ba..81a3c0fb 100644 --- a/packages/system/backup-controller/Makefile +++ b/packages/system/backup-controller/Makefile @@ -4,7 +4,7 @@ NAMESPACE=cozy-backup-controller include ../../../hack/common-envs.mk include ../../../hack/package.mk -image: image-backup-controller +image: image-backup-controller image-backupstrategy-controller image-backup-controller: docker buildx build -f images/backup-controller/Dockerfile ../../.. \ @@ -16,3 +16,14 @@ image-backup-controller: IMAGE="$(REGISTRY)/backup-controller:$(call settag,$(TAG))@$$(yq e '."containerimage.digest"' images/backup-controller.json -o json -r)" \ yq -i '.backupController.image = strenv(IMAGE)' values.yaml rm -f images/backup-controller.json + +image-backupstrategy-controller: + docker buildx build -f images/backupstrategy-controller/Dockerfile ../../.. \ + --tag $(REGISTRY)/backupstrategy-controller:$(call settag,$(TAG)) \ + --cache-from type=registry,ref=$(REGISTRY)/backupstrategy-controller:latest \ + --cache-to type=inline \ + --metadata-file images/backupstrategy-controller.json \ + $(BUILDX_ARGS) + IMAGE="$(REGISTRY)/backupstrategy-controller:$(call settag,$(TAG))@$$(yq e '."containerimage.digest"' images/backupstrategy-controller.json -o json -r)" \ + yq -i '.backupStrategyController.image = strenv(IMAGE)' values.yaml + rm -f images/backupstrategy-controller.json diff --git a/packages/system/backup-controller/images/backupstrategy-controller/Dockerfile b/packages/system/backup-controller/images/backupstrategy-controller/Dockerfile new file mode 100644 index 00000000..c4f60746 --- /dev/null +++ b/packages/system/backup-controller/images/backupstrategy-controller/Dockerfile @@ -0,0 +1,23 @@ +FROM golang:1.25-alpine AS builder + +ARG TARGETOS +ARG TARGETARCH + +WORKDIR /workspace + +COPY go.mod go.sum ./ +RUN GOOS=$TARGETOS GOARCH=$TARGETARCH go mod download + +COPY api api/ +COPY pkg pkg/ +COPY cmd cmd/ +COPY internal internal/ + +RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build -ldflags="-extldflags=-static" -o /backupstrategy-controller cmd/backupstrategy-controller/main.go + +FROM scratch + +COPY --from=builder /backupstrategy-controller /backupstrategy-controller +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt + +ENTRYPOINT ["/backupstrategy-controller"]