Skip to content

Commit 8d70c19

Browse files
authored
Merge pull request kubernetes-sigs#1930 from shiftstack/openstackcluster_apicleanup
⚠️ OpenStackCluster api general cleanup
2 parents 300c45c + e6a194b commit 8d70c19

32 files changed

+935
-368
lines changed

api/v1alpha5/conversion.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in *i
205205
return err
206206
}
207207

208-
if in.ExternalNetwork.ID != "" {
208+
if in.ExternalNetwork != nil && in.ExternalNetwork.ID != "" {
209209
out.ExternalNetworkID = in.ExternalNetwork.ID
210210
}
211211

@@ -227,6 +227,12 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in *i
227227
out.AllowAllInClusterTraffic = in.ManagedSecurityGroups.AllowAllInClusterTraffic
228228
}
229229

230+
if in.APIServerLoadBalancer != nil {
231+
if err := Convert_v1beta1_APIServerLoadBalancer_To_v1alpha5_APIServerLoadBalancer(in.APIServerLoadBalancer, &out.APIServerLoadBalancer, s); err != nil {
232+
return err
233+
}
234+
}
235+
230236
out.CloudName = in.IdentityRef.CloudName
231237
out.IdentityRef = &OpenStackIdentityReference{Name: in.IdentityRef.Name}
232238

@@ -240,7 +246,7 @@ func Convert_v1alpha5_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
240246
}
241247

242248
if in.ExternalNetworkID != "" {
243-
out.ExternalNetwork = infrav1.NetworkFilter{
249+
out.ExternalNetwork = &infrav1.NetworkFilter{
244250
ID: in.ExternalNetworkID,
245251
}
246252
}
@@ -273,11 +279,30 @@ func Convert_v1alpha5_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
273279
}
274280
}
275281

282+
if in.APIServerLoadBalancer.Enabled {
283+
out.APIServerLoadBalancer = &infrav1.APIServerLoadBalancer{}
284+
if err := Convert_v1alpha5_APIServerLoadBalancer_To_v1beta1_APIServerLoadBalancer(&in.APIServerLoadBalancer, out.APIServerLoadBalancer, s); err != nil {
285+
return err
286+
}
287+
}
288+
276289
out.IdentityRef.CloudName = in.CloudName
277290
if in.IdentityRef != nil {
278291
out.IdentityRef.Name = in.IdentityRef.Name
279292
}
280293

294+
// The generated conversion function converts "" to &"" which is not what we want
295+
if in.APIServerFloatingIP == "" {
296+
out.APIServerFloatingIP = nil
297+
}
298+
if in.APIServerFixedIP == "" {
299+
out.APIServerFixedIP = nil
300+
}
301+
302+
if in.APIServerPort != 0 {
303+
out.APIServerPort = pointer.Int(in.APIServerPort)
304+
}
305+
281306
return nil
282307
}
283308

api/v1alpha5/conversion_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestConvertFrom(t *testing.T) {
4040
want ctrlconversion.Convertible
4141
}{
4242
{
43-
name: "conversion must have conversion-data annotation",
43+
name: "cluster conversion must have conversion-data annotation",
4444
spoke: &OpenStackCluster{},
4545
hub: &infrav1.OpenStackCluster{
4646
Spec: infrav1.OpenStackClusterSpec{},
@@ -51,13 +51,13 @@ func TestConvertFrom(t *testing.T) {
5151
},
5252
ObjectMeta: metav1.ObjectMeta{
5353
Annotations: map[string]string{
54-
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"apiServerLoadBalancer\":{},\"controlPlaneEndpoint\":{\"host\":\"\",\"port\":0},\"disableAPIServerFloatingIP\":false,\"disableExternalNetwork\":false,\"externalNetwork\":{},\"identityRef\":{\"cloudName\":\"\",\"name\":\"\"},\"network\":{}},\"status\":{\"ready\":false}}",
54+
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"identityRef\":{\"cloudName\":\"\",\"name\":\"\"}},\"status\":{\"ready\":false}}",
5555
},
5656
},
5757
},
5858
},
5959
{
60-
name: "conversion must have conversion-data annotation",
60+
name: "cluster template conversion must have conversion-data annotation",
6161
spoke: &OpenStackClusterTemplate{},
6262
hub: &infrav1.OpenStackClusterTemplate{
6363
Spec: infrav1.OpenStackClusterTemplateSpec{},
@@ -72,13 +72,13 @@ func TestConvertFrom(t *testing.T) {
7272
},
7373
ObjectMeta: metav1.ObjectMeta{
7474
Annotations: map[string]string{
75-
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"template\":{\"spec\":{\"apiServerLoadBalancer\":{},\"controlPlaneEndpoint\":{\"host\":\"\",\"port\":0},\"disableAPIServerFloatingIP\":false,\"disableExternalNetwork\":false,\"externalNetwork\":{},\"identityRef\":{\"cloudName\":\"\",\"name\":\"\"},\"network\":{}}}}}",
75+
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"template\":{\"spec\":{\"identityRef\":{\"cloudName\":\"\",\"name\":\"\"}}}}}",
7676
},
7777
},
7878
},
7979
},
8080
{
81-
name: "conversion must have conversion-data annotation",
81+
name: "machine conversion must have conversion-data annotation",
8282
spoke: &OpenStackMachine{},
8383
hub: &infrav1.OpenStackMachine{
8484
Spec: infrav1.OpenStackMachineSpec{},
@@ -93,7 +93,7 @@ func TestConvertFrom(t *testing.T) {
9393
},
9494
},
9595
{
96-
name: "conversion must have conversion-data annotation",
96+
name: "machine template conversion must have conversion-data annotation",
9797
spoke: &OpenStackMachineTemplate{},
9898
hub: &infrav1.OpenStackMachineTemplate{
9999
Spec: infrav1.OpenStackMachineTemplateSpec{},

api/v1alpha5/zz_generated.conversion.go

Lines changed: 32 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1alpha6/openstackcluster_conversion.go

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ import (
2020
"reflect"
2121

2222
apiconversion "k8s.io/apimachinery/pkg/conversion"
23+
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2324
ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"
2425

2526
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
2627
"sigs.k8s.io/cluster-api-provider-openstack/pkg/utils/conversion"
28+
optional "sigs.k8s.io/cluster-api-provider-openstack/pkg/utils/optional"
2729
)
2830

2931
var _ ctrlconversion.Convertible = &OpenStackCluster{}
@@ -162,14 +164,24 @@ func restorev1alpha6ClusterSpec(previous *OpenStackClusterSpec, dst *OpenStackCl
162164
func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infrav1.OpenStackClusterSpec) {
163165
// Bastion is restored separately
164166

167+
if dst.Network.IsEmpty() {
168+
dst.Network = previous.Network
169+
}
170+
165171
// Restore all fields except ID, which should have been copied over in conversion
166-
dst.ExternalNetwork.Name = previous.ExternalNetwork.Name
167-
dst.ExternalNetwork.Description = previous.ExternalNetwork.Description
168-
dst.ExternalNetwork.ProjectID = previous.ExternalNetwork.ProjectID
169-
dst.ExternalNetwork.Tags = previous.ExternalNetwork.Tags
170-
dst.ExternalNetwork.TagsAny = previous.ExternalNetwork.TagsAny
171-
dst.ExternalNetwork.NotTags = previous.ExternalNetwork.NotTags
172-
dst.ExternalNetwork.NotTagsAny = previous.ExternalNetwork.NotTagsAny
172+
if previous.ExternalNetwork != nil {
173+
if dst.ExternalNetwork == nil {
174+
dst.ExternalNetwork = &infrav1.NetworkFilter{}
175+
}
176+
177+
dst.ExternalNetwork.Name = previous.ExternalNetwork.Name
178+
dst.ExternalNetwork.Description = previous.ExternalNetwork.Description
179+
dst.ExternalNetwork.ProjectID = previous.ExternalNetwork.ProjectID
180+
dst.ExternalNetwork.Tags = previous.ExternalNetwork.Tags
181+
dst.ExternalNetwork.TagsAny = previous.ExternalNetwork.TagsAny
182+
dst.ExternalNetwork.NotTags = previous.ExternalNetwork.NotTags
183+
dst.ExternalNetwork.NotTagsAny = previous.ExternalNetwork.NotTagsAny
184+
}
173185

174186
// Restore fields not present in v1alpha6
175187
dst.Router = previous.Router
@@ -185,6 +197,21 @@ func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infr
185197
if previous.ManagedSecurityGroups != nil {
186198
dst.ManagedSecurityGroups.AllNodesSecurityGroupRules = previous.ManagedSecurityGroups.AllNodesSecurityGroupRules
187199
}
200+
201+
if dst.APIServerLoadBalancer.IsZero() {
202+
dst.APIServerLoadBalancer = previous.APIServerLoadBalancer
203+
}
204+
205+
if dst.ControlPlaneEndpoint == nil || *dst.ControlPlaneEndpoint == (clusterv1.APIEndpoint{}) {
206+
dst.ControlPlaneEndpoint = previous.ControlPlaneEndpoint
207+
}
208+
209+
optional.RestoreString(&previous.APIServerFloatingIP, &dst.APIServerFloatingIP)
210+
optional.RestoreString(&previous.APIServerFixedIP, &dst.APIServerFixedIP)
211+
optional.RestoreInt(&previous.APIServerPort, &dst.APIServerPort)
212+
optional.RestoreBool(&previous.DisableAPIServerFloatingIP, &dst.DisableAPIServerFloatingIP)
213+
optional.RestoreBool(&previous.ControlPlaneOmitAvailabilityZone, &dst.ControlPlaneOmitAvailabilityZone)
214+
optional.RestoreBool(&previous.DisablePortSecurity, &dst.DisablePortSecurity)
188215
}
189216

190217
func Convert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s apiconversion.Scope) error {
@@ -193,8 +220,15 @@ func Convert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
193220
return err
194221
}
195222

223+
if in.Network != (NetworkFilter{}) {
224+
out.Network = &infrav1.NetworkFilter{}
225+
if err := Convert_v1alpha6_NetworkFilter_To_v1beta1_NetworkFilter(&in.Network, out.Network, s); err != nil {
226+
return err
227+
}
228+
}
229+
196230
if in.ExternalNetworkID != "" {
197-
out.ExternalNetwork = infrav1.NetworkFilter{
231+
out.ExternalNetwork = &infrav1.NetworkFilter{
198232
ID: in.ExternalNetworkID,
199233
}
200234
}
@@ -227,11 +261,23 @@ func Convert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
227261
}
228262
}
229263

264+
if in.ControlPlaneEndpoint != (clusterv1.APIEndpoint{}) {
265+
out.ControlPlaneEndpoint = &in.ControlPlaneEndpoint
266+
}
267+
230268
out.IdentityRef.CloudName = in.CloudName
231269
if in.IdentityRef != nil {
232270
out.IdentityRef.Name = in.IdentityRef.Name
233271
}
234272

273+
apiServerLoadBalancer := &infrav1.APIServerLoadBalancer{}
274+
if err := Convert_v1alpha6_APIServerLoadBalancer_To_v1beta1_APIServerLoadBalancer(&in.APIServerLoadBalancer, apiServerLoadBalancer, s); err != nil {
275+
return err
276+
}
277+
if !apiServerLoadBalancer.IsZero() {
278+
out.APIServerLoadBalancer = apiServerLoadBalancer
279+
}
280+
235281
return nil
236282
}
237283

@@ -241,7 +287,13 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha6_OpenStackClusterSpec(in *i
241287
return err
242288
}
243289

244-
if in.ExternalNetwork.ID != "" {
290+
if in.Network != nil {
291+
if err := Convert_v1beta1_NetworkFilter_To_v1alpha6_NetworkFilter(in.Network, &out.Network, s); err != nil {
292+
return err
293+
}
294+
}
295+
296+
if in.ExternalNetwork != nil && in.ExternalNetwork.ID != "" {
245297
out.ExternalNetworkID = in.ExternalNetwork.ID
246298
}
247299

@@ -261,9 +313,19 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha6_OpenStackClusterSpec(in *i
261313
out.AllowAllInClusterTraffic = in.ManagedSecurityGroups.AllowAllInClusterTraffic
262314
}
263315

316+
if in.ControlPlaneEndpoint != nil {
317+
out.ControlPlaneEndpoint = *in.ControlPlaneEndpoint
318+
}
319+
264320
out.CloudName = in.IdentityRef.CloudName
265321
out.IdentityRef = &OpenStackIdentityReference{Name: in.IdentityRef.Name}
266322

323+
if in.APIServerLoadBalancer != nil {
324+
if err := Convert_v1beta1_APIServerLoadBalancer_To_v1alpha6_APIServerLoadBalancer(in.APIServerLoadBalancer, &out.APIServerLoadBalancer, s); err != nil {
325+
return err
326+
}
327+
}
328+
267329
return nil
268330
}
269331

0 commit comments

Comments
 (0)