Skip to content

Commit 2ca47fb

Browse files
committed
Guard against missing S3 credentials
1 parent 716d553 commit 2ca47fb

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

api/v1alpha1/bucket_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ type BucketSpec struct {
6969
Ignore *string `json:"ignore,omitempty"`
7070
}
7171

72+
const (
73+
GenericBucketProvider string = "generic"
74+
AmazonBucketProvider string = "aws"
75+
)
76+
7277
// BucketStatus defines the observed state of a bucket
7378
type BucketStatus struct {
7479
// ObservedGeneration is the last observed generation.

controllers/bucket_controller.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,15 @@ func (r *BucketReconciler) reconcile(ctx context.Context, bucket sourcev1.Bucket
175175
ctxTimeout, cancel := context.WithTimeout(ctx, bucket.GetTimeout())
176176
defer cancel()
177177

178+
exists, err := s3Client.BucketExists(ctxTimeout, bucket.Spec.BucketName)
179+
if err != nil {
180+
return sourcev1.BucketNotReady(bucket, sourcev1.BucketOperationFailedReason, err.Error()), err
181+
}
182+
if !exists {
183+
err = fmt.Errorf("bucket '%s' not found", bucket.Spec.BucketName)
184+
return sourcev1.BucketNotReady(bucket, sourcev1.BucketOperationFailedReason, err.Error()), err
185+
}
186+
178187
// download bucket content
179188
for object := range s3Client.ListObjects(ctxTimeout, bucket.Spec.BucketName, minio.ListObjectsOptions{Recursive: true}) {
180189
if object.Err != nil {
@@ -270,10 +279,14 @@ func (r *BucketReconciler) auth(ctx context.Context, bucket sourcev1.Bucket) (*m
270279
return nil, fmt.Errorf("invalid '%s' secret data: required fields 'accesskey' and 'secretkey'", secret.Name)
271280
}
272281
opt.Creds = credentials.NewStaticV4(accesskey, secretkey, "")
273-
} else if bucket.Spec.Provider == "aws" {
282+
} else if bucket.Spec.Provider == sourcev1.AmazonBucketProvider {
274283
opt.Creds = credentials.NewIAM("")
275284
}
276285

286+
if opt.Creds == nil {
287+
return nil, fmt.Errorf("no bucket credentials found")
288+
}
289+
277290
return minio.New(bucket.Spec.Endpoint, &opt)
278291
}
279292

0 commit comments

Comments
 (0)