Files
cephrgw-operator/internal/controller/setup.go
T
benvin 1ea1713d6e Initial cephrgw-operator: Ceph RGW buckets & keys via dashboard API
Adds a Kubernetes operator that provisions Ceph RGW (S3) buckets and
access keys declaratively through the Ceph manager dashboard REST API.

Three CRDs in group ceph.unkin.net/v1alpha1:
- ObjectStoreUser: creates an RGW user, delivers its key pair to a Secret
- Bucket: creates an S3 bucket owned by an ObjectStoreUser; owns the
  bucket's aggregate S3 policy (union of all BucketAccess grants)
- BucketAccess: grants read-only/read-write/full access, provisioning a
  dedicated user (or reusing a referenced one) and delivering RW/RO keys

The internal/ceph client wraps the dashboard /api/auth, /api/rgw/user and
/api/rgw/bucket endpoints with lazy token auth and re-auth on 401. Bucket
policies are rendered deterministically and applied via the bucket
policy API (Reef 18.2+). Credentials come from the cephrgw-credentials
Secret via env. Includes generated CRDs/RBAC, samples, kind manifests,
Woodpecker CI, and docs/ceph-setup.md covering the required Ceph
dashboard account, RGW wiring and permissions.
2026-07-18 00:07:22 +10:00

37 lines
867 B
Go

package controller
import (
ctrl "sigs.k8s.io/controller-runtime"
"git.unkin.net/unkin/cephrgw-operator/internal/ceph"
)
// SetupAll registers every controller with the manager.
func SetupAll(mgr ctrl.Manager, cephClient *ceph.Client, endpoint string) error {
if err := (&ObjectStoreUserReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Ceph: cephClient,
Endpoint: endpoint,
}).SetupWithManager(mgr); err != nil {
return err
}
if err := (&BucketReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Ceph: cephClient,
Endpoint: endpoint,
}).SetupWithManager(mgr); err != nil {
return err
}
if err := (&BucketAccessReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Ceph: cephClient,
Endpoint: endpoint,
}).SetupWithManager(mgr); err != nil {
return err
}
return nil
}