From b8dc2a3214b8ebb84b1f7ee17058fceeeb6410c5 Mon Sep 17 00:00:00 2001 From: Blaine Gardner Date: Fri, 4 Dec 2020 11:19:36 -0700 Subject: [PATCH] ceph: update lib bucket provisioner Update to the latest lib bucket provisioner code. Fixes issue 6650 Modifies CRD for objectbucketclaims to fix an additional bug where an ObjectBucket's 'ClaimRef' is lost due to the CRD validation being specified incorrectly. Changes OBC deletion/cleanup to delete the bucket before the user. A user cannot be deleted without an unsafe purge option if the user has buckets associated to it. Does not reintroduce bug 6767 from previous fix for 6650 Signed-off-by: Blaine Gardner --- .../charts/rook-ceph/templates/resources.yaml | 3 --- cluster/examples/kubernetes/ceph/crds.yaml | 4 +--- go.mod | 2 +- go.sum | 4 ++-- .../ceph/object/bucket/rgw-handlers.go | 18 +++++++++--------- pkg/operator/ceph/object/controller.go | 2 +- tests/framework/installer/ceph_manifests.go | 3 --- 7 files changed, 14 insertions(+), 22 deletions(-) diff --git a/cluster/charts/rook-ceph/templates/resources.yaml b/cluster/charts/rook-ceph/templates/resources.yaml index c37bd4094..ca9123cdb 100644 --- a/cluster/charts/rook-ceph/templates/resources.yaml +++ b/cluster/charts/rook-ceph/templates/resources.yaml @@ -1288,9 +1288,6 @@ spec: type: object nullable: true x-kubernetes-preserve-unknown-fields: true - items: - type: object - x-kubernetes-preserve-unknown-fields: true status: type: object x-kubernetes-preserve-unknown-fields: true diff --git a/cluster/examples/kubernetes/ceph/crds.yaml b/cluster/examples/kubernetes/ceph/crds.yaml index 67a92465c..2eb77a535 100644 --- a/cluster/examples/kubernetes/ceph/crds.yaml +++ b/cluster/examples/kubernetes/ceph/crds.yaml @@ -1316,9 +1316,7 @@ spec: claimRef: type: object nullable: true - items: - type: object - x-kubernetes-preserve-unknown-fields: true + x-kubernetes-preserve-unknown-fields: true status: type: object x-kubernetes-preserve-unknown-fields: true diff --git a/go.mod b/go.mod index 0fc37b058..bd001b670 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/hashicorp/vault/api v1.0.5-0.20200902155336-f9d5ce5a171a github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.1.0 - github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20201113145926-53eac50605b4 + github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20201218194517-2e9d6aa76d58 github.com/libopenstorage/secrets v0.0.0-20201006135900-af310b01fe47 github.com/miekg/dns v1.1.34 // indirect github.com/openshift/cluster-api v0.0.0-20191129101638-b09907ac6668 diff --git a/go.sum b/go.sum index 9f9f46437..6d998ad83 100644 --- a/go.sum +++ b/go.sum @@ -1089,8 +1089,8 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kshvakov/clickhouse v1.3.5/go.mod h1:DMzX7FxRymoNkVgizH0DWAL8Cur7wHLgx3MUnGwJqpE= -github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20201113145926-53eac50605b4 h1:67yagwv5kBOnQ+Bmu7o4qMy03VZK6a0xQ8rQQhtj8e4= -github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20201113145926-53eac50605b4/go.mod h1:rmRxr5+DBteSjSjhTCrYUNL/RgnnAftPCuR+WXDTjQQ= +github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20201218194517-2e9d6aa76d58 h1:oWkAP3zmqwL9ULYPGMAbhBstzyzSwgi5gK66SvSaoyk= +github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20201218194517-2e9d6aa76d58/go.mod h1:i+faT/nMoHqzCx95vZsh/82TDNO7CtWWLOIT4iECXI4= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= diff --git a/pkg/operator/ceph/object/bucket/rgw-handlers.go b/pkg/operator/ceph/object/bucket/rgw-handlers.go index 6934785a5..bee618fb0 100644 --- a/pkg/operator/ceph/object/bucket/rgw-handlers.go +++ b/pkg/operator/ceph/object/bucket/rgw-handlers.go @@ -78,15 +78,7 @@ func (p *Provisioner) genUserName() (genName string, err error) { // Empty string is passed for bucketName only if user needs to be removed, ex Revoke() func (p *Provisioner) deleteOBCResource(bucketName string) error { - logger.Infof("deleting Ceph user %s and bucket %q", p.cephUserName, bucketName) - if len(p.cephUserName) > 0 { - output, err := cephObject.DeleteUser(p.objectContext, p.cephUserName) - if err != nil { - logger.Warningf("failed to delete user %q. %s. %v", p.cephUserName, output, err) - } else { - logger.Infof("user %q successfully deleted", p.cephUserName) - } - } + logger.Infof("deleting Ceph user %q and bucket %q", p.cephUserName, bucketName) if len(bucketName) > 0 { // delete bucket with purge option to remove all objects errCode, err := cephObject.DeleteObjectBucket(p.objectContext, bucketName, true) @@ -100,5 +92,13 @@ func (p *Provisioner) deleteOBCResource(bucketName string) error { return errors.Wrapf(err, "failed to delete bucket %q: errCode: %d", bucketName, errCode) } } + if len(p.cephUserName) > 0 { + output, err := cephObject.DeleteUser(p.objectContext, p.cephUserName) + if err != nil { + logger.Warningf("failed to delete user %q. %s. %v", p.cephUserName, output, err) + } else { + logger.Infof("user %q successfully deleted", p.cephUserName) + } + } return nil } diff --git a/pkg/operator/ceph/object/controller.go b/pkg/operator/ceph/object/controller.go index 7c52b0df4..ee5136b25 100644 --- a/pkg/operator/ceph/object/controller.go +++ b/pkg/operator/ceph/object/controller.go @@ -448,7 +448,7 @@ func (r *ReconcileCephObjectStore) verifyObjectBucketCleanup(objectstore *cephv1 bktProvisioner := GetObjectBucketProvisioner(r.context, objectstore.Namespace) bktProvisioner = strings.Replace(bktProvisioner, "/", "-", -1) selector := fmt.Sprintf("bucket-provisioner=%s", bktProvisioner) - objectBuckets, err := r.bktclient.ObjectbucketV1alpha1().ObjectBuckets().List(metav1.ListOptions{LabelSelector: selector}) + objectBuckets, err := r.bktclient.ObjectbucketV1alpha1().ObjectBuckets().List(context.TODO(), metav1.ListOptions{LabelSelector: selector}) if err != nil { logger.Errorf("failed to delete object store. failed to list buckets for objectstore %q in namespace %q", objectstore.Name, objectstore.Namespace) return opcontroller.WaitForRequeueIfFinalizerBlocked, false diff --git a/tests/framework/installer/ceph_manifests.go b/tests/framework/installer/ceph_manifests.go index 26267699a..acbc19010 100644 --- a/tests/framework/installer/ceph_manifests.go +++ b/tests/framework/installer/ceph_manifests.go @@ -1371,9 +1371,6 @@ spec: type: object nullable: true x-kubernetes-preserve-unknown-fields: true - items: - type: object - x-kubernetes-preserve-unknown-fields: true status: type: object x-kubernetes-preserve-unknown-fields: true