Skip to content

Commit 1cfd157

Browse files
committed
fixup! Migrate Bucket controller to runtime/secrets
Signed-off-by: cappyzawa <[email protected]>
1 parent ebf1405 commit 1cfd157

File tree

1 file changed

+48
-33
lines changed

1 file changed

+48
-33
lines changed

internal/controller/bucket_controller.go

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ type BucketProvider interface {
155155
Close(context.Context)
156156
}
157157

158+
// bucketCredentials contains all credentials and configuration needed for bucket providers.
159+
type bucketCredentials struct {
160+
secret *corev1.Secret
161+
proxyURL *url.URL
162+
tlsConfig *tls.Config
163+
stsSecret *corev1.Secret
164+
stsTLSConfig *tls.Config
165+
}
166+
158167
// bucketReconcileFunc is the function type for all the v1.Bucket
159168
// (sub)reconcile functions. The type implementations are grouped and
160169
// executed serially to perform the complete reconcile of the object.
@@ -421,14 +430,14 @@ func (r *BucketReconciler) reconcileStorage(ctx context.Context, sp *patch.Seria
421430
// the provider. If this fails, it records v1.FetchFailedCondition=True on
422431
// the object and returns early.
423432
func (r *BucketReconciler) reconcileSource(ctx context.Context, sp *patch.SerialPatcher, obj *sourcev1.Bucket, index *index.Digester, dir string) (sreconcile.Result, error) {
424-
secret, proxyURL, tlsConfig, stsSecret, stsTLSConfig, err := r.setupCredentials(ctx, obj)
433+
creds, err := r.setupCredentials(ctx, obj)
425434
if err != nil {
426435
e := serror.NewGeneric(err, sourcev1.AuthenticationFailedReason)
427436
conditions.MarkTrue(obj, sourcev1.FetchFailedCondition, e.Reason, "%s", e)
428437
return sreconcile.ResultEmpty, e
429438
}
430439

431-
provider, err := r.createBucketProvider(ctx, obj, secret, proxyURL, tlsConfig, stsSecret, stsTLSConfig)
440+
provider, err := r.createBucketProvider(ctx, obj, creds)
432441
if err != nil {
433442
var stallingErr *serror.Stalling
434443
var genericErr *serror.Generic
@@ -751,8 +760,8 @@ func fetchIndexFiles(ctx context.Context, provider BucketProvider, obj *sourcev1
751760
}
752761

753762
// setupCredentials retrieves and validates secrets for authentication, TLS configuration, and proxy settings.
754-
// It returns the primary secret, proxy URL, TLS config, STS secret, and STS TLS config.
755-
func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.Bucket) (*corev1.Secret, *url.URL, *tls.Config, *corev1.Secret, *tls.Config, error) {
763+
// It returns all credentials needed for bucket providers.
764+
func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.Bucket) (*bucketCredentials, error) {
756765
var secret *corev1.Secret
757766
if obj.Spec.SecretRef != nil {
758767
secretName := types.NamespacedName{
@@ -761,7 +770,7 @@ func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.B
761770
}
762771
secret = &corev1.Secret{}
763772
if err := r.Get(ctx, secretName, secret); err != nil {
764-
return nil, nil, nil, nil, nil, fmt.Errorf("failed to get secret: %w", err)
773+
return nil, fmt.Errorf("failed to get secret: %w", err)
765774
}
766775
}
767776

@@ -773,7 +782,7 @@ func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.B
773782
}
774783
stsSecret = &corev1.Secret{}
775784
if err := r.Get(ctx, secretName, stsSecret); err != nil {
776-
return nil, nil, nil, nil, nil, fmt.Errorf("failed to get STS secret:%w", err)
785+
return nil, fmt.Errorf("failed to get STS secret:%w", err)
777786
}
778787
}
779788

@@ -791,7 +800,7 @@ func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.B
791800
}
792801
proxyURL, err = secrets.ProxyURLFromSecretRef(ctx, r.Client, secretRef)
793802
if err != nil {
794-
return nil, nil, nil, nil, nil, fmt.Errorf("failed to get proxy URL: %w", err)
803+
return nil, fmt.Errorf("failed to get proxy URL: %w", err)
795804
}
796805
}
797806

@@ -802,7 +811,7 @@ func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.B
802811
}
803812
tlsConfig, err = secrets.TLSConfigFromSecretRef(ctx, r.Client, secretRef, obj.Spec.Endpoint, obj.Spec.Insecure)
804813
if err != nil {
805-
return nil, nil, nil, nil, nil, fmt.Errorf("failed to get TLS config: %w", err)
814+
return nil, fmt.Errorf("failed to get TLS config: %w", err)
806815
}
807816
}
808817

@@ -813,45 +822,51 @@ func (r *BucketReconciler) setupCredentials(ctx context.Context, obj *sourcev1.B
813822
}
814823
stsTLSConfig, err = secrets.TLSConfigFromSecretRef(ctx, r.Client, secretRef, obj.Spec.STS.Endpoint, obj.Spec.Insecure)
815824
if err != nil {
816-
return nil, nil, nil, nil, nil, fmt.Errorf("failed to get STS TLS config: %w", err)
825+
return nil, fmt.Errorf("failed to get STS TLS config: %w", err)
817826
}
818827
}
819828

820-
return secret, proxyURL, tlsConfig, stsSecret, stsTLSConfig, nil
829+
return &bucketCredentials{
830+
secret: secret,
831+
proxyURL: proxyURL,
832+
tlsConfig: tlsConfig,
833+
stsSecret: stsSecret,
834+
stsTLSConfig: stsTLSConfig,
835+
}, nil
821836
}
822837

823838
// createBucketProvider creates a provider-specific bucket client using the given credentials and configuration.
824839
// It handles different bucket providers (AWS, GCP, Azure, generic) and returns the appropriate client.
825-
func (r *BucketReconciler) createBucketProvider(ctx context.Context, obj *sourcev1.Bucket, secret *corev1.Secret, proxyURL *url.URL, tlsConfig *tls.Config, stsSecret *corev1.Secret, stsTLSConfig *tls.Config) (BucketProvider, error) {
840+
func (r *BucketReconciler) createBucketProvider(ctx context.Context, obj *sourcev1.Bucket, creds *bucketCredentials) (BucketProvider, error) {
826841
switch obj.Spec.Provider {
827842
case sourcev1.BucketProviderGoogle:
828-
if err := gcp.ValidateSecret(secret); err != nil {
843+
if err := gcp.ValidateSecret(creds.secret); err != nil {
829844
return nil, err
830845
}
831846
var opts []gcp.Option
832-
if secret != nil {
833-
opts = append(opts, gcp.WithSecret(secret))
847+
if creds.secret != nil {
848+
opts = append(opts, gcp.WithSecret(creds.secret))
834849
}
835-
if proxyURL != nil {
836-
opts = append(opts, gcp.WithProxyURL(proxyURL))
850+
if creds.proxyURL != nil {
851+
opts = append(opts, gcp.WithProxyURL(creds.proxyURL))
837852
}
838853
return gcp.NewClient(ctx, opts...)
839854

840855
case sourcev1.BucketProviderAzure:
841-
if err := azure.ValidateSecret(secret); err != nil {
856+
if err := azure.ValidateSecret(creds.secret); err != nil {
842857
return nil, err
843858
}
844859
var opts []azure.Option
845-
if secret != nil {
846-
opts = append(opts, azure.WithSecret(secret))
860+
if creds.secret != nil {
861+
opts = append(opts, azure.WithSecret(creds.secret))
847862
}
848-
if proxyURL != nil {
849-
opts = append(opts, azure.WithProxyURL(proxyURL))
863+
if creds.proxyURL != nil {
864+
opts = append(opts, azure.WithProxyURL(creds.proxyURL))
850865
}
851866
return azure.NewClient(obj, opts...)
852867

853868
default:
854-
if err := minio.ValidateSecret(secret); err != nil {
869+
if err := minio.ValidateSecret(creds.secret); err != nil {
855870
return nil, err
856871
}
857872
if sts := obj.Spec.STS; sts != nil {
@@ -861,25 +876,25 @@ func (r *BucketReconciler) createBucketProvider(ctx context.Context, obj *source
861876
if _, err := url.Parse(sts.Endpoint); err != nil {
862877
return nil, serror.NewStalling(fmt.Errorf("failed to parse STS endpoint '%s': %w", sts.Endpoint, err), sourcev1.URLInvalidReason)
863878
}
864-
if err := minio.ValidateSTSSecret(sts.Provider, stsSecret); err != nil {
879+
if err := minio.ValidateSTSSecret(sts.Provider, creds.stsSecret); err != nil {
865880
return nil, serror.NewGeneric(err, sourcev1.AuthenticationFailedReason)
866881
}
867882
}
868883
var opts []minio.Option
869-
if secret != nil {
870-
opts = append(opts, minio.WithSecret(secret))
884+
if creds.secret != nil {
885+
opts = append(opts, minio.WithSecret(creds.secret))
871886
}
872-
if tlsConfig != nil {
873-
opts = append(opts, minio.WithTLSConfig(tlsConfig))
887+
if creds.tlsConfig != nil {
888+
opts = append(opts, minio.WithTLSConfig(creds.tlsConfig))
874889
}
875-
if proxyURL != nil {
876-
opts = append(opts, minio.WithProxyURL(proxyURL))
890+
if creds.proxyURL != nil {
891+
opts = append(opts, minio.WithProxyURL(creds.proxyURL))
877892
}
878-
if stsSecret != nil {
879-
opts = append(opts, minio.WithSTSSecret(stsSecret))
893+
if creds.stsSecret != nil {
894+
opts = append(opts, minio.WithSTSSecret(creds.stsSecret))
880895
}
881-
if stsTLSConfig != nil {
882-
opts = append(opts, minio.WithSTSTLSConfig(stsTLSConfig))
896+
if creds.stsTLSConfig != nil {
897+
opts = append(opts, minio.WithSTSTLSConfig(creds.stsTLSConfig))
883898
}
884899
return minio.NewClient(obj, opts...)
885900
}

0 commit comments

Comments
 (0)