Procházet zdrojové kódy

refactor setAuth method

rodrmartinez před 4 roky
rodič
revize
da858878d8
1 změnil soubory, kde provedl 38 přidání a 40 odebrání
  1. 38 40
      pkg/provider/kubernetes/kubernetes.go

+ 38 - 40
pkg/provider/kubernetes/kubernetes.go

@@ -19,11 +19,11 @@ import (
 	"fmt"
 
 	esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
+	esmeta "github.com/external-secrets/external-secrets/apis/meta/v1"
 	"github.com/external-secrets/external-secrets/pkg/provider"
 	"github.com/external-secrets/external-secrets/pkg/provider/schema"
 	"github.com/external-secrets/external-secrets/pkg/utils"
 	corev1 "k8s.io/api/core/v1"
-	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
 	kclient "sigs.k8s.io/controller-runtime/pkg/client"
@@ -36,20 +36,13 @@ const (
 	errKubernetesCredSecretName            = "kubernetes credentials are empty"
 	errInvalidClusterStoreMissingNamespace = "invalid clusterStore missing Cert namespace"
 	errFetchCredentialsSecret              = "could not fetch Credentials secret: %w"
-	errMissingCredentials                  = "missing Credentials"
+	errMissingCredentials                  = "missing Credentials: %v"
 	errUninitalizedKubernetesProvider      = "provider kubernetes is not initialized"
 	errJSONSecretUnmarshal                 = "unable to unmarshal secret: %w"
 )
 
 type KubernetesClient interface {
-	Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Secret, error)
-	// List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error
-	// Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error
-	// Delete(ctx context.Context, obj client.Object, opts ...client.DeleteOption) error
-	// Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.PatchOption) error
-	// DeleteAllOf(ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption) error
-	// Status() client.StatusWriter
-	// Update(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error
+	Get(ctx context.Context, name string, opts metav1.GetOptions) (*corev1.Secret, error)
 }
 
 // ProviderKubernetes is a provider for Kubernetes.
@@ -165,47 +158,52 @@ func (k *ProviderKubernetes) GetSecretMap(ctx context.Context, ref esv1alpha1.Ex
 }
 
 func (k *BaseClient) setAuth(ctx context.Context) error {
-	credentialsSecret := &corev1.Secret{}
-	credentialsSecretName := k.store.Auth.SecretRef.Certificate.Name
-	if credentialsSecretName == "" {
-		return fmt.Errorf(errKubernetesCredSecretName)
+	var err error
+	k.Certificate, err = k.helper(ctx, k.store.Auth.SecretRef.Certificate, "cert")
+	if err != nil {
+		return err
+	}
+	k.Key, err = k.helper(ctx, k.store.Auth.SecretRef.Key, "key")
+	if err != nil {
+		return err
+	}
+	k.CA, err = k.helper(ctx, k.store.Auth.SecretRef.CA, "ca")
+	if err != nil {
+		return err
+	}
+	k.BearerToken, err = k.helper(ctx, k.store.Auth.SecretRef.BearerToken, "bearerToken")
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func (k *BaseClient) helper(ctx context.Context, key esmeta.SecretKeySelector, component string) ([]byte, error) {
+	keySecret := &corev1.Secret{}
+	keySecretName := key.Name
+	if keySecretName == "" {
+		return nil, fmt.Errorf(errKubernetesCredSecretName)
 	}
 	objectKey := types.NamespacedName{
-		Name:      credentialsSecretName,
+		Name:      keySecretName,
 		Namespace: k.namespace,
 	}
 	// only ClusterStore is allowed to set namespace (and then it's required)
 	if k.storeKind == esv1alpha1.ClusterSecretStoreKind {
-		if k.store.Auth.SecretRef.Certificate.Namespace == nil {
-			return fmt.Errorf(errInvalidClusterStoreMissingNamespace)
+		if key.Namespace == nil {
+			return nil, fmt.Errorf(errInvalidClusterStoreMissingNamespace)
 		}
-		objectKey.Namespace = *k.store.Auth.SecretRef.Certificate.Namespace
+		objectKey.Namespace = *key.Namespace
 	}
 
-	err := k.kube.Get(ctx, objectKey, credentialsSecret)
+	err := k.kube.Get(ctx, objectKey, keySecret)
 	if err != nil {
-		return fmt.Errorf(errFetchCredentialsSecret, err)
-	}
-
-	k.Certificate = credentialsSecret.Data[k.store.Auth.SecretRef.Certificate.Key]
-	if (k.Certificate == nil) || (len(k.Certificate) == 0) {
-		return fmt.Errorf(errMissingCredentials)
-	}
-
-	k.Key = credentialsSecret.Data[k.store.Auth.SecretRef.Key.Key]
-	if (k.Key == nil) || (len(k.Key) == 0) {
-		return fmt.Errorf(errMissingCredentials)
+		return nil, fmt.Errorf(errFetchCredentialsSecret, err)
 	}
 
-	k.CA = credentialsSecret.Data[k.store.Auth.SecretRef.CA.Key]
-	if (k.CA == nil) || (len(k.CA) == 0) {
-		return fmt.Errorf(errMissingCredentials)
+	check := keySecret.Data[key.Key]
+	if (check == nil) || (len(check) == 0) {
+		return nil, fmt.Errorf(errMissingCredentials, component)
 	}
-
-	k.BearerToken = credentialsSecret.Data[k.store.Auth.SecretRef.BearerToken.Key]
-	if (k.BearerToken == nil) || (len(k.BearerToken) == 0) {
-		return fmt.Errorf(errMissingCredentials)
-	}
-
-	return nil
+	return check, nil
 }