@@ -18,6 +18,7 @@ package controller
18
18
19
19
import (
20
20
"context"
21
+ stdtls "crypto/tls"
21
22
"errors"
22
23
"fmt"
23
24
"os"
@@ -57,6 +58,7 @@ import (
57
58
"github.com/fluxcd/source-controller/internal/index"
58
59
sreconcile "github.com/fluxcd/source-controller/internal/reconcile"
59
60
"github.com/fluxcd/source-controller/internal/reconcile/summarize"
61
+ "github.com/fluxcd/source-controller/internal/tls"
60
62
"github.com/fluxcd/source-controller/pkg/azure"
61
63
"github.com/fluxcd/source-controller/pkg/gcp"
62
64
"github.com/fluxcd/source-controller/pkg/minio"
@@ -421,7 +423,7 @@ func (r *BucketReconciler) reconcileStorage(ctx context.Context, sp *patch.Seria
421
423
// the provider. If this fails, it records v1beta2.FetchFailedCondition=True on
422
424
// the object and returns early.
423
425
func (r * BucketReconciler ) reconcileSource (ctx context.Context , sp * patch.SerialPatcher , obj * bucketv1.Bucket , index * index.Digester , dir string ) (sreconcile.Result , error ) {
424
- secret , err := r .getBucketSecret (ctx , obj )
426
+ secret , err := r .getSecret (ctx , obj . Spec . SecretRef , obj . GetNamespace () )
425
427
if err != nil {
426
428
e := serror .NewGeneric (err , sourcev1 .AuthenticationFailedReason )
427
429
conditions .MarkTrue (obj , sourcev1 .FetchFailedCondition , e .Reason , e .Error ())
@@ -460,7 +462,13 @@ func (r *BucketReconciler) reconcileSource(ctx context.Context, sp *patch.Serial
460
462
conditions .MarkTrue (obj , sourcev1 .FetchFailedCondition , e .Reason , e .Error ())
461
463
return sreconcile .ResultEmpty , e
462
464
}
463
- if provider , err = minio .NewClient (obj , secret ); err != nil {
465
+ tlsConfig , err := r .getTLSConfig (ctx , obj )
466
+ if err != nil {
467
+ e := serror .NewGeneric (err , sourcev1 .AuthenticationFailedReason )
468
+ conditions .MarkTrue (obj , sourcev1 .FetchFailedCondition , e .Reason , e .Error ())
469
+ return sreconcile .ResultEmpty , e
470
+ }
471
+ if provider , err = minio .NewClient (obj , secret , tlsConfig ); err != nil {
464
472
e := serror .NewGeneric (err , "ClientError" )
465
473
conditions .MarkTrue (obj , sourcev1 .FetchFailedCondition , e .Reason , e .Error ())
466
474
return sreconcile .ResultEmpty , e
@@ -663,15 +671,15 @@ func (r *BucketReconciler) garbageCollect(ctx context.Context, obj *bucketv1.Buc
663
671
return nil
664
672
}
665
673
666
- // getBucketSecret attempts to fetch the Secret reference if specified on the
667
- // obj. It returns any client error.
668
- func ( r * BucketReconciler ) getBucketSecret ( ctx context. Context , obj * bucketv1. Bucket ) (* corev1.Secret , error ) {
669
- if obj . Spec . SecretRef == nil {
674
+ // getSecret attempts to fetch a Secret reference if specified. It returns any client error.
675
+ func ( r * BucketReconciler ) getSecret ( ctx context. Context , secretRef * meta. LocalObjectReference ,
676
+ namespace string ) (* corev1.Secret , error ) {
677
+ if secretRef == nil {
670
678
return nil , nil
671
679
}
672
680
secretName := types.NamespacedName {
673
- Namespace : obj . GetNamespace () ,
674
- Name : obj . Spec . SecretRef .Name ,
681
+ Namespace : namespace ,
682
+ Name : secretRef .Name ,
675
683
}
676
684
secret := & corev1.Secret {}
677
685
if err := r .Get (ctx , secretName , secret ); err != nil {
@@ -680,6 +688,21 @@ func (r *BucketReconciler) getBucketSecret(ctx context.Context, obj *bucketv1.Bu
680
688
return secret , nil
681
689
}
682
690
691
+ func (r * BucketReconciler ) getTLSConfig (ctx context.Context , obj * bucketv1.Bucket ) (* stdtls.Config , error ) {
692
+ certSecret , err := r .getSecret (ctx , obj .Spec .CertSecretRef , obj .GetNamespace ())
693
+ if err != nil || certSecret == nil {
694
+ return nil , err
695
+ }
696
+ tlsConfig , _ , err := tls .KubeTLSClientConfigFromSecret (* certSecret , obj .Spec .Endpoint )
697
+ if err != nil {
698
+ return nil , fmt .Errorf ("failed to create TLS config: %w" , err )
699
+ }
700
+ if tlsConfig == nil {
701
+ return nil , fmt .Errorf ("certificate secret does not contain any TLS configuration" )
702
+ }
703
+ return tlsConfig , nil
704
+ }
705
+
683
706
// eventLogf records events, and logs at the same time.
684
707
//
685
708
// This log is different from the debug log in the EventRecorder, in the sense
0 commit comments