@@ -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
2931var _ ctrlconversion.Convertible = & OpenStackCluster {}
@@ -162,14 +164,24 @@ func restorev1alpha6ClusterSpec(previous *OpenStackClusterSpec, dst *OpenStackCl
162164func 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
190217func 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