@@ -25,6 +25,7 @@ import (
25
25
corev1 "k8s.io/api/core/v1"
26
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
27
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
28
+ clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
28
29
"sigs.k8s.io/controller-runtime/pkg/client/fake"
29
30
30
31
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
@@ -40,6 +41,7 @@ func TestPreflightChecks(t *testing.T) {
40
41
name string
41
42
providers []operatorv1.GenericProvider
42
43
providerList genericprovider.GenericProviderList
44
+ mapper ProviderTypeMapper
43
45
expectedCondition clusterv1.Condition
44
46
expectedError bool
45
47
}{
@@ -147,6 +149,53 @@ func TestPreflightChecks(t *testing.T) {
147
149
},
148
150
providerList : & operatorv1.CoreProviderList {},
149
151
},
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
+ },
150
199
{
151
200
name : "two core providers in two different namespaces were created, preflight check failed" ,
152
201
expectedError : true ,
@@ -473,6 +522,74 @@ func TestPreflightChecks(t *testing.T) {
473
522
},
474
523
providerList : & operatorv1.InfrastructureProviderList {},
475
524
},
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
+ },
476
593
{
477
594
name : "wrong version, preflight check failed" ,
478
595
expectedError : true ,
@@ -667,7 +784,12 @@ func TestPreflightChecks(t *testing.T) {
667
784
Client : fakeClient ,
668
785
}
669
786
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 )
671
793
if tc .expectedError {
672
794
gs .Expect (err ).To (HaveOccurred ())
673
795
} else {
0 commit comments