@@ -25,6 +25,7 @@ import (
2525 corev1 "k8s.io/api/core/v1"
2626 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2727 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
28+ clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
2829 "sigs.k8s.io/controller-runtime/pkg/client/fake"
2930
3031 operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
@@ -40,6 +41,7 @@ func TestPreflightChecks(t *testing.T) {
4041 name string
4142 providers []operatorv1.GenericProvider
4243 providerList genericprovider.GenericProviderList
44+ mapper ProviderTypeMapper
4345 expectedCondition clusterv1.Condition
4446 expectedError bool
4547 }{
@@ -147,6 +149,53 @@ func TestPreflightChecks(t *testing.T) {
147149 },
148150 providerList : & operatorv1.CoreProviderList {},
149151 },
152+ {
153+ name : "two core providers were created, but accepted due to custom mapper logic" ,
154+ providers : []operatorv1.GenericProvider {
155+ & operatorv1.CoreProvider {
156+ ObjectMeta : metav1.ObjectMeta {
157+ Name : "cluster-api" ,
158+ Namespace : namespaceName1 ,
159+ },
160+ TypeMeta : metav1.TypeMeta {
161+ Kind : "CoreProvider" ,
162+ APIVersion : "operator.cluster.x-k8s.io/v1alpha1" ,
163+ },
164+ Spec : operatorv1.CoreProviderSpec {
165+ ProviderSpec : operatorv1.ProviderSpec {
166+ Version : "v1.0.0" ,
167+ },
168+ },
169+ },
170+ & operatorv1.CoreProvider {
171+ ObjectMeta : metav1.ObjectMeta {
172+ Name : "core-3" ,
173+ Namespace : namespaceName1 ,
174+ },
175+ TypeMeta : metav1.TypeMeta {
176+ Kind : "CoreProvider" ,
177+ APIVersion : "operator.cluster.x-k8s.io/v1alpha1" ,
178+ },
179+ Spec : operatorv1.CoreProviderSpec {
180+ ProviderSpec : operatorv1.ProviderSpec {
181+ Version : "v1.0.0" ,
182+ },
183+ },
184+ },
185+ },
186+ expectedCondition : clusterv1.Condition {
187+ Type : operatorv1 .PreflightCheckCondition ,
188+ Status : corev1 .ConditionTrue ,
189+ },
190+ mapper : func (provider operatorv1.GenericProvider ) clusterctlv1.ProviderType {
191+ if provider .GetName () == "core-3" {
192+ return clusterctlv1 .ProviderTypeUnknown
193+ }
194+
195+ return clusterctlv1 .CoreProviderType
196+ },
197+ providerList : & operatorv1.CoreProviderList {},
198+ },
150199 {
151200 name : "two core providers in two different namespaces were created, preflight check failed" ,
152201 expectedError : true ,
@@ -473,6 +522,74 @@ func TestPreflightChecks(t *testing.T) {
473522 },
474523 providerList : & operatorv1.InfrastructureProviderList {},
475524 },
525+ {
526+ name : "two similarly named infra provider exist in different namespaces, but custom mapper returns differentiats types, preflight check passed" ,
527+ providers : []operatorv1.GenericProvider {
528+ & operatorv1.CoreProvider {
529+ ObjectMeta : metav1.ObjectMeta {
530+ Name : "cluster-api" ,
531+ Namespace : namespaceName1 ,
532+ },
533+ TypeMeta : metav1.TypeMeta {
534+ Kind : "CoreProvider" ,
535+ APIVersion : "operator.cluster.x-k8s.io/v1alpha1" ,
536+ },
537+ Spec : operatorv1.CoreProviderSpec {
538+ ProviderSpec : operatorv1.ProviderSpec {
539+ FetchConfig : & operatorv1.FetchConfiguration {
540+ URL : "https://example.com" ,
541+ },
542+ },
543+ },
544+ },
545+ & operatorv1.InfrastructureProvider {
546+ ObjectMeta : metav1.ObjectMeta {
547+ Name : "aws" ,
548+ Namespace : namespaceName1 ,
549+ },
550+ TypeMeta : metav1.TypeMeta {
551+ Kind : "InfrastructureProvider" ,
552+ APIVersion : "operator.cluster.x-k8s.io/v1alpha1" ,
553+ },
554+ Spec : operatorv1.InfrastructureProviderSpec {
555+ ProviderSpec : operatorv1.ProviderSpec {
556+ Version : "v1.0.0" ,
557+ },
558+ },
559+ },
560+ & operatorv1.InfrastructureProvider {
561+ ObjectMeta : metav1.ObjectMeta {
562+ Name : "aws" ,
563+ Namespace : namespaceName2 ,
564+ },
565+ TypeMeta : metav1.TypeMeta {
566+ Kind : "InfrastructureProvider" ,
567+ APIVersion : "operator.cluster.x-k8s.io/v1alpha1" ,
568+ },
569+ Spec : operatorv1.InfrastructureProviderSpec {
570+ ProviderSpec : operatorv1.ProviderSpec {
571+ Version : "v1.0.0" ,
572+ },
573+ },
574+ },
575+ },
576+ mapper : func (provider operatorv1.GenericProvider ) clusterctlv1.ProviderType {
577+ if provider .GetNamespace () == namespaceName2 {
578+ return clusterctlv1 .ProviderTypeUnknown
579+ }
580+
581+ if provider .GetName () == "cluster-api" {
582+ return clusterctlv1 .CoreProviderType
583+ }
584+
585+ return clusterctlv1 .InfrastructureProviderType
586+ },
587+ expectedCondition : clusterv1.Condition {
588+ Type : operatorv1 .PreflightCheckCondition ,
589+ Status : corev1 .ConditionTrue ,
590+ },
591+ providerList : & operatorv1.InfrastructureProviderList {},
592+ },
476593 {
477594 name : "wrong version, preflight check failed" ,
478595 expectedError : true ,
@@ -667,7 +784,12 @@ func TestPreflightChecks(t *testing.T) {
667784 Client : fakeClient ,
668785 }
669786
670- err := preflightChecks (context .Background (), fakeClient , tc .providers [0 ], tc .providerList , util .ClusterctlProviderType , r .listProviders )
787+ mapper := tc .mapper
788+ if mapper == nil {
789+ mapper = util .ClusterctlProviderType
790+ }
791+
792+ err := preflightChecks (context .Background (), fakeClient , tc .providers [0 ], tc .providerList , mapper , r .listProviders )
671793 if tc .expectedError {
672794 gs .Expect (err ).To (HaveOccurred ())
673795 } else {
0 commit comments