@@ -20,10 +20,10 @@ import (
2020	"errors" 
2121	"os" 
2222
23- 	s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" 
2423	iamclient "github.com/scality/cosi-driver/pkg/clients/iam" 
2524	s3client "github.com/scality/cosi-driver/pkg/clients/s3" 
26- 	c "github.com/scality/cosi-driver/pkg/constants" 
25+ 	constants "github.com/scality/cosi-driver/pkg/constants" 
26+ 	"github.com/scality/cosi-driver/pkg/osperrors" 
2727	"github.com/scality/cosi-driver/pkg/util" 
2828	"google.golang.org/grpc/codes" 
2929	"google.golang.org/grpc/status" 
@@ -64,7 +64,7 @@ func InitProvisionerServer(provisioner string) (cosiapi.ProvisionerServer, error
6464		klog .ErrorS (err , "Failed to initialize ProvisionerServer: empty provisioner name" )
6565		return  nil , err 
6666	}
67- 	klog .V (c .LvlEvent ).InfoS ("Initializing ProvisionerServer" , "provisioner" , provisioner )
67+ 	klog .V (constants .LvlEvent ).InfoS ("Initializing ProvisionerServer" , "provisioner" , provisioner )
6868
6969	kubeConfig , err  :=  InClusterConfig ()
7070	if  err  !=  nil  {
@@ -84,7 +84,7 @@ func InitProvisionerServer(provisioner string) (cosiapi.ProvisionerServer, error
8484		return  nil , err 
8585	}
8686
87- 	klog .V (c .LvlEvent ).InfoS ("Successfully initialized ProvisionerServer" , "provisioner" , provisioner )
87+ 	klog .V (constants .LvlEvent ).InfoS ("Successfully initialized ProvisionerServer" , "provisioner" , provisioner )
8888	return  & ProvisionerServer {
8989		Provisioner :     provisioner ,
9090		Clientset :       clientset ,
@@ -106,12 +106,12 @@ func InitProvisionerServer(provisioner string) (cosiapi.ProvisionerServer, error
106106//	non-nil err -           Internal error                                [requeue'd with exponential backoff] 
107107func  (s  * ProvisionerServer ) DriverCreateBucket (ctx  context.Context ,
108108	req  * cosiapi.DriverCreateBucketRequest ) (* cosiapi.DriverCreateBucketResponse , error ) {
109- 	klog .V (c .LvlTrace ).InfoS ("DriverCreateBucket request received" , "request" , req )
109+ 	klog .V (constants .LvlTrace ).InfoS ("DriverCreateBucket request received" , "request" , req )
110110	bucketName  :=  req .GetName ()
111111	parameters  :=  req .GetParameters ()
112112	service  :=  "S3" 
113113
114- 	klog .V (c .LvlInfo ).InfoS ("Processing DriverCreateBucket request" , "bucketName" , bucketName )
114+ 	klog .V (constants .LvlInfo ).InfoS ("Processing DriverCreateBucket request" , "bucketName" , bucketName )
115115
116116	client , s3Params , err  :=  InitializeClient (ctx , s .Clientset , parameters , service )
117117	if  err  !=  nil  {
@@ -125,20 +125,14 @@ func (s *ProvisionerServer) DriverCreateBucket(ctx context.Context,
125125		return  nil , status .Error (codes .InvalidArgument , "unsupported client type for bucket creation" )
126126	}
127127
128- 	klog .V (c .LvlDebug ).InfoS ("Creating bucket" , "bucketName" , bucketName )
128+ 	klog .V (constants .LvlDebug ).InfoS ("Creating bucket" , "bucketName" , bucketName )
129129	err  =  s3Client .CreateBucket (ctx , bucketName , * s3Params )
130130	if  err  !=  nil  {
131- 		var  bucketAlreadyExists  * s3types.BucketAlreadyExists 
132- 
133- 		if  errors .As (err , & bucketAlreadyExists ) {
134- 			klog .V (c .LvlInfo ).InfoS ("Bucket already exists" , "bucketName" , bucketName )
135- 			return  nil , status .Errorf (codes .AlreadyExists , "Bucket already exists: %s" , bucketName )
136- 		} else  {
137- 			klog .ErrorS (err , "Failed to create bucket" , "bucketName" , bucketName )
138- 			return  nil , status .Error (codes .Internal , "Failed to create bucket" )
131+ 		if  translatedErr  :=  osperrors .TranslateS3Error (constants .ActionCreateBucket , bucketName , err ); translatedErr  !=  nil  {
132+ 			return  nil , translatedErr 
139133		}
140134	}
141- 	klog .V (c .LvlInfo ).InfoS ("Successfully created bucket" , "bucketName" , bucketName )
135+ 	klog .V (constants .LvlInfo ).InfoS ("Successfully created bucket" , "bucketName" , bucketName )
142136	return  & cosiapi.DriverCreateBucketResponse {
143137		BucketId : bucketName ,
144138	}, nil 
@@ -154,17 +148,17 @@ func (s *ProvisionerServer) DriverCreateBucket(ctx context.Context,
154148//	non-nil err -           Internal error                                [requeue'd with exponential backoff] 
155149func  (s  * ProvisionerServer ) DriverDeleteBucket (ctx  context.Context ,
156150	req  * cosiapi.DriverDeleteBucketRequest ) (* cosiapi.DriverDeleteBucketResponse , error ) {
157- 	klog .V (c .LvlTrace ).InfoS ("DriverDeleteBucket request received" , "request" , req )
151+ 	klog .V (constants .LvlTrace ).InfoS ("DriverDeleteBucket request received" , "request" , req )
158152
159153	bucketName  :=  req .GetBucketId ()
160154
161- 	klog .V (c .LvlInfo ).InfoS ("Processing DriverDeleteBucket request" , "bucketName" , bucketName )
155+ 	klog .V (constants .LvlInfo ).InfoS ("Processing DriverDeleteBucket request" , "bucketName" , bucketName )
162156	bucket , err  :=  s .BucketClientset .ObjectstorageV1alpha1 ().Buckets ().Get (ctx , bucketName , metav1.GetOptions {})
163157	if  err  !=  nil  {
164158		klog .ErrorS (err , "Failed to fetch bucket object" , "bucketName" , bucketName )
165159		return  nil , status .Error (codes .Internal , "failed to get bucket object from kubernetes" )
166160	}
167- 	klog .V (c .LvlTrace ).InfoS ("Successfully fetched Bucket object" , "bucketName" , bucket .Name , "parameters" , bucket .Spec .Parameters )
161+ 	klog .V (constants .LvlTrace ).InfoS ("Successfully fetched Bucket object" , "bucketName" , bucket .Name , "parameters" , bucket .Spec .Parameters )
168162
169163	client , _ , err  :=  InitializeClient (ctx , s .Clientset , bucket .Spec .Parameters , "S3" )
170164	if  err  !=  nil  {
@@ -180,11 +174,12 @@ func (s *ProvisionerServer) DriverDeleteBucket(ctx context.Context,
180174
181175	err  =  s3Client .DeleteBucket (ctx , bucketName )
182176	if  err  !=  nil  {
183- 		klog .ErrorS (err , "Failed to delete bucket" , "bucketName" , bucketName )
184- 		return  nil , status .Error (codes .Internal , "failed to delete bucket" )
177+ 		if  translatedErr  :=  osperrors .TranslateS3Error (constants .ActionDeleteBucket , bucketName , err ); translatedErr  !=  nil  {
178+ 			return  nil , translatedErr 
179+ 		}
185180	}
186181
187- 	klog .V (c .LvlInfo ).InfoS ("Successfully deleted bucket" , "bucketName" , bucketName )
182+ 	klog .V (constants .LvlInfo ).InfoS ("Successfully deleted bucket" , "bucketName" , bucketName )
188183	return  & cosiapi.DriverDeleteBucketResponse {}, nil 
189184}
190185
@@ -197,13 +192,13 @@ func (s *ProvisionerServer) DriverDeleteBucket(ctx context.Context,
197192//	non-nil err -           Internal error                                [requeue'd with exponential backoff] 
198193func  (s  * ProvisionerServer ) DriverGrantBucketAccess (ctx  context.Context ,
199194	req  * cosiapi.DriverGrantBucketAccessRequest ) (* cosiapi.DriverGrantBucketAccessResponse , error ) {
200- 	klog .V (c .LvlTrace ).InfoS ("DriverGrantBucketAccess request received" , "request" , req )
195+ 	klog .V (constants .LvlTrace ).InfoS ("DriverGrantBucketAccess request received" , "request" , req )
201196
202197	bucketName  :=  req .GetBucketId ()
203198	userName  :=  req .GetName ()
204199	parameters  :=  req .GetParameters ()
205200
206- 	klog .V (c .LvlInfo ).InfoS ("Processing DriverGrantBucketAccess request" , "bucketName" , bucketName , "userName" , userName )
201+ 	klog .V (constants .LvlInfo ).InfoS ("Processing DriverGrantBucketAccess request" , "bucketName" , bucketName , "userName" , userName )
207202
208203	client , iamParams , err  :=  InitializeClient (ctx , s .Clientset , parameters , "IAM" )
209204
@@ -218,14 +213,15 @@ func (s *ProvisionerServer) DriverGrantBucketAccess(ctx context.Context,
218213		return  nil , status .Error (codes .Internal , "failed to initialize object storage provider IAM client" )
219214	}
220215
221- 	klog .V (c .LvlInfo ).InfoS ("Granting bucket access" , "bucketName" , bucketName , "userName" , userName )
216+ 	klog .V (constants .LvlInfo ).InfoS ("Granting bucket access" , "bucketName" , bucketName , "userName" , userName )
222217	userInfo , err  :=  iamClient .CreateBucketAccess (ctx , userName , bucketName )
223218	if  err  !=  nil  {
224- 		klog .ErrorS (err , "Failed to create bucket access" , "bucketName" , bucketName , "userName" , userName )
225- 		return  nil , status .Error (codes .Internal , "failed to create bucket access" )
219+ 		if  translatedErr  :=  osperrors .TranslateIAMError (constants .ActionGrantBucketAccess , userName , err ); translatedErr  !=  nil  {
220+ 			return  nil , translatedErr 
221+ 		}
226222	}
227223
228- 	klog .V (c .LvlInfo ).InfoS ("Successfully granted bucket access" , "bucketName" , bucketName , "userName" , userName )
224+ 	klog .V (constants .LvlInfo ).InfoS ("Successfully granted bucket access" , "bucketName" , bucketName , "userName" , userName )
229225	return  & cosiapi.DriverGrantBucketAccessResponse {
230226		AccountId : userName ,
231227		Credentials : map [string ]* cosiapi.CredentialDetails {
@@ -251,20 +247,20 @@ func (s *ProvisionerServer) DriverGrantBucketAccess(ctx context.Context,
251247//	non-nil err -           Internal error                                [requeue'd with exponential backoff] 
252248func  (s  * ProvisionerServer ) DriverRevokeBucketAccess (ctx  context.Context ,
253249	req  * cosiapi.DriverRevokeBucketAccessRequest ) (* cosiapi.DriverRevokeBucketAccessResponse , error ) {
254- 	klog .V (c .LvlTrace ).InfoS ("DriverRevokeBucketAccess request received" , "request" , req )
250+ 	klog .V (constants .LvlTrace ).InfoS ("DriverRevokeBucketAccess request received" , "request" , req )
255251
256252	bucketName  :=  req .GetBucketId ()
257253	userName  :=  req .GetAccountId ()
258254
259- 	klog .V (c .LvlInfo ).InfoS ("Processing DriverRevokeBucketAccess request" , "bucketName" , bucketName , "userName" , userName )
255+ 	klog .V (constants .LvlInfo ).InfoS ("Processing DriverRevokeBucketAccess request" , "bucketName" , bucketName , "userName" , userName )
260256
261257	// Fetch the bucket to retrieve parameters 
262258	bucket , err  :=  s .BucketClientset .ObjectstorageV1alpha1 ().Buckets ().Get (ctx , bucketName , metav1.GetOptions {})
263259	if  err  !=  nil  {
264260		klog .ErrorS (err , "Failed to fetch bucket object" , "bucketName" , bucketName )
265261		return  nil , status .Error (codes .Internal , "failed to get bucket object from kubernetes" )
266262	}
267- 	klog .V (c .LvlTrace ).InfoS ("Successfully fetched Bucket object" , "bucketName" , bucket .Name , "parameters" , bucket .Spec .Parameters )
263+ 	klog .V (constants .LvlTrace ).InfoS ("Successfully fetched Bucket object" , "bucketName" , bucket .Name , "parameters" , bucket .Spec .Parameters )
268264
269265	client , _ , err  :=  InitializeClient (ctx , s .Clientset , bucket .Spec .Parameters , "IAM" )
270266	if  err  !=  nil  {
@@ -278,33 +274,34 @@ func (s *ProvisionerServer) DriverRevokeBucketAccess(ctx context.Context,
278274		return  nil , status .Error (codes .Internal , "unsupported client type for IAM operations" )
279275	}
280276
281- 	klog .V (c .LvlInfo ).InfoS ("Revoking bucket access" , "bucketName" , bucketName , "userName" , userName )
277+ 	klog .V (constants .LvlInfo ).InfoS ("Revoking bucket access" , "bucketName" , bucketName , "userName" , userName )
282278	err  =  iamClient .RevokeBucketAccess (ctx , userName , bucketName )
283279	if  err  !=  nil  {
284- 		klog .ErrorS (err , "Failed to revoke bucket access" , "bucketName" , bucketName , "userName" , userName )
285- 		return  nil , status .Error (codes .Internal , "failed to revoke bucket access" )
280+ 		if  translatedErr  :=  osperrors .TranslateIAMError (constants .ActionRevokeBucketAccess , userName , err ); translatedErr  !=  nil  {
281+ 			return  nil , translatedErr 
282+ 		}
286283	}
287284
288- 	klog .V (c .LvlInfo ).InfoS ("Successfully revoked bucket access" , "bucketName" , bucketName , "userName" , userName )
285+ 	klog .V (constants .LvlInfo ).InfoS ("Successfully revoked bucket access" , "bucketName" , bucketName , "userName" , userName )
289286	return  & cosiapi.DriverRevokeBucketAccessResponse {}, nil 
290287}
291288
292289func  initializeObjectStorageClient (ctx  context.Context , clientset  kubernetes.Interface , parameters  map [string ]string , service  string ) (interface {}, * util.StorageClientParameters , error ) {
293- 	klog .V (c .LvlDebug ).InfoS ("Initializing object storage provider client" , "service" , service )
290+ 	klog .V (constants .LvlDebug ).InfoS ("Initializing object storage provider client" , "service" , service )
294291
295292	ospSecretName , namespace , err  :=  FetchSecretInformation (parameters )
296293	if  err  !=  nil  {
297294		klog .ErrorS (err , "Failed to fetch object storage provider secret info" )
298295		return  nil , nil , err 
299296	}
300297
301- 	klog .V (c .LvlDebug ).InfoS ("Fetching secret data" , "secretName" , ospSecretName , "namespace" , namespace )
298+ 	klog .V (constants .LvlDebug ).InfoS ("Fetching secret data" , "secretName" , ospSecretName , "namespace" , namespace )
302299	ospSecret , err  :=  clientset .CoreV1 ().Secrets (namespace ).Get (ctx , ospSecretName , metav1.GetOptions {})
303300	if  err  !=  nil  {
304301		klog .ErrorS (err , "Failed to get object store user secret" , "secretName" , ospSecretName , "namespace" , namespace )
305302		return  nil , nil , status .Error (codes .Internal , "failed to get object store user secret" )
306303	}
307- 	klog .V (c .LvlDebug ).InfoS ("Successfully fetched object storage provider secret" , "secretName" , ospSecretName , "namespace" , namespace )
304+ 	klog .V (constants .LvlDebug ).InfoS ("Successfully fetched object storage provider secret" , "secretName" , ospSecretName , "namespace" , namespace )
308305
309306	storageClientParameters , err  :=  FetchParameters (ospSecret .Data )
310307	if  err  !=  nil  {
@@ -320,14 +317,14 @@ func initializeObjectStorageClient(ctx context.Context, clientset kubernetes.Int
320317			klog .ErrorS (err , "Failed to initialize S3 client" , "endpoint" , storageClientParameters .Endpoint )
321318			return  nil , nil , status .Error (codes .Internal , "failed to initialize S3 client" )
322319		}
323- 		klog .V (c .LvlDebug ).InfoS ("Successfully initialized S3 client" , "endpoint" , storageClientParameters .Endpoint )
320+ 		klog .V (constants .LvlDebug ).InfoS ("Successfully initialized S3 client" , "endpoint" , storageClientParameters .Endpoint )
324321	case  "IAM" :
325322		client , err  =  iamclient .InitIAMClient (ctx , * storageClientParameters )
326323		if  err  !=  nil  {
327324			klog .ErrorS (err , "Failed to initialize IAM client" , "endpoint" , storageClientParameters .IAMEndpoint )
328325			return  nil , nil , status .Error (codes .Internal , "failed to initialize IAM client" )
329326		}
330- 		klog .V (c .LvlDebug ).InfoS ("Successfully initialized IAM client" , "endpoint" , storageClientParameters .IAMEndpoint )
327+ 		klog .V (constants .LvlDebug ).InfoS ("Successfully initialized IAM client" , "endpoint" , storageClientParameters .IAMEndpoint )
331328	default :
332329		klog .ErrorS (nil , "Unsupported object storage provider service" , "service" , service )
333330		return  nil , nil , status .Error (codes .Internal , "unsupported object storage provider service" )
@@ -336,7 +333,7 @@ func initializeObjectStorageClient(ctx context.Context, clientset kubernetes.Int
336333}
337334
338335func  fetchObjectStorageProviderSecretInfo (parameters  map [string ]string ) (string , string , error ) {
339- 	klog .V (c .LvlDebug ).InfoS ("Validating object storage provider secret parameters" , "parameters" , parameters )
336+ 	klog .V (constants .LvlDebug ).InfoS ("Validating object storage provider secret parameters" , "parameters" , parameters )
340337
341338	secretName  :=  parameters ["objectStorageSecretName" ]
342339	namespace  :=  os .Getenv ("POD_NAMESPACE" )
@@ -348,12 +345,12 @@ func fetchObjectStorageProviderSecretInfo(parameters map[string]string) (string,
348345		return  "" , "" , status .Error (codes .InvalidArgument , "Object storage provider secret name and namespace are required" )
349346	}
350347
351- 	klog .V (c .LvlDebug ).InfoS ("Successfully validated object storage provider secret parameters" , "secretName" , secretName , "namespace" , namespace )
348+ 	klog .V (constants .LvlDebug ).InfoS ("Successfully validated object storage provider secret parameters" , "secretName" , secretName , "namespace" , namespace )
352349	return  secretName , namespace , nil 
353350}
354351
355352func  fetchS3Parameters (secretData  map [string ][]byte ) (* util.StorageClientParameters , error ) {
356- 	klog .V (c .LvlTrace ).InfoS ("Extracting object storage parameters from secret" )
353+ 	klog .V (constants .LvlTrace ).InfoS ("Extracting object storage parameters from secret" )
357354
358355	params  :=  util .NewStorageClientParameters ()
359356
@@ -365,7 +362,7 @@ func fetchS3Parameters(secretData map[string][]byte) (*util.StorageClientParamet
365362	if  cert , exists  :=  secretData ["tlsCert" ]; exists  {
366363		params .TLSCert  =  cert 
367364	} else  {
368- 		klog .V (c .LvlTrace ).InfoS ("TLS certificate not provided, proceeding without it" )
365+ 		klog .V (constants .LvlTrace ).InfoS ("TLS certificate not provided, proceeding without it" )
369366	}
370367
371368	if  err  :=  params .Validate (); err  !=  nil  {
@@ -376,8 +373,8 @@ func fetchS3Parameters(secretData map[string][]byte) (*util.StorageClientParamet
376373	params .IAMEndpoint  =  params .Endpoint 
377374	if  value , exists  :=  secretData ["iamEndpoint" ]; exists  &&  len (value ) >  0  {
378375		params .IAMEndpoint  =  string (value )
379- 		klog .V (c .LvlTrace ).InfoS ("IAM endpoint specified" , "iamEndpoint" , params .IAMEndpoint )
376+ 		klog .V (constants .LvlTrace ).InfoS ("IAM endpoint specified" , "iamEndpoint" , params .IAMEndpoint )
380377	}
381- 	klog .V (c .LvlTrace ).InfoS ("Successfully validated object storage parameters" , "endpoint" , params .Endpoint , "region" , params .Region )
378+ 	klog .V (constants .LvlTrace ).InfoS ("Successfully validated object storage parameters" , "endpoint" , params .Endpoint , "region" , params .Region )
382379	return  params , nil 
383380}
0 commit comments