@@ -34,39 +34,91 @@ import (
34
34
"sigs.k8s.io/yaml"
35
35
)
36
36
37
- var _ = Describe ("Install Core Provider in an air-gapped environment" , func () {
38
- It ("should successfully create config maps with Core Provider manifests" , func () {
37
+ var _ = Describe ("Install Controlplane, Core, Bootstrap Providers in an air-gapped environment" , func () {
38
+ It ("should successfully create config maps with Controlplane, Core, and Bootstrap Provider manifests" , func () {
39
39
// Ensure that there are no Cluster API installed
40
40
deleteClusterAPICRDs (bootstrapClusterProxy )
41
41
42
42
bootstrapCluster := bootstrapClusterProxy .GetClient ()
43
43
configMaps := []corev1.ConfigMap {}
44
+ configMapFiles := []string {
45
+ "core-cluster-api-v1.7.7.yaml" ,
46
+ "core-cluster-api-v1.8.0.yaml" ,
47
+ "bootstrap-kubeadm-v1.7.7.yaml" ,
48
+ "bootstrap-kubeadm-v1.8.0.yaml" ,
49
+ "controlplane-kubeadm-v1.7.7.yaml" ,
50
+ "controlplane-kubeadm-v1.8.0.yaml" ,
51
+ }
44
52
45
- for _ , fileName := range [] string { "core-cluster-api-v1.7.7.yaml" , "core-cluster-api-v1.8.0.yaml" } {
46
- coreProviderComponents , err := os .ReadFile (customManifestsFolder + fileName )
47
- Expect (err ).ToNot (HaveOccurred (), "Failed to read the core provider manifests file" )
53
+ for _ , fileName := range configMapFiles {
54
+ providerComponents , err := os .ReadFile (customManifestsFolder + fileName )
55
+ Expect (err ).ToNot (HaveOccurred (), "Failed to read the provider manifests file" )
48
56
49
57
var configMap corev1.ConfigMap
50
58
51
- Expect (yaml .Unmarshal (coreProviderComponents , & configMap )).To (Succeed ())
59
+ Expect (yaml .Unmarshal (providerComponents , & configMap )).To (Succeed ())
52
60
53
61
configMaps = append (configMaps , configMap )
54
62
}
55
63
56
- By ("Creating capi-system namespace" )
57
- namespace := & corev1.Namespace {
58
- ObjectMeta : metav1.ObjectMeta {
59
- Name : capiSystemNamespace ,
60
- },
64
+ By ("Creating provider namespaces" )
65
+ for _ , namespaceName := range []string {cabpkSystemNamespace , cacpkSystemNamespace , capiSystemNamespace } {
66
+ namespace := & corev1.Namespace {
67
+ ObjectMeta : metav1.ObjectMeta {
68
+ Name : namespaceName ,
69
+ },
70
+ }
71
+ Expect (bootstrapCluster .Create (ctx , namespace )).To (Succeed ())
61
72
}
62
- Expect (bootstrapCluster .Create (ctx , namespace )).To (Succeed ())
63
73
64
- By ("Applying core provider manifests to the cluster" )
74
+ By ("Applying provider manifests to the cluster" )
65
75
for _ , cm := range configMaps {
66
76
Expect (bootstrapCluster .Create (ctx , & cm )).To (Succeed ())
67
77
}
68
78
})
69
79
80
+ It ("should successfully create a BootstrapProvider from a config map" , func () {
81
+ bootstrapCluster := bootstrapClusterProxy .GetClient ()
82
+ bootstrapProvider := & operatorv1.BootstrapProvider {
83
+ ObjectMeta : metav1.ObjectMeta {
84
+ Name : customProviderName ,
85
+ Namespace : cabpkSystemNamespace ,
86
+ },
87
+ Spec : operatorv1.BootstrapProviderSpec {
88
+ ProviderSpec : operatorv1.ProviderSpec {
89
+ FetchConfig : & operatorv1.FetchConfiguration {
90
+ Selector : & metav1.LabelSelector {
91
+ MatchLabels : map [string ]string {
92
+ "provider.cluster.x-k8s.io/name" : "kubeadm" ,
93
+ "provider.cluster.x-k8s.io/type" : "bootstrap" ,
94
+ "provider.cluster.x-k8s.io/version" : "v1.7.7" ,
95
+ },
96
+ },
97
+ },
98
+ Version : previousCAPIVersion ,
99
+ },
100
+ },
101
+ }
102
+
103
+ Expect (bootstrapCluster .Create (ctx , bootstrapProvider )).To (Succeed ())
104
+
105
+ By ("Waiting for the bootstrap provider deployment to be ready" )
106
+ framework .WaitForDeploymentsAvailable (ctx , framework.WaitForDeploymentsAvailableInput {
107
+ Getter : bootstrapClusterProxy .GetClient (),
108
+ Deployment : & appsv1.Deployment {ObjectMeta : metav1.ObjectMeta {Name : bootstrapProviderDeploymentName , Namespace : cabpkSystemNamespace }},
109
+ }, e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
110
+
111
+ By ("Waiting for bootstrap provider to be ready" )
112
+ WaitFor (ctx , For (bootstrapProvider ).In (bootstrapCluster ).ToSatisfy (
113
+ HaveStatusCondition (& bootstrapProvider .Status .Conditions , operatorv1 .ProviderInstalledCondition ),
114
+ ), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
115
+
116
+ By ("Waiting for status.InstalledVersion to be set" )
117
+ WaitFor (ctx , For (bootstrapProvider ).In (bootstrapCluster ).ToSatisfy (func () bool {
118
+ return ptr .Equal (bootstrapProvider .Status .InstalledVersion , ptr .To (bootstrapProvider .Spec .Version ))
119
+ }), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
120
+ })
121
+
70
122
It ("should successfully create a CoreProvider from a config map" , func () {
71
123
bootstrapCluster := bootstrapClusterProxy .GetClient ()
72
124
coreProvider := & operatorv1.CoreProvider {
@@ -79,8 +131,9 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
79
131
FetchConfig : & operatorv1.FetchConfiguration {
80
132
Selector : & metav1.LabelSelector {
81
133
MatchLabels : map [string ]string {
82
- "provider.cluster.x-k8s.io/name" : "cluster-api" ,
83
- "provider.cluster.x-k8s.io/type" : "core" ,
134
+ "provider.cluster.x-k8s.io/name" : "cluster-api" ,
135
+ "provider.cluster.x-k8s.io/type" : "core" ,
136
+ "provider.cluster.x-k8s.io/version" : "v1.7.7" ,
84
137
},
85
138
},
86
139
},
@@ -108,15 +161,90 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
108
161
}), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
109
162
})
110
163
111
- It ("should successfully upgrade a CoreProvider (v1.7.7 -> latest)" , func () {
164
+ It ("should successfully create a ControlPlaneProvider from a config map" , func () {
165
+ bootstrapCluster := bootstrapClusterProxy .GetClient ()
166
+ controlPlaneProvider := & operatorv1.ControlPlaneProvider {
167
+ ObjectMeta : metav1.ObjectMeta {
168
+ Name : customProviderName ,
169
+ Namespace : cacpkSystemNamespace ,
170
+ },
171
+ Spec : operatorv1.ControlPlaneProviderSpec {
172
+ ProviderSpec : operatorv1.ProviderSpec {
173
+ FetchConfig : & operatorv1.FetchConfiguration {
174
+ Selector : & metav1.LabelSelector {
175
+ MatchLabels : map [string ]string {
176
+ "provider.cluster.x-k8s.io/name" : "kubeadm" ,
177
+ "provider.cluster.x-k8s.io/type" : "controlplane" ,
178
+ "provider.cluster.x-k8s.io/version" : "v1.7.7" ,
179
+ },
180
+ },
181
+ },
182
+ Version : previousCAPIVersion ,
183
+ },
184
+ },
185
+ }
186
+
187
+ Expect (bootstrapCluster .Create (ctx , controlPlaneProvider )).To (Succeed ())
188
+
189
+ By ("Waiting for the controlplane provider deployment to be ready" )
190
+ framework .WaitForDeploymentsAvailable (ctx , framework.WaitForDeploymentsAvailableInput {
191
+ Getter : bootstrapClusterProxy .GetClient (),
192
+ Deployment : & appsv1.Deployment {ObjectMeta : metav1.ObjectMeta {Name : cpProviderDeploymentName , Namespace : cacpkSystemNamespace }},
193
+ }, e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
194
+
195
+ By ("Waiting for controlplane provider to be ready" )
196
+ WaitFor (ctx , For (controlPlaneProvider ).In (bootstrapCluster ).ToSatisfy (
197
+ HaveStatusCondition (& controlPlaneProvider .Status .Conditions , operatorv1 .ProviderInstalledCondition ),
198
+ ), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
199
+
200
+ By ("Waiting for status.InstalledVersion to be set" )
201
+ WaitFor (ctx , For (controlPlaneProvider ).In (bootstrapCluster ).ToSatisfy (func () bool {
202
+ return ptr .Equal (controlPlaneProvider .Status .InstalledVersion , ptr .To (controlPlaneProvider .Spec .Version ))
203
+ }), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
204
+ })
205
+
206
+ It ("should successfully upgrade BootstrapProvider, ControlPlaneProvider, CoreProvider (v1.7.7 -> v1.8.0)" , func () {
112
207
bootstrapCluster := bootstrapClusterProxy .GetClient ()
208
+
209
+ bootstrapProvider := & operatorv1.BootstrapProvider {}
113
210
coreProvider := & operatorv1.CoreProvider {}
114
- key := client.ObjectKey {Namespace : capiSystemNamespace , Name : coreProviderName }
115
- Expect (bootstrapCluster .Get (ctx , key , coreProvider )).To (Succeed ())
211
+ controlPlaneProvider := & operatorv1.ControlPlaneProvider {}
212
+
213
+ bootstrapKey := client.ObjectKey {Namespace : cabpkSystemNamespace , Name : customProviderName }
214
+ Expect (bootstrapCluster .Get (ctx , bootstrapKey , bootstrapProvider )).To (Succeed ())
215
+
216
+ coreKey := client.ObjectKey {Namespace : capiSystemNamespace , Name : coreProviderName }
217
+ Expect (bootstrapCluster .Get (ctx , coreKey , coreProvider )).To (Succeed ())
116
218
117
- coreProvider .Spec .Version = ""
219
+ cpKey := client.ObjectKey {Namespace : cacpkSystemNamespace , Name : customProviderName }
220
+ Expect (bootstrapCluster .Get (ctx , cpKey , controlPlaneProvider )).To (Succeed ())
118
221
222
+ bootstrapProvider .Spec .Version = nextCAPIVersion
223
+ bootstrapProvider .Spec .FetchConfig .Selector .MatchLabels ["provider.cluster.x-k8s.io/version" ] = nextCAPIVersion
224
+ coreProvider .Spec .Version = nextCAPIVersion
225
+ coreProvider .Spec .FetchConfig .Selector .MatchLabels ["provider.cluster.x-k8s.io/version" ] = nextCAPIVersion
226
+ controlPlaneProvider .Spec .Version = nextCAPIVersion
227
+ controlPlaneProvider .Spec .FetchConfig .Selector .MatchLabels ["provider.cluster.x-k8s.io/version" ] = nextCAPIVersion
228
+
229
+ Expect (bootstrapCluster .Update (ctx , bootstrapProvider )).To (Succeed ())
119
230
Expect (bootstrapCluster .Update (ctx , coreProvider )).To (Succeed ())
231
+ Expect (bootstrapCluster .Update (ctx , controlPlaneProvider )).To (Succeed ())
232
+
233
+ By ("Waiting for the bootstrap provider deployment to be ready" )
234
+ framework .WaitForDeploymentsAvailable (ctx , framework.WaitForDeploymentsAvailableInput {
235
+ Getter : bootstrapClusterProxy .GetClient (),
236
+ Deployment : & appsv1.Deployment {ObjectMeta : metav1.ObjectMeta {Name : bootstrapProviderDeploymentName , Namespace : cabpkSystemNamespace }},
237
+ }, e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
238
+
239
+ By ("Waiting for bootstrap provider to be ready" )
240
+ WaitFor (ctx , For (bootstrapProvider ).In (bootstrapCluster ).ToSatisfy (
241
+ HaveStatusCondition (& bootstrapProvider .Status .Conditions , operatorv1 .ProviderInstalledCondition ),
242
+ ), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
243
+
244
+ By ("Waiting for bootstrap provider status.InstalledVersion to be set" )
245
+ WaitFor (ctx , For (bootstrapProvider ).In (bootstrapCluster ).ToSatisfy (func () bool {
246
+ return ptr .Equal (bootstrapProvider .Status .InstalledVersion , ptr .To (bootstrapProvider .Spec .Version ))
247
+ }), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
120
248
121
249
By ("Waiting for the core provider deployment to be ready" )
122
250
framework .WaitForDeploymentsAvailable (ctx , framework.WaitForDeploymentsAvailableInput {
@@ -133,6 +261,72 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
133
261
WaitFor (ctx , For (coreProvider ).In (bootstrapCluster ).ToSatisfy (func () bool {
134
262
return ptr .Equal (coreProvider .Status .InstalledVersion , ptr .To (coreProvider .Spec .Version ))
135
263
}), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
264
+
265
+ By ("Waiting for the controlplane provider deployment to be ready" )
266
+ framework .WaitForDeploymentsAvailable (ctx , framework.WaitForDeploymentsAvailableInput {
267
+ Getter : bootstrapClusterProxy .GetClient (),
268
+ Deployment : & appsv1.Deployment {ObjectMeta : metav1.ObjectMeta {Name : cpProviderDeploymentName , Namespace : cacpkSystemNamespace }},
269
+ }, e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
270
+
271
+ By ("Waiting for controlplane provider to be ready" )
272
+ WaitFor (ctx , For (controlPlaneProvider ).In (bootstrapCluster ).ToSatisfy (
273
+ HaveStatusCondition (& coreProvider .Status .Conditions , operatorv1 .ProviderInstalledCondition ),
274
+ ), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
275
+
276
+ By ("Waiting for status.InstalledVersion to be set" )
277
+ WaitFor (ctx , For (controlPlaneProvider ).In (bootstrapCluster ).ToSatisfy (func () bool {
278
+ return ptr .Equal (controlPlaneProvider .Status .InstalledVersion , ptr .To (controlPlaneProvider .Spec .Version ))
279
+ }), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
280
+ })
281
+
282
+ It ("should successfully delete a BootstrapProvider" , func () {
283
+ bootstrapCluster := bootstrapClusterProxy .GetClient ()
284
+ bootstrapProvider := & operatorv1.BootstrapProvider {ObjectMeta : metav1.ObjectMeta {
285
+ Name : customProviderName ,
286
+ Namespace : cabpkSystemNamespace ,
287
+ }}
288
+
289
+ Expect (bootstrapCluster .Delete (ctx , bootstrapProvider )).To (Succeed ())
290
+
291
+ By ("Waiting for the bootstrap provider deployment to be deleted" )
292
+ WaitForDelete (ctx , For (& appsv1.Deployment {ObjectMeta : metav1.ObjectMeta {
293
+ Name : bootstrapProviderDeploymentName ,
294
+ Namespace : cabpkSystemNamespace ,
295
+ }}).In (bootstrapCluster ), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
296
+
297
+ By ("Waiting for the bootstrap provider object to be deleted" )
298
+ WaitForDelete (
299
+ ctx , For (bootstrapProvider ).In (bootstrapCluster ),
300
+ e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
301
+ })
302
+
303
+ It ("should successfully delete config maps with Bootstrap Provider manifests" , func () {
304
+ bootstrapCluster := bootstrapClusterProxy .GetClient ()
305
+ configMaps := []corev1.ConfigMap {}
306
+
307
+ for _ , fileName := range []string {"bootstrap-kubeadm-v1.7.7.yaml" , "bootstrap-kubeadm-v1.8.0.yaml" } {
308
+ bootstrapProviderComponents , err := os .ReadFile (customManifestsFolder + fileName )
309
+ Expect (err ).ToNot (HaveOccurred (), "Failed to read the bootstrap provider manifests file" )
310
+
311
+ var configMap corev1.ConfigMap
312
+
313
+ Expect (yaml .Unmarshal (bootstrapProviderComponents , & configMap )).To (Succeed ())
314
+
315
+ configMaps = append (configMaps , configMap )
316
+ }
317
+
318
+ By ("Deleting config maps with bootstrap provider manifests" )
319
+ for _ , cm := range configMaps {
320
+ Expect (bootstrapCluster .Delete (ctx , & cm )).To (Succeed ())
321
+ }
322
+
323
+ By ("Deleting capkb-system namespace" )
324
+ namespace := & corev1.Namespace {
325
+ ObjectMeta : metav1.ObjectMeta {
326
+ Name : cabpkSystemNamespace ,
327
+ },
328
+ }
329
+ Expect (bootstrapCluster .Delete (ctx , namespace )).To (Succeed ())
136
330
})
137
331
138
332
It ("should successfully delete a CoreProvider" , func () {
@@ -184,4 +378,54 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
184
378
}
185
379
Expect (bootstrapCluster .Delete (ctx , namespace )).To (Succeed ())
186
380
})
381
+
382
+ It ("should successfully delete a ControlPlaneProvider" , func () {
383
+ bootstrapCluster := bootstrapClusterProxy .GetClient ()
384
+ ControlPlaneProvider := & operatorv1.ControlPlaneProvider {ObjectMeta : metav1.ObjectMeta {
385
+ Name : customProviderName ,
386
+ Namespace : cacpkSystemNamespace ,
387
+ }}
388
+
389
+ Expect (bootstrapCluster .Delete (ctx , ControlPlaneProvider )).To (Succeed ())
390
+
391
+ By ("Waiting for the controlplane provider deployment to be deleted" )
392
+ WaitForDelete (ctx , For (& appsv1.Deployment {ObjectMeta : metav1.ObjectMeta {
393
+ Name : cpProviderDeploymentName ,
394
+ Namespace : cacpkSystemNamespace ,
395
+ }}).In (bootstrapCluster ), e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
396
+
397
+ By ("Waiting for the controlplane provider object to be deleted" )
398
+ WaitForDelete (
399
+ ctx , For (ControlPlaneProvider ).In (bootstrapCluster ),
400
+ e2eConfig .GetIntervals (bootstrapClusterProxy .GetName (), "wait-controllers" )... )
401
+ })
402
+
403
+ It ("should successfully delete config maps with ControlPlane Provider manifests" , func () {
404
+ bootstrapCluster := bootstrapClusterProxy .GetClient ()
405
+ configMaps := []corev1.ConfigMap {}
406
+
407
+ for _ , fileName := range []string {"controlplane-kubeadm-v1.7.7.yaml" , "controlplane-kubeadm-v1.8.0.yaml" } {
408
+ controlPlaneProviderComponents , err := os .ReadFile (customManifestsFolder + fileName )
409
+ Expect (err ).ToNot (HaveOccurred (), "Failed to read the controlplane provider manifests file" )
410
+
411
+ var configMap corev1.ConfigMap
412
+
413
+ Expect (yaml .Unmarshal (controlPlaneProviderComponents , & configMap )).To (Succeed ())
414
+
415
+ configMaps = append (configMaps , configMap )
416
+ }
417
+
418
+ By ("Deleting config maps with controlplane provider manifests" )
419
+ for _ , cm := range configMaps {
420
+ Expect (bootstrapCluster .Delete (ctx , & cm )).To (Succeed ())
421
+ }
422
+
423
+ By ("Deleting capkcp-system namespace" )
424
+ namespace := & corev1.Namespace {
425
+ ObjectMeta : metav1.ObjectMeta {
426
+ Name : cacpkSystemNamespace ,
427
+ },
428
+ }
429
+ Expect (bootstrapCluster .Delete (ctx , namespace )).To (Succeed ())
430
+ })
187
431
})
0 commit comments