@@ -84,32 +84,9 @@ func GetClientOpts(ctx context.Context, c client.Client, obj *helmv1.HelmReposit
8484
8585 if ociRepo {
8686 if obj .Spec .ServiceAccountName != "" {
87- serviceAccount := corev1.ServiceAccount {}
88- // Lookup service account
89- if err := c .Get (ctx , types.NamespacedName {
90- Namespace : obj .GetNamespace (),
91- Name : obj .Spec .ServiceAccountName ,
92- }, & serviceAccount ); err != nil {
93- return nil , fmt .Errorf ("failed to get serviceaccout: %s" , err )
94- }
95-
96- if len (serviceAccount .ImagePullSecrets ) > 0 {
97- imagePullSecrets := make ([]corev1.Secret , len (serviceAccount .ImagePullSecrets ))
98- for i , ips := range serviceAccount .ImagePullSecrets {
99- var saAuthSecret corev1.Secret
100- if err := c .Get (ctx , types.NamespacedName {
101- Namespace : obj .GetNamespace (),
102- Name : ips .Name ,
103- }, & saAuthSecret ); err != nil {
104- return nil , fmt .Errorf ("failed to get image pull secret '%s' for serviceaccount '%s': %w" ,
105- ips .Name , obj .Spec .ServiceAccountName , err )
106- }
107- imagePullSecrets [i ] = saAuthSecret
108- }
109- hrOpts .Keychain , err = k8schain .NewFromPullSecrets (ctx , imagePullSecrets )
110- if err != nil {
111- return nil , fmt .Errorf ("error constructing keychain from image pull secrets: %w" , err )
112- }
87+ hrOpts .Keychain , err = getKeychainFromSAImagePullSecrets (ctx , c , obj .GetNamespace (), obj .Spec .ServiceAccountName )
88+ if err != nil {
89+ return nil , fmt .Errorf ("failed to get keychain from service account: %w" , err )
11390 }
11491 }
11592 }
@@ -234,3 +211,35 @@ func TLSClientConfigFromSecret(secret corev1.Secret, repositoryUrl string) (*tls
234211
235212 return tlsConf , nil
236213}
214+
215+ // getKeychainFromSAImagePullSecrets returns an authn.Keychain gotten from the image pull secrets attached to a
216+ // service account.
217+ func getKeychainFromSAImagePullSecrets (ctx context.Context , c client.Client , ns , saName string ) (authn.Keychain , error ) {
218+ serviceAccount := corev1.ServiceAccount {}
219+ // Lookup service account
220+ if err := c .Get (ctx , types.NamespacedName {
221+ Namespace : ns ,
222+ Name : saName ,
223+ }, & serviceAccount ); err != nil {
224+ return nil , fmt .Errorf ("failed to get serviceaccout: %s" , err )
225+ }
226+
227+ if len (serviceAccount .ImagePullSecrets ) > 0 {
228+ imagePullSecrets := make ([]corev1.Secret , len (serviceAccount .ImagePullSecrets ))
229+ for i , ips := range serviceAccount .ImagePullSecrets {
230+ var saAuthSecret corev1.Secret
231+ if err := c .Get (ctx , types.NamespacedName {
232+ Namespace : ns ,
233+ Name : ips .Name ,
234+ }, & saAuthSecret ); err != nil {
235+ return nil , fmt .Errorf ("failed to get image pull secret '%s' for serviceaccount '%s': %w" ,
236+ ips .Name , saName , err )
237+ }
238+ imagePullSecrets [i ] = saAuthSecret
239+ }
240+
241+ return k8schain .NewFromPullSecrets (ctx , imagePullSecrets )
242+ }
243+
244+ return nil , nil
245+ }
0 commit comments