Skip to content

Commit

Permalink
feat: add configurable loadbalancer network
Browse files Browse the repository at this point in the history
Previously when loadbalacer was created it used the same network/subnet as the
control plane nodes for the VIP. This was not always the right assumption as some
users might want to be able to customize this according to their env.

This commit fixes the above by adding two fields into
OpenStackClusterSpec/Status two fields `network` and `subnets` under
`APIServerLoadBalancer` so that user can define which network/subnet
to use for allocation of the loadbalancer.

Fixes: kubernetes-sigs#1809

Signed-off-by: Ondrej Blazek <ondrej.blazek@firma.seznam.cz>
  • Loading branch information
oblazek committed Mar 5, 2024
1 parent 23b9f34 commit 13615d4
Show file tree
Hide file tree
Showing 15 changed files with 443 additions and 66 deletions.
3 changes: 3 additions & 0 deletions api/v1alpha5/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 35 additions & 2 deletions api/v1alpha6/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -1014,7 +1014,16 @@ func Convert_v1beta1_OpenStackClusterStatus_To_v1alpha6_OpenStackClusterStatus(i
}

out.Network.Router = (*Router)(in.Router)
out.Network.APIServerLoadBalancer = (*LoadBalancer)(in.APIServerLoadBalancer)
if in.APIServerLoadBalancer != nil {
out.Network.APIServerLoadBalancer = &LoadBalancer{
Name: in.APIServerLoadBalancer.Name,
ID: in.APIServerLoadBalancer.ID,
IP: in.APIServerLoadBalancer.IP,
InternalIP: in.APIServerLoadBalancer.InternalIP,
AllowedCIDRs: in.APIServerLoadBalancer.AllowedCIDRs,
Tags: in.APIServerLoadBalancer.Tags,
}
}
}

return nil
Expand All @@ -1029,12 +1038,36 @@ func Convert_v1alpha6_OpenStackClusterStatus_To_v1beta1_OpenStackClusterStatus(i
// Router and APIServerLoadBalancer have been moved out of Network in v1beta1
if in.Network != nil {
out.Router = (*infrav1.Router)(in.Network.Router)
out.APIServerLoadBalancer = (*infrav1.LoadBalancer)(in.Network.APIServerLoadBalancer)
if in.Network.APIServerLoadBalancer != nil {
out.APIServerLoadBalancer = &infrav1.LoadBalancer{
Name: in.Network.APIServerLoadBalancer.Name,
ID: in.Network.APIServerLoadBalancer.ID,
IP: in.Network.APIServerLoadBalancer.IP,
InternalIP: in.Network.APIServerLoadBalancer.InternalIP,
AllowedCIDRs: in.Network.APIServerLoadBalancer.AllowedCIDRs,
Tags: in.Network.APIServerLoadBalancer.Tags,
}
}
}

return nil
}

func Convert_v1beta1_APIServerLoadBalancer_To_v1alpha6_APIServerLoadBalancer(in *infrav1.APIServerLoadBalancer, out *APIServerLoadBalancer, s apiconversion.Scope) error {
return autoConvert_v1beta1_APIServerLoadBalancer_To_v1alpha6_APIServerLoadBalancer(in, out, s)
}

func Convert_v1beta1_LoadBalancer_To_v1alpha6_LoadBalancer(in *infrav1.LoadBalancer, out *LoadBalancer, s apiconversion.Scope) error {
return autoConvert_v1beta1_LoadBalancer_To_v1alpha6_LoadBalancer(in, out, s)
}

func Convert_v1alpha6_APIServerLoadBalancer_To_v1beta1_APIServerLoadBalancer(in *APIServerLoadBalancer, out *infrav1.APIServerLoadBalancer, s apiconversion.Scope) error {
err := autoConvert_v1alpha6_APIServerLoadBalancer_To_v1beta1_APIServerLoadBalancer(in, out, s)
out.Subnets = nil
out.Network = nil
return err
}

func Convert_v1beta1_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s apiconversion.Scope) error {
err := autoConvert_v1beta1_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in, out, s)
if err != nil {
Expand Down
13 changes: 13 additions & 0 deletions api/v1alpha6/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,15 @@ func TestFuzzyConversion(t *testing.T) {
}
},

func(status *infrav1.OpenStackClusterStatus, c fuzz.Continue) {
c.FuzzNoCustom(status)

// this field does not exist in v1alpha6
if status.APIServerLoadBalancer != nil {
status.APIServerLoadBalancer.LoadBalancerNetwork = nil
}
},

func(spec *infrav1.OpenStackClusterSpec, c fuzz.Continue) {
c.FuzzNoCustom(spec)

Expand All @@ -113,6 +122,10 @@ func TestFuzzyConversion(t *testing.T) {
c.FuzzNoCustom(&subnet)
spec.Subnets = append(spec.Subnets, subnet)
}

// None of these fields exist in v1alpha6
spec.APIServerLoadBalancer.Network = nil
spec.APIServerLoadBalancer.Subnets = nil
},

func(spec *OpenStackMachineSpec, c fuzz.Continue) {
Expand Down
53 changes: 28 additions & 25 deletions api/v1alpha6/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions api/v1alpha7/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -988,3 +988,18 @@ func Convert_v1beta1_NetworkFilter_To_v1alpha7_NetworkFilter(in *infrav1.Network
infrav1.ConvertAllTagsFrom(&in.FilterByNeutronTags, &out.Tags, &out.TagsAny, &out.NotTags, &out.NotTagsAny)
return nil
}

func Convert_v1beta1_LoadBalancer_To_v1alpha7_LoadBalancer(in *infrav1.LoadBalancer, out *LoadBalancer, s apiconversion.Scope) error {
return autoConvert_v1beta1_LoadBalancer_To_v1alpha7_LoadBalancer(in, out, s)
}

func Convert_v1beta1_APIServerLoadBalancer_To_v1alpha7_APIServerLoadBalancer(in *infrav1.APIServerLoadBalancer, out *APIServerLoadBalancer, s apiconversion.Scope) error {
return autoConvert_v1beta1_APIServerLoadBalancer_To_v1alpha7_APIServerLoadBalancer(in, out, s)
}

func Convert_v1alpha7_APIServerLoadBalancer_To_v1beta1_APIServerLoadBalancer(in *APIServerLoadBalancer, out *infrav1.APIServerLoadBalancer, s apiconversion.Scope) error {
err := autoConvert_v1alpha7_APIServerLoadBalancer_To_v1beta1_APIServerLoadBalancer(in, out, s)
out.Subnets = nil
out.Network = nil
return err
}
13 changes: 13 additions & 0 deletions api/v1alpha7/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,19 @@ func TestFuzzyConversion(t *testing.T) {
c.FuzzNoCustom(&subnet)
spec.Subnets = append(spec.Subnets, subnet)
}

// None of these fields exist in v1alpha7
spec.APIServerLoadBalancer.Network = nil
spec.APIServerLoadBalancer.Subnets = nil
},

func(status *infrav1.OpenStackClusterStatus, c fuzz.Continue) {
c.FuzzNoCustom(status)

// this field does not exist in v1alpha7
if status.APIServerLoadBalancer != nil {
status.APIServerLoadBalancer.LoadBalancerNetwork = nil
}
},

func(spec *OpenStackMachineSpec, c fuzz.Continue) {
Expand Down
Loading

0 comments on commit 13615d4

Please sign in to comment.