Skip to content

Commit bd716a1

Browse files
committed
metal3: add e2e tests
1 parent 79218fc commit bd716a1

File tree

284 files changed

+49067
-15509
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

284 files changed

+49067
-15509
lines changed

e2e/baremetal_test.go

+156
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package e2e
2+
3+
import (
4+
metal3v1 "github.com/metal3-io/cluster-api-provider-metal3/api/v1beta1"
5+
. "github.com/onsi/ginkgo/v2"
6+
. "github.com/onsi/gomega"
7+
corev1 "k8s.io/api/core/v1"
8+
apierrors "k8s.io/apimachinery/pkg/api/errors"
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
11+
"sigs.k8s.io/controller-runtime/pkg/client"
12+
yaml "sigs.k8s.io/yaml"
13+
14+
configv1 "github.com/openshift/api/config/v1"
15+
mapiv1 "github.com/openshift/api/machine/v1beta1"
16+
bmv1alpha1 "github.com/openshift/cluster-api-provider-baremetal/pkg/apis/baremetal/v1alpha1"
17+
"github.com/openshift/cluster-capi-operator/e2e/framework"
18+
)
19+
20+
const (
21+
baremetalMachineTemplateName = "baremetal-machine-template"
22+
)
23+
24+
var _ = Describe("Cluster API Baremetal MachineSet", Ordered, func() {
25+
var baremetalMachineTemplate *metal3v1.Metal3MachineTemplate
26+
var machineSet *clusterv1.MachineSet
27+
var mapiMachineSpec *bmv1alpha1.BareMetalMachineProviderSpec
28+
29+
BeforeAll(func() {
30+
if platform != configv1.BareMetalPlatformType {
31+
Skip("Skipping Baremetal E2E tests")
32+
}
33+
framework.CreateCoreCluster(cl, clusterName, "BaremetalCluster")
34+
mapiMachineSpec = getBaremetalMAPIProviderSpec(cl)
35+
createBaremetalCluster(cl, mapiMachineSpec)
36+
})
37+
38+
AfterEach(func() {
39+
if platform != configv1.BareMetalPlatformType {
40+
// Because AfterEach always runs, even when tests are skipped, we have to
41+
// explicitly skip it here for other platforms.
42+
Skip("Skipping Baremetal E2E tests")
43+
}
44+
framework.DeleteMachineSets(cl, machineSet)
45+
framework.WaitForMachineSetsDeleted(cl, machineSet)
46+
framework.DeleteObjects(cl, baremetalMachineTemplate)
47+
})
48+
49+
It("should be able to run a machine", func() {
50+
baremetalMachineTemplate = createBaremetalMachineTemplate(cl, mapiMachineSpec)
51+
52+
machineSet = framework.CreateMachineSet(cl, framework.NewMachineSetParams(
53+
"baremetal-machineset",
54+
clusterName,
55+
"", // mapiMachineSpec.Zone,
56+
1,
57+
corev1.ObjectReference{
58+
Kind: "Metal3MachineTemplate",
59+
APIVersion: infraAPIVersion,
60+
Name: baremetalMachineTemplateName,
61+
},
62+
))
63+
64+
framework.WaitForMachineSet(cl, machineSet.Name)
65+
})
66+
})
67+
68+
func getBaremetalMAPIProviderSpec(cl client.Client) *bmv1alpha1.BareMetalMachineProviderSpec {
69+
machineSetList := &mapiv1.MachineSetList{}
70+
Expect(cl.List(ctx, machineSetList, client.InNamespace(framework.MAPINamespace))).To(Succeed())
71+
72+
Expect(machineSetList.Items).ToNot(HaveLen(0))
73+
machineSet := machineSetList.Items[0]
74+
Expect(machineSet.Spec.Template.Spec.ProviderSpec.Value).ToNot(BeNil())
75+
76+
providerSpec := &bmv1alpha1.BareMetalMachineProviderSpec{}
77+
Expect(yaml.Unmarshal(machineSet.Spec.Template.Spec.ProviderSpec.Value.Raw, providerSpec)).To(Succeed())
78+
79+
return providerSpec
80+
}
81+
82+
func createBaremetalCluster(cl client.Client, mapiProviderSpec *bmv1alpha1.BareMetalMachineProviderSpec) *metal3v1.Metal3Cluster {
83+
By("Creating Baremetal cluster")
84+
85+
baremetalCluster := &metal3v1.Metal3Cluster{
86+
ObjectMeta: metav1.ObjectMeta{
87+
Name: clusterName,
88+
Namespace: framework.CAPINamespace,
89+
// The ManagedBy Annotation is set so CAPI infra providers ignore the InfraCluster object,
90+
// as that's managed externally, in this case by the cluster-capi-operator's infracluster controller.
91+
Annotations: map[string]string{
92+
clusterv1.ManagedByAnnotation: managedByAnnotationValueClusterCAPIOperatorInfraClusterController,
93+
},
94+
},
95+
Spec: metal3v1.Metal3ClusterSpec{
96+
// Network: metal3v1.Network{
97+
// Name: &mapiProviderSpec.NetworkInterfaces[0].Network,
98+
// },
99+
// Region: mapiProviderSpec.Region,
100+
// Project: mapiProviderSpec.ProjectID,
101+
},
102+
}
103+
104+
if err := cl.Create(ctx, baremetalCluster); err != nil && !apierrors.IsAlreadyExists(err) {
105+
Expect(err).ToNot(HaveOccurred())
106+
}
107+
108+
Eventually(func() (bool, error) {
109+
patchedBaremetalCluster := &metal3v1.Metal3Cluster{}
110+
err := cl.Get(ctx, client.ObjectKeyFromObject(baremetalCluster), patchedBaremetalCluster)
111+
if err != nil {
112+
return false, err
113+
}
114+
115+
if patchedBaremetalCluster.Annotations == nil {
116+
return false, nil
117+
}
118+
119+
if _, ok := patchedBaremetalCluster.Annotations[clusterv1.ManagedByAnnotation]; !ok {
120+
return false, nil
121+
}
122+
123+
return patchedBaremetalCluster.Status.Ready, nil
124+
}, framework.WaitShort).Should(BeTrue())
125+
126+
return baremetalCluster
127+
}
128+
129+
func createBaremetalMachineTemplate(cl client.Client, mapiProviderSpec *bmv1alpha1.BareMetalMachineProviderSpec) *metal3v1.Metal3MachineTemplate {
130+
By("Creating Baremetal machine template")
131+
132+
baremetalMachineSpec := metal3v1.Metal3MachineSpec{
133+
Image: metal3v1.Image{
134+
URL: mapiProviderSpec.Image.URL,
135+
Checksum: mapiProviderSpec.Image.Checksum,
136+
},
137+
}
138+
139+
baremetalMachineTemplate := &metal3v1.Metal3MachineTemplate{
140+
ObjectMeta: metav1.ObjectMeta{
141+
Name: baremetalMachineTemplateName,
142+
Namespace: framework.CAPINamespace,
143+
},
144+
Spec: metal3v1.Metal3MachineTemplateSpec{
145+
Template: metal3v1.Metal3MachineTemplateResource{
146+
Spec: baremetalMachineSpec,
147+
},
148+
},
149+
}
150+
151+
if err := cl.Create(ctx, baremetalMachineTemplate); err != nil && !apierrors.IsAlreadyExists(err) {
152+
Expect(err).ToNot(HaveOccurred())
153+
}
154+
155+
return baremetalMachineTemplate
156+
}

e2e/go.mod

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
module github.com/openshift/cluster-capi-operator/e2e
22

3-
go 1.21
3+
go 1.22.0
4+
5+
toolchain go1.22.5
46

57
require (
68
github.com/aws/aws-sdk-go v1.51.17
79
github.com/google/go-cmp v0.6.0
810
github.com/metal3-io/cluster-api-provider-metal3/api v1.7.0
911
github.com/onsi/ginkgo/v2 v2.19.0
1012
github.com/onsi/gomega v1.33.1
11-
github.com/openshift/api v0.0.0-20220921125526-1866ef90edbf
12-
k8s.io/api v0.29.5
13-
k8s.io/apimachinery v0.29.5
13+
github.com/openshift/api v0.0.0-20240124164020-e2ce40831f2e
14+
github.com/openshift/cluster-api-provider-baremetal v0.0.0-20240529144704-2549061c570a
15+
k8s.io/api v0.30.1
16+
k8s.io/apimachinery v0.30.1
1417
k8s.io/client-go v0.29.5
1518
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
1619
sigs.k8s.io/cluster-api v1.7.3
@@ -90,7 +93,7 @@ require (
9093
k8s.io/apiextensions-apiserver v0.29.5 // indirect
9194
k8s.io/component-base v0.29.5 // indirect
9295
k8s.io/klog/v2 v2.120.1 // indirect
93-
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
96+
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
9497
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
9598
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
9699
)

e2e/go.sum

+12-10
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,10 @@ github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA
121121
github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
122122
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
123123
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
124-
github.com/openshift/api v0.0.0-20220921125526-1866ef90edbf h1:Bohu/gUxpyuTjQx2m01DFNgtGMy3wtti6s7mJ+Gtblc=
125-
github.com/openshift/api v0.0.0-20220921125526-1866ef90edbf/go.mod h1:HJAEIh4gLXPDdWxgCbvmJjzd9QIxyPZJtPU0u2W4vH4=
124+
github.com/openshift/api v0.0.0-20240124164020-e2ce40831f2e h1:cxgCNo/R769CO23AK5TCh45H9SMUGZ8RukiF2/Qif3o=
125+
github.com/openshift/api v0.0.0-20240124164020-e2ce40831f2e/go.mod h1:CxgbWAlvu2iQB0UmKTtRu1YfepRg1/vJ64n2DlIEVz4=
126+
github.com/openshift/cluster-api-provider-baremetal v0.0.0-20240529144704-2549061c570a h1:KWSEyxc2IeueaaD9E+IwlBxLqFPtSGUvghnssaM+uQE=
127+
github.com/openshift/cluster-api-provider-baremetal v0.0.0-20240529144704-2549061c570a/go.mod h1:+eLKAJUhziIt76wz0RGCn5wRZM42EO8msGBHn6xkFGw=
126128
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
127129
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
128130
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -158,8 +160,8 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
158160
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
159161
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
160162
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
161-
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
162-
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
163+
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
164+
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
163165
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
164166
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
165167
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -220,20 +222,20 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
220222
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
221223
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
222224
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
223-
k8s.io/api v0.29.5 h1:levS+umUigHCfI3riD36pMY1vQEbrzh4r1ivVWAhHaI=
224-
k8s.io/api v0.29.5/go.mod h1:7b18TtPcJzdjk7w5zWyIHgoAtpGeRvGGASxlS7UZXdQ=
225+
k8s.io/api v0.30.1 h1:kCm/6mADMdbAxmIh0LBjS54nQBE+U4KmbCfIkF5CpJY=
226+
k8s.io/api v0.30.1/go.mod h1:ddbN2C0+0DIiPntan/bye3SW3PdwLa11/0yqwvuRrJM=
225227
k8s.io/apiextensions-apiserver v0.29.5 h1:njDywexhE6n+1NEl3A4axT0TMQHREnndrk3/ztdWcNE=
226228
k8s.io/apiextensions-apiserver v0.29.5/go.mod h1:pfIvij+MH9a8NQKtW7MD4EFnzvUjJ1ZQsDL8wuP8fnc=
227-
k8s.io/apimachinery v0.29.5 h1:Hofa2BmPfpoT+IyDTlcPdCHSnHtEQMoJYGVoQpRTfv4=
228-
k8s.io/apimachinery v0.29.5/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
229+
k8s.io/apimachinery v0.30.1 h1:ZQStsEfo4n65yAdlGTfP/uSHMQSoYzU/oeEbkmF7P2U=
230+
k8s.io/apimachinery v0.30.1/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
229231
k8s.io/client-go v0.29.5 h1:nlASXmPQy190qTteaVP31g3c/wi2kycznkTP7Sv1zPc=
230232
k8s.io/client-go v0.29.5/go.mod h1:aY5CnqUUvXYccJhm47XHoPcRyX6vouHdIBHaKZGTbK4=
231233
k8s.io/component-base v0.29.5 h1:Ptj8AzG+p8c2a839XriHwxakDpZH9uvIgYz+o1agjg8=
232234
k8s.io/component-base v0.29.5/go.mod h1:9nBUoPxW/yimISIgAG7sJDrUGJlu7t8HnDafIrOdU8Q=
233235
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
234236
k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
235-
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
236-
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
237+
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
238+
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
237239
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
238240
k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
239241
sigs.k8s.io/cluster-api v1.7.3 h1:DsSRxsA+18jxLqPAo29abZ9kOPK1/xwhSuQb/MROzSs=

0 commit comments

Comments
 (0)