From 6cfa1a6fb43b4816b6703038700fc9b40f0900ec Mon Sep 17 00:00:00 2001 From: Aleksei Sviridkin Date: Wed, 3 Jun 2026 19:46:50 +0300 Subject: [PATCH] docs(harbor): document S3 object-storage (SeaweedFS) prerequisite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Harbor stores registry data only in S3-compatible object storage and has no local-filesystem backend, but the app docs never stated this. Without SeaweedFS available in the tenant chain the registry BucketClaim never yields its credentials secret and the HelmRelease silently stays unreconciled — a common and confusing first-deploy failure. Add a Prerequisites section to the chart README (propagated to the published app docs) explaining the requirement, how the bucket is provisioned via COSI from SeaweedFS, how the class is inherited down the tenant tree, and how to enable it. Co-authored-by: Myasnikov Daniil Assisted-By: Claude Signed-off-by: Aleksei Sviridkin --- packages/apps/harbor/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/apps/harbor/README.md b/packages/apps/harbor/README.md index d5c6b5fdb..bbf1821fb 100644 --- a/packages/apps/harbor/README.md +++ b/packages/apps/harbor/README.md @@ -2,6 +2,18 @@ Harbor is an open-source trusted cloud-native registry project that stores, signs, and scans content. +## Prerequisites + +The Cozystack Harbor app stores its registry data exclusively in S3-compatible object storage: the chart pins the registry backend to S3 and exposes no filesystem option. That bucket is provisioned through COSI (`objectstorage.k8s.io`) from a SeaweedFS deployment, so before deploying Harbor the tenant must have SeaweedFS available — enabled on the same tenant or inherited from a parent tenant (the resolved class is propagated down the tenant tree, surfaced as the `namespace.cozystack.io/seaweedfs` namespace annotation). + +Enable it by setting `seaweedfs: true` on the tenant (or a parent tenant): + +```yaml +seaweedfs: true +``` + +Without object storage in the tenant chain, Harbor cannot provision its registry bucket: the `-registry` `BucketClaim`/`BucketAccess` never produces the `-registry-bucket` credentials secret, so the Harbor `HelmRelease` stays unreconciled, waiting on `BucketInfo`. + > `storageClass` is annotated as immutable in the chart schema — see [`docs/storage-immutability.md`](../../../docs/storage-immutability.md) for the contract and which consumers enforce it. ## Parameters