@@ -3,64 +3,55 @@ package e2e
33import (
44 . "github.com/onsi/ginkgo/v2"
55 . "github.com/onsi/gomega"
6+ "github.com/onsi/gomega/format"
67 configv1 "github.com/openshift/api/config/v1"
78 mapiv1alpha1 "github.com/openshift/api/machine/v1alpha1"
89 mapiv1beta1 "github.com/openshift/api/machine/v1beta1"
910 "github.com/openshift/cluster-capi-operator/e2e/framework"
1011 corev1 "k8s.io/api/core/v1"
11- apierrors "k8s.io/apimachinery/pkg/api/errors"
1212 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13- clusterv1 "sigs. k8s.io/cluster-api/api/v1beta1 "
13+ " k8s.io/utils/ptr "
1414 "sigs.k8s.io/controller-runtime/pkg/client"
1515 yaml "sigs.k8s.io/yaml"
1616
1717 "github.com/openshift/cluster-api-provider-openstack/openshift/pkg/infraclustercontroller"
1818
19- infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha7 "
19+ infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1 "
2020)
2121
2222const (
2323 openStackMachineTemplateName = "openstack-machine-template"
2424)
2525
2626var _ = Describe ("Cluster API OpenStack MachineSet" , Ordered , func () {
27- var openStackMachineTemplate * infrav1.OpenStackMachineTemplate
28- var machineSet * clusterv1.MachineSet
2927 var mapiMachineSpec * mapiv1alpha1.OpenstackProviderSpec
3028
3129 BeforeAll (func () {
3230 if platform != configv1 .OpenStackPlatformType {
3331 Skip ("Skipping OpenStack E2E tests" )
3432 }
35- framework .CreateCoreCluster (cl , clusterName , "OpenStackCluster" )
3633 mapiMachineSpec = getOpenStackMAPIProviderSpec (cl )
3734 })
3835
39- AfterEach (func () {
40- if platform != configv1 .OpenStackPlatformType {
41- // Because AfterEach always runs, even when tests are skipped, we have to
42- // explicitly skip it here for other platforms.
43- Skip ("Skipping OpenStack E2E tests" )
44- }
45- framework .DeleteMachineSets (cl , machineSet )
46- framework .WaitForMachineSetsDeleted (cl , machineSet )
47- framework .DeleteObjects (cl , openStackMachineTemplate )
48- })
49-
50- It ("should be able to run a machine" , func () {
51- openStackMachineTemplate = createOpenStackMachineTemplate (cl , mapiMachineSpec )
36+ It ("should be able to run a machine with implicit cluster default network" , func () {
37+ openStackMachineTemplate := createOpenStackMachineTemplate (cl , mapiMachineSpec )
5238
53- machineSet = framework .CreateMachineSet (cl , framework .NewMachineSetParams (
39+ machineSet : = framework .CreateMachineSet (cl , framework .NewMachineSetParams (
5440 "openstack-machineset" ,
5541 clusterName ,
5642 "" ,
5743 1 ,
5844 corev1.ObjectReference {
5945 Kind : "OpenStackMachineTemplate" ,
6046 APIVersion : infraAPIVersion ,
61- Name : openStackMachineTemplateName ,
47+ Name : openStackMachineTemplate . Name ,
6248 },
6349 ))
50+ DeferCleanup (func () {
51+ By ("Deleting machineset " + machineSet .Name )
52+ Expect (cl .Delete (ctx , machineSet )).To (Succeed ())
53+ framework .WaitForMachineSetsDeleted (cl , machineSet )
54+ })
6455
6556 framework .WaitForMachineSet (cl , machineSet .Name )
6657 })
@@ -104,68 +95,48 @@ func createOpenStackMachineTemplate(cl client.Client, mapiProviderSpec *mapiv1al
10495
10596 if mapiProviderSpec .RootVolume != nil {
10697 rootVolume = & infrav1.RootVolume {
107- Size : mapiProviderSpec .RootVolume .Size ,
108- VolumeType : mapiProviderSpec .RootVolume .VolumeType ,
109- AvailabilityZone : mapiProviderSpec .RootVolume .Zone ,
98+ SizeGiB : mapiProviderSpec .RootVolume .Size ,
99+ BlockDeviceVolume : infrav1.BlockDeviceVolume {
100+ Type : mapiProviderSpec .RootVolume .VolumeType ,
101+ AvailabilityZone : & infrav1.VolumeAvailabilityZone {
102+ From : infrav1 .VolumeAZFromName ,
103+ Name : ptr .To (infrav1 .VolumeAZName (mapiProviderSpec .RootVolume .Zone )),
104+ },
105+ },
110106 }
111107 } else {
112108 image = mapiProviderSpec .Image
113109 }
114110
115- // NOTE(stephenfin): We intentionally ignore additional networks for now since we don't care
116- // about e.g. Manila shares. We can re-evaluate this if necessary.
117- ports := []infrav1.PortOpts {}
118- for _ , subnet := range mapiProviderSpec .Networks [0 ].Subnets {
119- port := infrav1.PortOpts {
120- FixedIPs : []infrav1.FixedIP {
121- {
122- Subnet : & infrav1.SubnetFilter {
123- // NOTE(stephenfin): Only one of name or ID will be set.
124- ID : subnet .Filter .ID ,
125- Name : subnet .Filter .Name ,
126- Tags : subnet .Filter .Tags ,
127- },
128- },
129- },
130- }
131- ports = append (ports , port )
132- }
133- port := infrav1.PortOpts {
134- Network : & infrav1.NetworkFilter {
135- // The installer still sets NetworkParam.Filter.ID rather than NetworkParam.ID,
136- // at least as of 4.15.
137- ID : mapiProviderSpec .Networks [0 ].Filter .ID , //nolint:staticcheck
138- Name : mapiProviderSpec .Networks [0 ].Filter .Name ,
139- },
111+ // NOTE(stephenfin): We intentionally ignore additional security for now.
112+ var securityGroupParam infrav1.SecurityGroupParam
113+ securityGroup := mapiProviderSpec .SecurityGroups [0 ]
114+ if securityGroup .UUID != "" {
115+ securityGroupParam = infrav1.SecurityGroupParam {ID : & securityGroup .UUID }
116+ } else {
117+ securityGroupParam = infrav1.SecurityGroupParam {Filter : & infrav1.SecurityGroupFilter {Name : securityGroup .Name }}
140118 }
141- ports = append (ports , port )
142-
143- // NOTE(stephenfin): Ditto for security groups
144- securityGroups := []infrav1.SecurityGroupFilter {
145- {
146- Name : mapiProviderSpec .SecurityGroups [0 ].Name ,
147- ID : mapiProviderSpec .SecurityGroups [0 ].UUID ,
148- },
119+ securityGroups := []infrav1.SecurityGroupParam {
120+ securityGroupParam ,
149121 }
150122
123+ // We intentionally omit ports so the machine will default its network
124+ // from the OpenStackCluster created by the infracluster controller.
151125 openStackMachineSpec := infrav1.OpenStackMachineSpec {
152- CloudName : infraclustercontroller .CloudName ,
153- Flavor : mapiProviderSpec .Flavor ,
126+ Flavor : mapiProviderSpec .Flavor ,
154127 IdentityRef : & infrav1.OpenStackIdentityReference {
155- Kind : "Secret" ,
156- Name : infraclustercontroller .CredentialsSecretName ,
128+ CloudName : infraclustercontroller . CloudName ,
129+ Name : infraclustercontroller .CredentialsSecretName ,
157130 },
158- Image : image ,
159- Ports : ports ,
131+ Image : infrav1.ImageParam {Filter : & infrav1.ImageFilter {Name : & image }},
160132 RootVolume : rootVolume ,
161133 SecurityGroups : securityGroups ,
162- Tags : mapiProviderSpec .Tags ,
163134 }
164135
165136 openStackMachineTemplate := & infrav1.OpenStackMachineTemplate {
166137 ObjectMeta : metav1.ObjectMeta {
167- Name : openStackMachineTemplateName ,
168- Namespace : framework .CAPINamespace ,
138+ GenerateName : openStackMachineTemplateName + "-" ,
139+ Namespace : framework .CAPINamespace ,
169140 },
170141 Spec : infrav1.OpenStackMachineTemplateSpec {
171142 Template : infrav1.OpenStackMachineTemplateResource {
@@ -174,9 +145,10 @@ func createOpenStackMachineTemplate(cl client.Client, mapiProviderSpec *mapiv1al
174145 },
175146 }
176147
177- if err := cl .Create (ctx , openStackMachineTemplate ); err != nil && ! apierrors .IsAlreadyExists (err ) {
178- Expect (err ).ToNot (HaveOccurred ())
179- }
148+ Expect (cl .Create (ctx , openStackMachineTemplate )).To (Succeed (), format .Object (openStackMachineTemplate , 1 ))
149+ DeferCleanup (func () error {
150+ return cl .Delete (ctx , openStackMachineTemplate )
151+ })
180152
181153 return openStackMachineTemplate
182154}
0 commit comments