Skip to content

Commit cd5dee8

Browse files
committed
Migrate OCIRepository controller to runtime/secrets
Migrates the OCIRepository controller's authentication handling from internal implementations to the unified runtime/secrets API package. The migration moves TLS configuration from internal/tls to runtime/secrets.TLSConfigFromSecretRef and ServiceAccount processing to secrets.PullSecretsFromServiceAccountRef, providing consistent authentication handling across all source-controller components. This change eliminates duplicate secret fetching logic and aligns the OCIRepository controller with the standardized authentication patterns used by other controllers in the GitOps Toolkit. Signed-off-by: cappyzawa <[email protected]>
1 parent 173a1cc commit cd5dee8

File tree

2 files changed

+19
-48
lines changed

2 files changed

+19
-48
lines changed

internal/controller/ocirepository_controller.go

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ import (
4343
corev1 "k8s.io/api/core/v1"
4444
"k8s.io/apimachinery/pkg/runtime"
4545
"k8s.io/apimachinery/pkg/types"
46-
"k8s.io/apimachinery/pkg/util/sets"
4746
kuberecorder "k8s.io/client-go/tools/record"
4847
"k8s.io/client-go/util/workqueue"
4948
"k8s.io/utils/ptr"
@@ -60,6 +59,7 @@ import (
6059
"github.com/fluxcd/pkg/runtime/patch"
6160
"github.com/fluxcd/pkg/runtime/predicates"
6261
rreconcile "github.com/fluxcd/pkg/runtime/reconcile"
62+
"github.com/fluxcd/pkg/runtime/secrets"
6363
"github.com/fluxcd/pkg/sourceignore"
6464
"github.com/fluxcd/pkg/tar"
6565
"github.com/fluxcd/pkg/version"
@@ -77,7 +77,6 @@ import (
7777
"github.com/fluxcd/source-controller/internal/oci/notation"
7878
sreconcile "github.com/fluxcd/source-controller/internal/reconcile"
7979
"github.com/fluxcd/source-controller/internal/reconcile/summarize"
80-
"github.com/fluxcd/source-controller/internal/tls"
8180
"github.com/fluxcd/source-controller/internal/util"
8281
)
8382

@@ -920,44 +919,36 @@ func (r *OCIRepositoryReconciler) getTagBySemver(repo name.Repository, exp strin
920919
// configuration. If no auth is specified a default keychain with
921920
// anonymous access is returned
922921
func (r *OCIRepositoryReconciler) keychain(ctx context.Context, obj *sourcev1.OCIRepository) (authn.Keychain, error) {
923-
pullSecretNames := sets.NewString()
922+
var imagePullSecrets []corev1.Secret
924923

925924
// lookup auth secret
926925
if obj.Spec.SecretRef != nil {
927-
pullSecretNames.Insert(obj.Spec.SecretRef.Name)
926+
var imagePullSecret corev1.Secret
927+
secretRef := types.NamespacedName{Namespace: obj.Namespace, Name: obj.Spec.SecretRef.Name}
928+
err := r.Get(ctx, secretRef, &imagePullSecret)
929+
if err != nil {
930+
r.eventLogf(ctx, obj, eventv1.EventTypeTrace, sourcev1.AuthenticationFailedReason,
931+
"auth secret '%s' not found", obj.Spec.SecretRef.Name)
932+
return nil, err
933+
}
934+
imagePullSecrets = append(imagePullSecrets, imagePullSecret)
928935
}
929936

930937
// lookup service account
931938
if obj.Spec.ServiceAccountName != "" {
932-
serviceAccountName := obj.Spec.ServiceAccountName
933-
serviceAccount := corev1.ServiceAccount{}
934-
err := r.Get(ctx, types.NamespacedName{Namespace: obj.Namespace, Name: serviceAccountName}, &serviceAccount)
939+
saRef := types.NamespacedName{Namespace: obj.Namespace, Name: obj.Spec.ServiceAccountName}
940+
saSecrets, err := secrets.PullSecretsFromServiceAccountRef(ctx, r.Client, saRef)
935941
if err != nil {
936942
return nil, err
937943
}
938-
for _, ips := range serviceAccount.ImagePullSecrets {
939-
pullSecretNames.Insert(ips.Name)
940-
}
944+
imagePullSecrets = append(imagePullSecrets, saSecrets...)
941945
}
942946

943947
// if no pullsecrets available return an AnonymousKeychain
944-
if len(pullSecretNames) == 0 {
948+
if len(imagePullSecrets) == 0 {
945949
return soci.Anonymous{}, nil
946950
}
947951

948-
// lookup image pull secrets
949-
imagePullSecrets := make([]corev1.Secret, len(pullSecretNames))
950-
for i, imagePullSecretName := range pullSecretNames.List() {
951-
imagePullSecret := corev1.Secret{}
952-
err := r.Get(ctx, types.NamespacedName{Namespace: obj.Namespace, Name: imagePullSecretName}, &imagePullSecret)
953-
if err != nil {
954-
r.eventLogf(ctx, obj, eventv1.EventTypeTrace, sourcev1.AuthenticationFailedReason,
955-
"auth secret '%s' not found", imagePullSecretName)
956-
return nil, err
957-
}
958-
imagePullSecrets[i] = imagePullSecret
959-
}
960-
961952
return k8schain.NewFromPullSecrets(ctx, imagePullSecrets)
962953
}
963954

@@ -995,31 +986,11 @@ func (r *OCIRepositoryReconciler) getTLSConfig(ctx context.Context, obj *sourcev
995986
return nil, nil
996987
}
997988

998-
certSecretName := types.NamespacedName{
989+
secretName := types.NamespacedName{
999990
Namespace: obj.Namespace,
1000991
Name: obj.Spec.CertSecretRef.Name,
1001992
}
1002-
var certSecret corev1.Secret
1003-
if err := r.Get(ctx, certSecretName, &certSecret); err != nil {
1004-
return nil, err
1005-
}
1006-
1007-
tlsConfig, _, err := tls.KubeTLSClientConfigFromSecret(certSecret, "")
1008-
if err != nil {
1009-
return nil, err
1010-
}
1011-
if tlsConfig == nil {
1012-
tlsConfig, _, err = tls.TLSClientConfigFromSecret(certSecret, "")
1013-
if err != nil {
1014-
return nil, err
1015-
}
1016-
if tlsConfig != nil {
1017-
ctrl.LoggerFrom(ctx).
1018-
Info("warning: specifying TLS auth data via `certFile`/`keyFile`/`caFile` is deprecated, please use `tls.crt`/`tls.key`/`ca.crt` instead")
1019-
}
1020-
}
1021-
1022-
return tlsConfig, nil
993+
return secrets.TLSConfigFromSecretRef(ctx, r.Client, secretName)
1023994
}
1024995

1025996
// getProxyURL gets the proxy configuration for the transport based on the

internal/controller/ocirepository_controller_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) {
644644
},
645645
},
646646
assertConditions: []metav1.Condition{
647-
*conditions.TrueCondition(sourcev1.FetchFailedCondition, sourcev1.AuthenticationFailedReason, "%s", "cannot append certificate into certificate pool: invalid CA certificate"),
647+
*conditions.TrueCondition(sourcev1.FetchFailedCondition, sourcev1.AuthenticationFailedReason, "%s", "failed to parse CA certificate"),
648648
},
649649
},
650650
{
@@ -913,7 +913,7 @@ func TestOCIRepository_CertSecret(t *testing.T) {
913913
},
914914
},
915915
expectreadyconition: false,
916-
expectedstatusmessage: "failed to generate transport for '<url>': tls: failed to find any PEM data in key input",
916+
expectedstatusmessage: "failed to generate transport for '<url>': failed to parse TLS certificate and key: tls: failed to find any PEM data in key input",
917917
},
918918
}
919919

0 commit comments

Comments
 (0)