@@ -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.
423432func (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