From cb5296ceff26ff98fe555c9b294b4f910698a140 Mon Sep 17 00:00:00 2001 From: Predrag Knezevic Date: Tue, 2 Apr 2024 17:47:58 +0200 Subject: [PATCH] use clients.ClientForProvider in connector Connect function --- internal/controller/object/object.go | 102 +----- internal/controller/object/object_test.go | 394 +--------------------- 2 files changed, 24 insertions(+), 472 deletions(-) diff --git a/internal/controller/object/object.go b/internal/controller/object/object.go index 1347ac5b..b1fd63f6 100644 --- a/internal/controller/object/object.go +++ b/internal/controller/object/object.go @@ -32,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" @@ -50,26 +49,17 @@ import ( "github.com/crossplane-contrib/provider-kubernetes/apis/object/v1alpha2" apisv1alpha1 "github.com/crossplane-contrib/provider-kubernetes/apis/v1alpha1" "github.com/crossplane-contrib/provider-kubernetes/internal/clients" - "github.com/crossplane-contrib/provider-kubernetes/internal/clients/azure" - "github.com/crossplane-contrib/provider-kubernetes/internal/clients/gke" ) const ( errTrackPCUsage = "cannot track ProviderConfig usage" - errGetPC = "cannot get ProviderConfig" - errGetCreds = "cannot get credentials" errGetObject = "cannot get object" errCreateObject = "cannot create object" errApplyObject = "cannot apply object" errDeleteObject = "cannot delete object" - errNotKubernetesObject = "managed resource is not an Object custom resource" - errNewKubernetesClient = "cannot create new Kubernetes client" - errFailedToCreateRestConfig = "cannot create new REST config using provider secret" - errFailedToExtractGoogleCredentials = "cannot extract Google Application Credentials" - errFailedToInjectGoogleCredentials = "cannot wrap REST client with Google Application Credentials" - errFailedToExtractAzureCredentials = "failed to extract Azure Application Credentials" - errFailedToInjectAzureCredentials = "failed to wrap REST client with Azure Application Credentials" + errNotKubernetesObject = "managed resource is not an Object custom resource" + errNewKubernetesClient = "cannot create new Kubernetes client" errGetLastApplied = "cannot get last applied" errUnmarshalTemplate = "cannot unmarshal template" @@ -100,17 +90,11 @@ func Setup(mgr ctrl.Manager, o controller.Options, sanitizeSecrets bool, pollJit reconcilerOptions := []managed.ReconcilerOption{ managed.WithExternalConnecter(&connector{ - logger: o.Logger, - sanitizeSecrets: sanitizeSecrets, - kube: mgr.GetClient(), - usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &apisv1alpha1.ProviderConfigUsage{}), - kcfgExtractorFn: resource.CommonCredentialExtractor, - gcpExtractorFn: resource.CommonCredentialExtractor, - gcpInjectorFn: gke.WrapRESTConfig, - azureExtractorFn: resource.CommonCredentialExtractor, - azureInjectorFn: azure.WrapRESTConfig, - newRESTConfigFn: clients.NewRESTConfig, - newKubeClientFn: clients.NewKubeClient, + logger: o.Logger, + sanitizeSecrets: sanitizeSecrets, + kube: mgr.GetClient(), + usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &apisv1alpha1.ProviderConfigUsage{}), + clientForProviderFn: clients.ClientForProvider, }), managed.WithFinalizer(&objFinalizer{client: mgr.GetClient()}), managed.WithPollInterval(o.PollInterval), @@ -150,13 +134,7 @@ type connector struct { logger logging.Logger sanitizeSecrets bool - kcfgExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) - gcpExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) - gcpInjectorFn func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error - azureExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) - azureInjectorFn func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error - newRESTConfigFn func(kubeconfig []byte) (*rest.Config, error) - newKubeClientFn func(config *rest.Config) (client.Client, error) + clientForProviderFn func(ctx context.Context, inclusterClient client.Client, providerConfigName string) (client.Client, error) } func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.ExternalClient, error) { //nolint:gocyclo @@ -172,70 +150,8 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E return nil, errors.Wrap(err, errTrackPCUsage) } - pc := &apisv1alpha1.ProviderConfig{} - if err := c.kube.Get(ctx, types.NamespacedName{Name: cr.GetProviderConfigReference().Name}, pc); err != nil { - return nil, errors.Wrap(err, errGetPC) - } - - var rc *rest.Config - var err error - - switch cd := pc.Spec.Credentials; cd.Source { //nolint:exhaustive - case xpv1.CredentialsSourceInjectedIdentity: - rc, err = rest.InClusterConfig() - if err != nil { - return nil, errors.Wrap(err, errFailedToCreateRestConfig) - } - default: - kc, err := c.kcfgExtractorFn(ctx, cd.Source, c.kube, cd.CommonCredentialSelectors) - if err != nil { - return nil, errors.Wrap(err, errGetCreds) - } - - if rc, err = c.newRESTConfigFn(kc); err != nil { - return nil, errors.Wrap(err, errFailedToCreateRestConfig) - } - } - - if id := pc.Spec.Identity; id != nil { - switch id.Type { - case apisv1alpha1.IdentityTypeGoogleApplicationCredentials: - switch id.Source { //nolint:exhaustive - case xpv1.CredentialsSourceInjectedIdentity: - if err := c.gcpInjectorFn(ctx, rc, nil, gke.DefaultScopes...); err != nil { - return nil, errors.Wrap(err, errFailedToInjectGoogleCredentials) - } - default: - creds, err := c.gcpExtractorFn(ctx, id.Source, c.kube, id.CommonCredentialSelectors) - if err != nil { - return nil, errors.Wrap(err, errFailedToExtractGoogleCredentials) - } - - if err := c.gcpInjectorFn(ctx, rc, creds, gke.DefaultScopes...); err != nil { - return nil, errors.Wrap(err, errFailedToInjectGoogleCredentials) - } - } - case apisv1alpha1.IdentityTypeAzureServicePrincipalCredentials: - switch id.Source { //nolint:exhaustive - case xpv1.CredentialsSourceInjectedIdentity: - return nil, errors.Errorf("%s is not supported as identity source for identity type %s", - xpv1.CredentialsSourceInjectedIdentity, apisv1alpha1.IdentityTypeAzureServicePrincipalCredentials) - default: - creds, err := c.azureExtractorFn(ctx, id.Source, c.kube, id.CommonCredentialSelectors) - if err != nil { - return nil, errors.Wrap(err, errFailedToExtractAzureCredentials) - } - - if err := c.azureInjectorFn(ctx, rc, creds); err != nil { - return nil, errors.Wrap(err, errFailedToInjectAzureCredentials) - } - } - default: - return nil, errors.Errorf("unknown identity type: %s", id.Type) - } - } + k, err := c.clientForProviderFn(ctx, c.kube, cr.GetProviderConfigReference().Name) - k, err := c.newKubeClientFn(rc) if err != nil { return nil, errors.Wrap(err, errNewKubernetesClient) } diff --git a/internal/controller/object/object_test.go b/internal/controller/object/object_test.go index 9b1e76e2..7e151bcd 100644 --- a/internal/controller/object/object_test.go +++ b/internal/controller/object/object_test.go @@ -32,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/rest" "k8s.io/utils/ptr" "sigs.k8s.io/controller-runtime/pkg/client" @@ -47,12 +46,7 @@ import ( ) const ( - providerName = "kubernetes-test" - providerSecretName = "kubernetes-test-secret" - providerSecretNamespace = "kubernetes-test-secret-namespace" - - providerSecretKey = "kubeconfig" - providerSecretData = "somethingsecret" + providerName = "kubernetes-test" testObjectName = "test-object" testNamespace = "test-namespace" @@ -208,11 +202,6 @@ func referenceObjectWithFinalizer(val interface{}) *unstructured.Unstructured { } func Test_connector_Connect(t *testing.T) { - secret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Namespace: providerSecretNamespace, Name: providerSecretName}, - Data: map[string][]byte{providerSecretKey: []byte(providerSecretData)}, - } - providerConfig := kubernetesv1alpha1.ProviderConfig{ ObjectMeta: metav1.ObjectMeta{Name: providerName}, Spec: kubernetesv1alpha1.ProviderConfigSpec{ @@ -248,16 +237,10 @@ func Test_connector_Connect(t *testing.T) { providerConfigUnknownIdentitySource.Spec.Identity.Type = "foo" type args struct { - client client.Client - kcfgExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) - gcpExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) - gcpInjectorFn func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error - azureExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) - azureInjectorFn func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error - newRESTConfigFn func(kubeconfig []byte) (*rest.Config, error) - newKubeClientFn func(config *rest.Config) (client.Client, error) - usage resource.Tracker - mg resource.Managed + client client.Client + clientForProvider func(ctx context.Context, inclusterClient client.Client, providerConfigName string) (client.Client, error) + usage resource.Tracker + mg resource.Managed } type want struct { err error @@ -283,322 +266,21 @@ func Test_connector_Connect(t *testing.T) { err: errors.Wrap(errBoom, errTrackPCUsage), }, }, - "FailedToGetProvider": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfig - return errBoom - } - return nil - }, - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errGetPC), - }, - }, - "FailedToExtractKubeconfig": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfig - return nil - } - if key.Name == providerSecretName && key.Namespace == providerSecretNamespace { - *obj.(*corev1.Secret) = secret - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errGetCreds), - }, - }, - "FailedToCreateRESTConfig": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfig - return nil - } - if key.Name == providerSecretName && key.Namespace == providerSecretNamespace { - *obj.(*corev1.Secret) = secret - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errFailedToCreateRestConfig), - }, - }, - "FailedToExtractGoogleCredentials": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfig - return nil - } - if key.Name == providerSecretName && key.Namespace == providerSecretNamespace { - *obj.(*corev1.Secret) = secret - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - gcpExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errFailedToExtractGoogleCredentials), - }, - }, - "FailedToInjectGoogleCredentials": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfig - return nil - } - if key.Name == providerSecretName && key.Namespace == providerSecretNamespace { - *obj.(*corev1.Secret) = secret - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - gcpExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - gcpInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errFailedToInjectGoogleCredentials), - }, - }, - "FailedToInjectGoogleCredentialsWithInjectedIdentitySource": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfigGoogleInjectedIdentity - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - gcpExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - gcpInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errFailedToInjectGoogleCredentials), - }, - }, - "FailedToExtractAzureCredentials": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = *providerConfigAzure - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - azureExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errFailedToExtractAzureCredentials), - }, - }, - "FailedToInjectAzureCredentials": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = *providerConfigAzure - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - azureExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - azureInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Wrap(errBoom, errFailedToInjectAzureCredentials), - }, - }, - "AzureCredentialsInjectedIdentitySourceNotSupported": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfigAzureInjectedIdentity - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - azureExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - azureInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return errBoom - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: errors.Errorf("%s is not supported as identity source for identity type %s", - xpv1.CredentialsSourceInjectedIdentity, kubernetesv1alpha1.IdentityTypeAzureServicePrincipalCredentials), - }, - }, - "FailedToInjectUnknownIdentityType": { + "Success": { args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfigUnknownIdentitySource - return nil - } - return errBoom - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return nil, nil - }, - azureExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - azureInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return errBoom + clientForProvider: func(ctx context.Context, inclusterClient client.Client, providerConfigName string) (client.Client, error) { + return &test.MockClient{}, nil }, usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), mg: kubernetesObject(), }, want: want{ - err: errors.Errorf("unknown identity type: %s", "foo"), + err: nil, }, }, - "FailedToCreateNewKubernetesClient": { + "ErrorGettingClientForProvider": { args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - if key.Name == providerName { - *obj.(*kubernetesv1alpha1.ProviderConfig) = providerConfig - return nil - } - if key.Name == providerSecretName && key.Namespace == providerSecretNamespace { - *obj.(*corev1.Secret) = secret - return nil - } - return errBoom - }, - MockStatusUpdate: func(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error { - return nil - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return &rest.Config{}, nil - }, - - gcpExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - gcpInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return nil - }, - newKubeClientFn: func(config *rest.Config) (c client.Client, err error) { + clientForProvider: func(ctx context.Context, inclusterClient client.Client, providerConfigName string) (client.Client, error) { return nil, errBoom }, usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), @@ -608,60 +290,14 @@ func Test_connector_Connect(t *testing.T) { err: errors.Wrap(errBoom, errNewKubernetesClient), }, }, - "Success": { - args: args{ - client: &test.MockClient{ - MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { - switch t := obj.(type) { - case *kubernetesv1alpha1.ProviderConfig: - *t = providerConfig - case *corev1.Secret: - *t = secret - default: - return errBoom - } - return nil - }, - MockStatusUpdate: func(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error { - return nil - }, - }, - kcfgExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - newRESTConfigFn: func(kubeconfig []byte) (config *rest.Config, err error) { - return &rest.Config{}, nil - }, - gcpExtractorFn: func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) { - return nil, nil - }, - gcpInjectorFn: func(ctx context.Context, rc *rest.Config, credentials []byte, scopes ...string) error { - return nil - }, - newKubeClientFn: func(config *rest.Config) (c client.Client, err error) { - return &test.MockClient{}, nil - }, - usage: resource.TrackerFn(func(ctx context.Context, mg resource.Managed) error { return nil }), - mg: kubernetesObject(), - }, - want: want{ - err: nil, - }, - }, } for name, tc := range cases { t.Run(name, func(t *testing.T) { c := &connector{ - logger: logging.NewNopLogger(), - kube: tc.args.client, - kcfgExtractorFn: tc.args.kcfgExtractorFn, - gcpExtractorFn: tc.args.gcpExtractorFn, - gcpInjectorFn: tc.args.gcpInjectorFn, - azureExtractorFn: tc.args.azureExtractorFn, - azureInjectorFn: tc.args.azureInjectorFn, - newRESTConfigFn: tc.args.newRESTConfigFn, - newKubeClientFn: tc.args.newKubeClientFn, - usage: tc.usage, + logger: logging.NewNopLogger(), + kube: tc.args.client, + clientForProviderFn: tc.args.clientForProvider, + usage: tc.usage, } _, gotErr := c.Connect(context.Background(), tc.args.mg) if diff := cmp.Diff(tc.want.err, gotErr, test.EquateErrors()); diff != "" {