Skip to content

⚠️ Simplify v1alpha6 cluster restorer #1925

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 43 additions & 41 deletions api/v1alpha6/openstackcluster_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,55 +80,35 @@ 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 {
return &c.Status
},
restorev1beta1ClusterStatus,
),
"managedSubnets": conversion.UnconditionalFieldRestorer(
func(c *infrav1.OpenStackCluster) *[]infrav1.SubnetSpec {
return &c.Spec.ManagedSubnets
},
),
}

/* OpenStackClusterSpec */
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}
50 changes: 9 additions & 41 deletions api/v1alpha6/openstackclustertemplate_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
6 changes: 0 additions & 6 deletions api/v1alpha6/types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 1 addition & 7 deletions api/v1alpha7/openstackcluster_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion api/v1alpha7/openstackmachine_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down