diff --git a/api/v1alpha6/openstackcluster_conversion.go b/api/v1alpha6/openstackcluster_conversion.go index 57499183a9..b8aac5aa5a 100644 --- a/api/v1alpha6/openstackcluster_conversion.go +++ b/api/v1alpha6/openstackcluster_conversion.go @@ -80,43 +80,28 @@ var v1alpha6OpenStackClusterRestorer = conversion.RestorerFor[*OpenStackCluster] } var v1beta1OpenStackClusterRestorer = conversion.RestorerFor[*infrav1.OpenStackCluster]{ - "externalNetwork": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackCluster) *infrav1.NetworkFilter { - return &c.Spec.ExternalNetwork - }, - ), - "disableExternalNetwork": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackCluster) *bool { - return &c.Spec.DisableExternalNetwork - }, - ), - "router": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackCluster) **infrav1.RouterFilter { - return &c.Spec.Router - }, - ), - "networkMtu": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackCluster) *int { - return &c.Spec.NetworkMTU - }, - ), "bastion": conversion.HashedFieldRestorer( func(c *infrav1.OpenStackCluster) **infrav1.Bastion { return &c.Spec.Bastion }, restorev1beta1Bastion, ), - "subnets": conversion.HashedFieldRestorer( - func(c *infrav1.OpenStackCluster) *[]infrav1.SubnetFilter { - return &c.Spec.Subnets - }, - restorev1beta1Subnets, - ), - "allNodesSecurityGroupRules": conversion.HashedFieldRestorer( - func(c *infrav1.OpenStackCluster) *infrav1.ManagedSecurityGroups { - return c.Spec.ManagedSecurityGroups + "spec": conversion.HashedFieldRestorer( + func(c *infrav1.OpenStackCluster) *infrav1.OpenStackClusterSpec { + return &c.Spec }, - restorev1beta1ManagedSecurityGroups, + restorev1beta1ClusterSpec, + // Filter out Bastion, which is restored separately + conversion.HashedFilterField[*infrav1.OpenStackCluster, infrav1.OpenStackClusterSpec]( + func(s *infrav1.OpenStackClusterSpec) *infrav1.OpenStackClusterSpec { + if s.Bastion != nil { + f := *s + f.Bastion = nil + return &f + } + return s + }, + ), ), "status": conversion.HashedFieldRestorer( func(c *infrav1.OpenStackCluster) *infrav1.OpenStackClusterStatus { @@ -124,11 +109,6 @@ var v1beta1OpenStackClusterRestorer = conversion.RestorerFor[*infrav1.OpenStackC }, restorev1beta1ClusterStatus, ), - "managedSubnets": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackCluster) *[]infrav1.SubnetSpec { - return &c.Spec.ManagedSubnets - }, - ), } /* OpenStackClusterSpec */ @@ -179,6 +159,34 @@ func restorev1alpha6ClusterSpec(previous *OpenStackClusterSpec, dst *OpenStackCl restorev1alpha6NetworkFilter(&previous.Network, &dst.Network) } +func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infrav1.OpenStackClusterSpec) { + // Bastion is restored separately + + // Restore all fields except ID, which should have been copied over in conversion + dst.ExternalNetwork.Name = previous.ExternalNetwork.Name + dst.ExternalNetwork.Description = previous.ExternalNetwork.Description + dst.ExternalNetwork.ProjectID = previous.ExternalNetwork.ProjectID + dst.ExternalNetwork.Tags = previous.ExternalNetwork.Tags + dst.ExternalNetwork.TagsAny = previous.ExternalNetwork.TagsAny + dst.ExternalNetwork.NotTags = previous.ExternalNetwork.NotTags + dst.ExternalNetwork.NotTagsAny = previous.ExternalNetwork.NotTagsAny + + // Restore fields not present in v1alpha6 + dst.Router = previous.Router + dst.NetworkMTU = previous.NetworkMTU + dst.DisableExternalNetwork = previous.DisableExternalNetwork + + if len(previous.Subnets) > 1 { + dst.Subnets = append(dst.Subnets, previous.Subnets[1:]...) + } + + dst.ManagedSubnets = previous.ManagedSubnets + + if previous.ManagedSecurityGroups != nil { + dst.ManagedSecurityGroups.AllNodesSecurityGroupRules = previous.ManagedSecurityGroups.AllNodesSecurityGroupRules + } +} + func Convert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s apiconversion.Scope) error { err := autoConvert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in, out, s) if err != nil { @@ -392,9 +400,3 @@ func Convert_v1beta1_Bastion_To_v1alpha6_Bastion(in *infrav1.Bastion, out *Basti out.Instance.FloatingIP = in.FloatingIP return nil } - -/* ManagedSecurityGroups */ - -func restorev1beta1ManagedSecurityGroups(previous *infrav1.ManagedSecurityGroups, dst *infrav1.ManagedSecurityGroups) { - dst.AllNodesSecurityGroupRules = previous.AllNodesSecurityGroupRules -} diff --git a/api/v1alpha6/openstackclustertemplate_conversion.go b/api/v1alpha6/openstackclustertemplate_conversion.go index cf7a3ffead..7ded0fc0de 100644 --- a/api/v1alpha6/openstackclustertemplate_conversion.go +++ b/api/v1alpha6/openstackclustertemplate_conversion.go @@ -69,47 +69,15 @@ var v1alpha6OpenStackClusterTemplateRestorer = conversion.RestorerFor[*OpenStack } var v1beta1OpenStackClusterTemplateRestorer = conversion.RestorerFor[*infrav1.OpenStackClusterTemplate]{ - "externalNetwork": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) *infrav1.NetworkFilter { - return &c.Spec.Template.Spec.ExternalNetwork - }, - ), - "disableExternalNetwork": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) *bool { - return &c.Spec.Template.Spec.DisableExternalNetwork - }, - ), - "router": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) **infrav1.RouterFilter { - return &c.Spec.Template.Spec.Router - }, - ), - "networkMtu": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) *int { - return &c.Spec.Template.Spec.NetworkMTU - }, - ), - "bastion": conversion.HashedFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) **infrav1.Bastion { - return &c.Spec.Template.Spec.Bastion - }, - restorev1beta1Bastion, - ), - "subnets": conversion.HashedFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) *[]infrav1.SubnetFilter { - return &c.Spec.Template.Spec.Subnets - }, - restorev1beta1Subnets, - ), - "allNodesSecurityGroupRules": conversion.HashedFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) *infrav1.ManagedSecurityGroups { - return c.Spec.Template.Spec.ManagedSecurityGroups - }, - restorev1beta1ManagedSecurityGroups, - ), - "managedSubnets": conversion.UnconditionalFieldRestorer( - func(c *infrav1.OpenStackClusterTemplate) *[]infrav1.SubnetSpec { - return &c.Spec.Template.Spec.ManagedSubnets + "spec": conversion.HashedFieldRestorer( + func(c *infrav1.OpenStackClusterTemplate) *infrav1.OpenStackClusterTemplateSpec { + return &c.Spec }, + restorev1beta1ClusterTemplateSpec, ), } + +func restorev1beta1ClusterTemplateSpec(previous *infrav1.OpenStackClusterTemplateSpec, dst *infrav1.OpenStackClusterTemplateSpec) { + restorev1beta1Bastion(&previous.Template.Spec.Bastion, &dst.Template.Spec.Bastion) + restorev1beta1ClusterSpec(&previous.Template.Spec, &dst.Template.Spec) +} diff --git a/api/v1alpha6/types_conversion.go b/api/v1alpha6/types_conversion.go index f4cd0d2724..c43f8a23ac 100644 --- a/api/v1alpha6/types_conversion.go +++ b/api/v1alpha6/types_conversion.go @@ -137,12 +137,6 @@ func restorev1alpha6SubnetFilter(previous *SubnetFilter, dst *SubnetFilter) { dst.NotTagsAny = previous.NotTagsAny } -func restorev1beta1Subnets(previous *[]infrav1.SubnetFilter, dst *[]infrav1.SubnetFilter) { - if len(*previous) > 1 { - *dst = append(*dst, (*previous)[1:]...) - } -} - func Convert_v1alpha6_SubnetParam_To_v1beta1_SubnetFilter(in *SubnetParam, out *infrav1.SubnetFilter, s apiconversion.Scope) error { if err := Convert_v1alpha6_SubnetFilter_To_v1beta1_SubnetFilter(&in.Filter, out, s); err != nil { return err diff --git a/api/v1alpha7/openstackcluster_conversion.go b/api/v1alpha7/openstackcluster_conversion.go index 16a13aa601..5761f11f8c 100644 --- a/api/v1alpha7/openstackcluster_conversion.go +++ b/api/v1alpha7/openstackcluster_conversion.go @@ -74,7 +74,6 @@ var v1alpha7OpenStackClusterRestorer = conversion.RestorerFor[*OpenStackCluster] return &c.Spec }, restorev1alpha7ClusterSpec, - // Filter out Bastion, which is restored separately conversion.HashedFilterField[*OpenStackCluster, OpenStackClusterSpec]( func(s *OpenStackClusterSpec) *OpenStackClusterSpec { @@ -107,7 +106,6 @@ var v1beta1OpenStackClusterRestorer = conversion.RestorerFor[*infrav1.OpenStackC return &c.Spec }, restorev1beta1ClusterSpec, - // Filter out Bastion, which is restored separately conversion.HashedFilterField[*infrav1.OpenStackCluster, infrav1.OpenStackClusterSpec]( func(s *infrav1.OpenStackClusterSpec) *infrav1.OpenStackClusterSpec { @@ -167,11 +165,7 @@ func restorev1alpha7ClusterSpec(previous *OpenStackClusterSpec, dst *OpenStackCl } func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infrav1.OpenStackClusterSpec) { - prevBastion := previous.Bastion - dstBastion := dst.Bastion - if prevBastion != nil && dstBastion != nil { - restorev1beta1MachineSpec(&prevBastion.Instance, &dstBastion.Instance) - } + // Bastion is restored separately // Restore all fields except ID, which should have been copied over in conversion dst.ExternalNetwork.Name = previous.ExternalNetwork.Name diff --git a/api/v1alpha7/openstackmachine_conversion.go b/api/v1alpha7/openstackmachine_conversion.go index 90242c6596..575f8ad40b 100644 --- a/api/v1alpha7/openstackmachine_conversion.go +++ b/api/v1alpha7/openstackmachine_conversion.go @@ -81,7 +81,6 @@ var v1beta1OpenStackMachineRestorer = conversion.RestorerFor[*infrav1.OpenStackM return &c.Status.DependentResources }, ), - // No equivalent in v1alpha7 "refresources": conversion.UnconditionalFieldRestorer( func(c *infrav1.OpenStackMachine) *infrav1.ReferencedMachineResources {