Skip to content

Commit 512d057

Browse files
committed
metal3: add e2e tests
1 parent d8f61f9 commit 512d057

11 files changed

+176
-6
lines changed

Diff for: e2e/aws_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ var _ = Describe("Cluster API AWS MachineSet", Ordered, func() {
7171
APIVersion: infraAPIVersion,
7272
Name: awsMachineTemplateName,
7373
},
74+
"worker-user-data",
7475
))
7576

7677
framework.WaitForMachineSet(cl, machineSet.Name)

Diff for: e2e/azure_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ var _ = Describe("Cluster API Azure MachineSet", Ordered, func() {
6363
APIVersion: infraAPIVersion,
6464
Name: azureMachineTemplateName,
6565
},
66+
"worker-user-data",
6667
))
6768

6869
framework.WaitForMachineSet(cl, machineSet.Name)

Diff for: e2e/baremetal_test.go

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package e2e
2+
3+
import (
4+
"fmt"
5+
6+
bmov1alpha1 "github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1"
7+
metal3v1 "github.com/metal3-io/cluster-api-provider-metal3/api/v1beta1"
8+
. "github.com/onsi/ginkgo/v2"
9+
. "github.com/onsi/gomega"
10+
corev1 "k8s.io/api/core/v1"
11+
apierrors "k8s.io/apimachinery/pkg/api/errors"
12+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
14+
"sigs.k8s.io/controller-runtime/pkg/client"
15+
yaml "sigs.k8s.io/yaml"
16+
17+
configv1 "github.com/openshift/api/config/v1"
18+
mapiv1 "github.com/openshift/api/machine/v1beta1"
19+
bmv1alpha1 "github.com/openshift/cluster-api-provider-baremetal/pkg/apis/baremetal/v1alpha1"
20+
"github.com/openshift/cluster-capi-operator/e2e/framework"
21+
)
22+
23+
const (
24+
baremetalMachineTemplateName = "baremetal-machine-template"
25+
)
26+
27+
var _ = Describe("Cluster API Baremetal MachineSet", Ordered, func() {
28+
var baremetalMachineTemplate *metal3v1.Metal3MachineTemplate
29+
var machineSet *clusterv1.MachineSet
30+
var mapiMachineSpec *bmv1alpha1.BareMetalMachineProviderSpec
31+
32+
BeforeAll(func() {
33+
if platform != configv1.BareMetalPlatformType {
34+
Skip("Skipping Baremetal E2E tests")
35+
}
36+
mapiMachineSpec = getBaremetalMAPIProviderSpec(cl)
37+
})
38+
39+
AfterEach(func() {
40+
if platform != configv1.BareMetalPlatformType {
41+
// Because AfterEach always runs, even when tests are skipped, we have to
42+
// explicitly skip it here for other platforms.
43+
Skip("Skipping Baremetal E2E tests")
44+
}
45+
framework.DeleteMachineSets(cl, machineSet)
46+
framework.WaitForMachineSetsDeleted(cl, machineSet)
47+
framework.DeleteObjects(cl, baremetalMachineTemplate)
48+
})
49+
50+
It("should be able to run a machine", func() {
51+
key := client.ObjectKey{
52+
Namespace: "openshift-cluster-api",
53+
Name: "ostest-extraworker-0", // name provided by dev-scripts in CI
54+
}
55+
56+
waitForBaremetalHostState(cl, key, bmov1alpha1.StateAvailable)
57+
58+
baremetalMachineTemplate = createBaremetalMachineTemplate(cl, mapiMachineSpec)
59+
60+
machineSet = framework.CreateMachineSet(cl, framework.NewMachineSetParams(
61+
"baremetal-machineset",
62+
clusterName,
63+
"", // mapiMachineSpec.Zone,
64+
1,
65+
corev1.ObjectReference{
66+
Kind: "Metal3MachineTemplate",
67+
APIVersion: infraAPIVersion,
68+
Name: baremetalMachineTemplateName,
69+
},
70+
"worker-user-data-managed",
71+
))
72+
73+
framework.WaitForMachineSet(cl, machineSet.Name)
74+
})
75+
})
76+
77+
func waitForBaremetalHostState(cl client.Client, key client.ObjectKey, state bmov1alpha1.ProvisioningState) {
78+
By(fmt.Sprintf("waiting for baremetal host to become %s", state))
79+
80+
Eventually(func() error {
81+
bmh := bmov1alpha1.BareMetalHost{}
82+
83+
err := cl.Get(ctx, key, &bmh)
84+
if err != nil {
85+
return err
86+
}
87+
88+
if bmh.Status.Provisioning.State != state {
89+
return fmt.Errorf("baremetalhost is not %s", state)
90+
}
91+
92+
return nil
93+
}, framework.WaitOverLong, framework.RetryLong).Should(Succeed())
94+
95+
}
96+
97+
func getBaremetalMAPIProviderSpec(cl client.Client) *bmv1alpha1.BareMetalMachineProviderSpec {
98+
machineSetList := &mapiv1.MachineSetList{}
99+
Expect(cl.List(ctx, machineSetList, client.InNamespace(framework.MAPINamespace))).To(Succeed())
100+
101+
Expect(machineSetList.Items).ToNot(HaveLen(0))
102+
machineSet := machineSetList.Items[0]
103+
Expect(machineSet.Spec.Template.Spec.ProviderSpec.Value).ToNot(BeNil())
104+
105+
providerSpec := &bmv1alpha1.BareMetalMachineProviderSpec{}
106+
Expect(yaml.Unmarshal(machineSet.Spec.Template.Spec.ProviderSpec.Value.Raw, providerSpec)).To(Succeed())
107+
108+
return providerSpec
109+
}
110+
111+
func createBaremetalMachineTemplate(cl client.Client, mapiProviderSpec *bmv1alpha1.BareMetalMachineProviderSpec) *metal3v1.Metal3MachineTemplate {
112+
By("Creating Baremetal machine template")
113+
114+
baremetalMachineSpec := metal3v1.Metal3MachineSpec{
115+
CustomDeploy: &metal3v1.CustomDeploy{
116+
Method: "install_coreos",
117+
},
118+
UserData: mapiProviderSpec.UserData,
119+
}
120+
121+
baremetalMachineTemplate := &metal3v1.Metal3MachineTemplate{
122+
ObjectMeta: metav1.ObjectMeta{
123+
Name: baremetalMachineTemplateName,
124+
Namespace: framework.CAPINamespace,
125+
},
126+
Spec: metal3v1.Metal3MachineTemplateSpec{
127+
Template: metal3v1.Metal3MachineTemplateResource{
128+
Spec: baremetalMachineSpec,
129+
},
130+
},
131+
}
132+
133+
if err := cl.Create(ctx, baremetalMachineTemplate); err != nil && !apierrors.IsAlreadyExists(err) {
134+
Expect(err).ToNot(HaveOccurred())
135+
}
136+
137+
return baremetalMachineTemplate
138+
}

Diff for: e2e/e2e_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"testing"
66

7+
bmov1alpha1 "github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1"
8+
metal3v1 "github.com/metal3-io/cluster-api-provider-metal3/api/v1beta1"
79
. "github.com/onsi/ginkgo/v2"
810
. "github.com/onsi/gomega"
911
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -44,6 +46,8 @@ func init() {
4446
utilruntime.Must(mapiv1.AddToScheme(scheme.Scheme))
4547
utilruntime.Must(ibmpowervsv1.AddToScheme(scheme.Scheme))
4648
utilruntime.Must(vspherev1.AddToScheme(scheme.Scheme))
49+
utilruntime.Must(metal3v1.AddToScheme(scheme.Scheme))
50+
utilruntime.Must(bmov1alpha1.AddToScheme(scheme.Scheme))
4751
}
4852

4953
func TestAPIs(t *testing.T) {

Diff for: e2e/framework/framework.go

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const (
1616

1717
RetryShort = 1 * time.Second
1818
RetryMedium = 5 * time.Second
19+
RetryLong = 10 * time.Second
1920
)
2021

2122
var (

Diff for: e2e/framework/machineset.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ type machineSetParams struct {
1919
failureDomain string
2020
replicas int32
2121
infrastructureRef corev1.ObjectReference
22+
userDataSecret string
2223
}
2324

2425
// NewMachineSetParams returns a new machineSetParams object.
25-
func NewMachineSetParams(msName, clusterName, failureDomain string, replicas int32, infrastructureRef corev1.ObjectReference) machineSetParams {
26+
func NewMachineSetParams(msName, clusterName, failureDomain string, replicas int32, infrastructureRef corev1.ObjectReference, userDataSecretName string) machineSetParams {
2627
Expect(msName).ToNot(BeEmpty())
2728
Expect(clusterName).ToNot(BeEmpty())
2829
Expect(infrastructureRef.APIVersion).ToNot(BeEmpty())
@@ -35,14 +36,14 @@ func NewMachineSetParams(msName, clusterName, failureDomain string, replicas int
3536
replicas: replicas,
3637
infrastructureRef: infrastructureRef,
3738
failureDomain: failureDomain,
39+
userDataSecret: userDataSecretName,
3840
}
3941
}
4042

4143
// CreateMachineSet creates a new MachineSet resource.
4244
func CreateMachineSet(cl client.Client, params machineSetParams) *clusterv1.MachineSet {
4345
By(fmt.Sprintf("Creating MachineSet %q", params.msName))
4446

45-
userDataSecret := "worker-user-data"
4647
ms := &clusterv1.MachineSet{
4748
TypeMeta: metav1.TypeMeta{
4849
Kind: "MachineSet",
@@ -70,7 +71,7 @@ func CreateMachineSet(cl client.Client, params machineSetParams) *clusterv1.Mach
7071
},
7172
Spec: clusterv1.MachineSpec{
7273
Bootstrap: clusterv1.Bootstrap{
73-
DataSecretName: &userDataSecret,
74+
DataSecretName: &params.userDataSecret,
7475
},
7576
ClusterName: params.clusterName,
7677
InfrastructureRef: params.infrastructureRef,

Diff for: e2e/gcp_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var _ = Describe("Cluster API GCP MachineSet", Ordered, func() {
5858
APIVersion: infraAPIVersion,
5959
Name: gcpMachineTemplateName,
6060
},
61+
"worker-user-data",
6162
))
6263

6364
framework.WaitForMachineSet(cl, machineSet.Name)

Diff for: e2e/go.mod

+12-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ go 1.22.7
55
require (
66
github.com/aws/aws-sdk-go v1.55.5
77
github.com/google/go-cmp v0.6.0
8+
github.com/metal3-io/baremetal-operator/apis v0.5.1
9+
github.com/metal3-io/cluster-api-provider-metal3/api v1.7.0
810
github.com/onsi/ginkgo/v2 v2.22.2
911
github.com/onsi/gomega v1.36.2
10-
github.com/openshift/api v0.0.0-20220921125526-1866ef90edbf
12+
github.com/openshift/api v0.0.0-20240731195412-e863d9f8a215
13+
github.com/openshift/cluster-api-provider-baremetal v0.0.0-20250115114740-9abe67f18345
1114
k8s.io/api v0.31.5
1215
k8s.io/apimachinery v0.31.5
1316
k8s.io/client-go v0.31.5
@@ -66,6 +69,8 @@ require (
6669
github.com/klauspost/compress v1.17.9 // indirect
6770
github.com/leodido/go-urn v1.4.0 // indirect
6871
github.com/mailru/easyjson v0.7.7 // indirect
72+
github.com/metal3-io/baremetal-operator/pkg/hardwareutils v0.5.1 // indirect
73+
github.com/metal3-io/ip-address-manager/api v1.8.0 // indirect
6974
github.com/mitchellh/mapstructure v1.5.0 // indirect
7075
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
7176
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -102,3 +107,9 @@ require (
102107
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
103108
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
104109
)
110+
111+
replace github.com/metal3-io/cluster-api-provider-metal3/api => github.com/openshift/cluster-api-provider-metal3/api v0.0.0-20241120153823-7baca400194b
112+
113+
replace github.com/metal3-io/baremetal-operator/apis => github.com/openshift/baremetal-operator/apis v0.0.0-20241114005417-044448aafa02
114+
115+
replace github.com/metal3-io/baremetal-operator => github.com/openshift/baremetal-operator v0.0.0-20241114005417-044448aafa02

Diff for: e2e/go.sum

+12-2
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec
135135
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
136136
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
137137
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
138+
github.com/metal3-io/baremetal-operator/pkg/hardwareutils v0.5.1 h1:X0+MWsJ+Gj/TAkmhGybvesvxk6zQKu3NQXzvC6l0iJs=
139+
github.com/metal3-io/baremetal-operator/pkg/hardwareutils v0.5.1/go.mod h1:399nvdaqoU9rTI25UdFw2EWcVjmJPpeZPIhfDAIx/XU=
140+
github.com/metal3-io/ip-address-manager/api v1.8.0 h1:qEemVSb45uDbbQonr2StMV21RfSKNSO/NrPnhApV90w=
141+
github.com/metal3-io/ip-address-manager/api v1.8.0/go.mod h1:0PjnN4ke64Jh6A3U04mMvV2sBwePa7HKkiZXazktCTk=
138142
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
139143
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
140144
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -154,8 +158,14 @@ github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU
154158
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
155159
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
156160
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
157-
github.com/openshift/api v0.0.0-20220921125526-1866ef90edbf h1:Bohu/gUxpyuTjQx2m01DFNgtGMy3wtti6s7mJ+Gtblc=
158-
github.com/openshift/api v0.0.0-20220921125526-1866ef90edbf/go.mod h1:HJAEIh4gLXPDdWxgCbvmJjzd9QIxyPZJtPU0u2W4vH4=
161+
github.com/openshift/api v0.0.0-20240731195412-e863d9f8a215 h1:NY9X6aNRa3PKTRj9nTncCoGRbdwiis2CL1T3miXxjoc=
162+
github.com/openshift/api v0.0.0-20240731195412-e863d9f8a215/go.mod h1:OOh6Qopf21pSzqNVCB5gomomBXb8o5sGKZxG2KNpaXM=
163+
github.com/openshift/baremetal-operator/apis v0.0.0-20241114005417-044448aafa02 h1:vO/LZ1E8DXXz4FobR07oMIC5EB7ndkYT194Tp7hEXso=
164+
github.com/openshift/baremetal-operator/apis v0.0.0-20241114005417-044448aafa02/go.mod h1:tO+nL2r12/n6CC6gVj/K80R2v0fpEnBC1FYq5vCG3ns=
165+
github.com/openshift/cluster-api-provider-baremetal v0.0.0-20250115114740-9abe67f18345 h1:UPAGeMlifNdLqmyLTJK0FXvpYkWRmm49zSXDFDHNoP4=
166+
github.com/openshift/cluster-api-provider-baremetal v0.0.0-20250115114740-9abe67f18345/go.mod h1:TLLzqNgDqYeK8Dd9hCSS4aeracFqF1XT3uTQuKn9F4o=
167+
github.com/openshift/cluster-api-provider-metal3/api v0.0.0-20241120153823-7baca400194b h1:2rBYzD6R2cZenK2BgbHrM0WB9PyP6pIwiwIk+LldXTA=
168+
github.com/openshift/cluster-api-provider-metal3/api v0.0.0-20241120153823-7baca400194b/go.mod h1:T66OjXF5yGNJSuQ/xtHOTfVDxG44Jdafzy+nHwbrg0A=
159169
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
160170
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
161171
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=

Diff for: e2e/powervs_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ var _ = Describe("Cluster API IBMPowerVS MachineSet", Ordered, func() {
6161
APIVersion: powerVSMachineTemplateVersion,
6262
Name: powerVSMachineTemplateName,
6363
},
64+
"worker-user-data",
6465
))
6566
framework.WaitForMachineSet(cl, machineSet.Name)
6667
})

Diff for: e2e/vsphere_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ var _ = Describe("Cluster API vSphere MachineSet", Ordered, func() {
6262
APIVersion: infraAPIVersion,
6363
Name: vSphereMachineTemplateName,
6464
},
65+
"worker-user-data",
6566
))
6667

6768
framework.WaitForMachineSet(cl, machineSet.Name)

0 commit comments

Comments
 (0)