From 00f904a69d0da0f610dcbba2171e9d1ee2609229 Mon Sep 17 00:00:00 2001 From: seven <2240369235@qq.com> Date: Sun, 1 Sep 2024 09:15:50 +0800 Subject: [PATCH] The creation of a static bucket requires verification of whether there is a corresponding bucket on the storage, otherwise binding should fail --- pkg/bucket/bucket_controller.go | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/pkg/bucket/bucket_controller.go b/pkg/bucket/bucket_controller.go index 9b0d672..0179978 100644 --- a/pkg/bucket/bucket_controller.go +++ b/pkg/bucket/bucket_controller.go @@ -97,8 +97,36 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket) var bucketID string if bucket.Spec.ExistingBucketID != "" { - bucketReady = true - bucketID = bucket.Spec.ExistingBucketID + //如果bucket + req := &cosi.DriverCreateBucketRequest{ + Parameters: bucket.Spec.Parameters, + Name: bucket.ObjectMeta.Name, + } + + rsp, err := b.provisionerClient.DriverCreateBucket(ctx, req) + if err != nil { + if status.Code(err) != codes.PermissionDenied { + //events.FailedCreateBucket indicates that the corresponding bucket does not exist on the storage + return b.recordError(inputBucket, v1.EventTypeWarning, events.FailedCreateBucket, fmt.Errorf("failed to create bucket: %w", err)) + } + } + + if rsp == nil { + err = consts.ErrInternal + klog.V(3).ErrorS(err, "Internal Error from driver", + "bucket", bucket.ObjectMeta.Name) + return fmt.Errorf("%w for Bucket %v", err, bucket.Name) + } + + if rsp.BucketId != "" { + bucketID = rsp.BucketId + bucketReady = true + } else { + klog.V(3).ErrorS(err, "DriverCreateBucket returned an empty bucketID", + "bucket", bucket.ObjectMeta.Name) + return fmt.Errorf("%w for Bucket %v", consts.ErrEmptyBucketID, bucket.Name) + } + if bucket.Spec.Parameters == nil { bucketClass, err := b.bucketClasses().Get(ctx, bucket.Spec.BucketClassName, metav1.GetOptions{}) if kubeerrors.IsNotFound(err) {