@@ -30,11 +30,13 @@ import (
3030 corev1 "k8s.io/api/core/v1"
3131 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3232 "k8s.io/apimachinery/pkg/runtime"
33+ "k8s.io/apimachinery/pkg/types"
3334 ctrl "sigs.k8s.io/controller-runtime"
3435 "sigs.k8s.io/controller-runtime/pkg/client"
3536 "sigs.k8s.io/yaml"
3637
3738 sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
39+ "github.com/fluxcd/source-controller/internal/helm"
3840)
3941
4042// HelmRepositoryReconciler reconciles a HelmRepository object
@@ -113,9 +115,30 @@ func (r *HelmRepositoryReconciler) sync(repository sourcev1.HelmRepository) (sou
113115 u .RawPath = path .Join (u .RawPath , "index.yaml" )
114116 u .Path = path .Join (u .Path , "index.yaml" )
115117
116- indexURL := u .String ()
117- // TODO(hidde): add authentication config
118- res , err := c .Get (indexURL , getter .WithURL (repository .Spec .URL ))
118+ var clientOpts []getter.Option
119+ if repository .Spec .SecretRef != nil {
120+ name := types.NamespacedName {
121+ Namespace : repository .GetNamespace (),
122+ Name : repository .Spec .SecretRef .Name ,
123+ }
124+
125+ var secret corev1.Secret
126+ err := r .Client .Get (context .TODO (), name , & secret )
127+ if err != nil {
128+ err = fmt .Errorf ("auth secret error: %w" , err )
129+ return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .AuthenticationFailedReason , err .Error ()), err
130+ }
131+
132+ opts , cleanup , err := helm .ClientOptionsFromSecret (secret )
133+ if err != nil {
134+ err = fmt .Errorf ("auth options error: %w" , err )
135+ return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .AuthenticationFailedReason , err .Error ()), err
136+ }
137+ defer cleanup ()
138+ clientOpts = opts
139+ }
140+
141+ res , err := c .Get (u .String (), clientOpts ... )
119142 if err != nil {
120143 return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .IndexationFailedReason , err .Error ()), err
121144 }
@@ -162,14 +185,14 @@ func (r *HelmRepositoryReconciler) sync(repository sourcev1.HelmRepository) (sou
162185 }
163186
164187 // update index symlink
165- indexUrl , err := r .Storage .Symlink (artifact , "index.yaml" )
188+ indexURL , err := r .Storage .Symlink (artifact , "index.yaml" )
166189 if err != nil {
167190 err = fmt .Errorf ("storage error: %w" , err )
168191 return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .StorageOperationFailedReason , err .Error ()), err
169192 }
170193
171194 message := fmt .Sprintf ("Helm repository index is available at: %s" , artifact .Path )
172- return sourcev1 .HelmRepositoryReady (repository , artifact , indexUrl , sourcev1 .IndexationSucceededReason , message ), nil
195+ return sourcev1 .HelmRepositoryReady (repository , artifact , indexURL , sourcev1 .IndexationSucceededReason , message ), nil
173196}
174197
175198func (r * HelmRepositoryReconciler ) shouldResetStatus (repository sourcev1.HelmRepository ) (bool , sourcev1.HelmRepositoryStatus ) {
0 commit comments