Skip to content

Commit 477e180

Browse files
committed
Support BYO dual-stack Network
This commit adds support to specify more than one existent subnet on the `OpenStackCluster`. The existent `OpenStackClusterSpec.Subnet` is removed in favor of `OpenStackClusterSpec.Subnets`.
1 parent 3ceeeae commit 477e180

12 files changed

+226
-137
lines changed

api/v1alpha5/conversion.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,16 @@ func (r *OpenStackMachineTemplateList) ConvertFrom(srcRaw ctrlconversion.Hub) er
187187
}
188188

189189
func Convert_v1alpha8_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in *infrav1.OpenStackClusterSpec, out *OpenStackClusterSpec, s conversion.Scope) error {
190-
// Our new flag has no equivalent in v1alpha5
191-
return autoConvert_v1alpha8_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in, out, s)
190+
err := autoConvert_v1alpha8_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in, out, s)
191+
if err != nil {
192+
return err
193+
}
194+
195+
if in.Subnets != nil && len(in.Subnets) == 1 {
196+
out.Subnet = SubnetFilter(in.Subnets[0])
197+
}
198+
199+
return nil
192200
}
193201

194202
func Convert_v1alpha8_LoadBalancer_To_v1alpha5_LoadBalancer(in *infrav1.LoadBalancer, out *LoadBalancer, s conversion.Scope) error {
@@ -437,3 +445,17 @@ func Convert_v1alpha5_OpenStackClusterStatus_To_v1alpha8_OpenStackClusterStatus(
437445
func Convert_v1alpha8_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s conversion.Scope) error {
438446
return autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in, out, s)
439447
}
448+
449+
func Convert_v1alpha5_OpenStackClusterSpec_To_v1alpha8_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s conversion.Scope) error {
450+
err := autoConvert_v1alpha5_OpenStackClusterSpec_To_v1alpha8_OpenStackClusterSpec(in, out, s)
451+
if err != nil {
452+
return err
453+
}
454+
455+
emptySubnet := SubnetFilter{}
456+
if in.Subnet != emptySubnet {
457+
out.Subnets = []infrav1.SubnetFilter{infrav1.SubnetFilter(in.Subnet)}
458+
}
459+
460+
return nil
461+
}

api/v1alpha5/conversion_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestConvertFrom(t *testing.T) {
4949
Spec: OpenStackClusterSpec{},
5050
ObjectMeta: metav1.ObjectMeta{
5151
Annotations: map[string]string{
52-
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"allowAllInClusterTraffic\":false,\"apiServerLoadBalancer\":{},\"cloudName\":\"\",\"controlPlaneEndpoint\":{\"host\":\"\",\"port\":0},\"disableAPIServerFloatingIP\":false,\"managedSecurityGroups\":false,\"network\":{},\"subnet\":{}},\"status\":{\"ready\":false}}",
52+
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"allowAllInClusterTraffic\":false,\"apiServerLoadBalancer\":{},\"cloudName\":\"\",\"controlPlaneEndpoint\":{\"host\":\"\",\"port\":0},\"disableAPIServerFloatingIP\":false,\"managedSecurityGroups\":false,\"network\":{}},\"status\":{\"ready\":false}}",
5353
},
5454
},
5555
},
@@ -64,7 +64,7 @@ func TestConvertFrom(t *testing.T) {
6464
Spec: OpenStackClusterTemplateSpec{},
6565
ObjectMeta: metav1.ObjectMeta{
6666
Annotations: map[string]string{
67-
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"template\":{\"spec\":{\"allowAllInClusterTraffic\":false,\"apiServerLoadBalancer\":{},\"cloudName\":\"\",\"controlPlaneEndpoint\":{\"host\":\"\",\"port\":0},\"disableAPIServerFloatingIP\":false,\"managedSecurityGroups\":false,\"network\":{},\"subnet\":{}}}}}",
67+
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"template\":{\"spec\":{\"allowAllInClusterTraffic\":false,\"apiServerLoadBalancer\":{},\"cloudName\":\"\",\"controlPlaneEndpoint\":{\"host\":\"\",\"port\":0},\"disableAPIServerFloatingIP\":false,\"managedSecurityGroups\":false,\"network\":{}}}}}",
6868
},
6969
},
7070
},

api/v1alpha5/zz_generated.conversion.go

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

api/v1alpha6/conversion.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,16 @@ func convertNetworksToPorts(networks []NetworkParam) []infrav1.PortOpts {
432432
}
433433

434434
func Convert_v1alpha8_OpenStackClusterSpec_To_v1alpha6_OpenStackClusterSpec(in *infrav1.OpenStackClusterSpec, out *OpenStackClusterSpec, s apiconversion.Scope) error {
435-
return autoConvert_v1alpha8_OpenStackClusterSpec_To_v1alpha6_OpenStackClusterSpec(in, out, s)
435+
err := autoConvert_v1alpha8_OpenStackClusterSpec_To_v1alpha6_OpenStackClusterSpec(in, out, s)
436+
if err != nil {
437+
return err
438+
}
439+
440+
if in.Subnets != nil && len(in.Subnets) == 1 {
441+
out.Subnet = SubnetFilter(in.Subnets[0])
442+
}
443+
444+
return nil
436445
}
437446

438447
func Convert_v1alpha6_PortOpts_To_v1alpha8_PortOpts(in *PortOpts, out *infrav1.PortOpts, s apiconversion.Scope) error {
@@ -659,3 +668,17 @@ func Convert_v1alpha6_OpenStackClusterStatus_To_v1alpha8_OpenStackClusterStatus(
659668
func Convert_v1alpha8_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s apiconversion.Scope) error {
660669
return autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in, out, s)
661670
}
671+
672+
func Convert_v1alpha6_OpenStackClusterSpec_To_v1alpha8_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s apiconversion.Scope) error {
673+
err := autoConvert_v1alpha6_OpenStackClusterSpec_To_v1alpha8_OpenStackClusterSpec(in, out, s)
674+
if err != nil {
675+
return err
676+
}
677+
678+
emptySubnet := SubnetFilter{}
679+
if in.Subnet != emptySubnet {
680+
out.Subnets = []infrav1.SubnetFilter{infrav1.SubnetFilter(in.Subnet)}
681+
}
682+
683+
return nil
684+
}

api/v1alpha6/zz_generated.conversion.go

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

api/v1alpha7/conversion.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package v1alpha7
1818

1919
import (
20+
apiconversion "k8s.io/apimachinery/pkg/conversion"
2021
ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"
2122

2223
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha8"
@@ -232,3 +233,30 @@ func (r *OpenStackMachineTemplateList) ConvertFrom(srcRaw ctrlconversion.Hub) er
232233
src := srcRaw.(*infrav1.OpenStackMachineTemplateList)
233234
return Convert_v1alpha8_OpenStackMachineTemplateList_To_v1alpha7_OpenStackMachineTemplateList(src, r, nil)
234235
}
236+
237+
func Convert_v1alpha7_OpenStackClusterSpec_To_v1alpha8_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s apiconversion.Scope) error {
238+
err := autoConvert_v1alpha7_OpenStackClusterSpec_To_v1alpha8_OpenStackClusterSpec(in, out, s)
239+
if err != nil {
240+
return err
241+
}
242+
243+
emptySubnet := SubnetFilter{}
244+
if in.Subnet != emptySubnet {
245+
out.Subnets = []infrav1.SubnetFilter{infrav1.SubnetFilter(in.Subnet)}
246+
}
247+
248+
return nil
249+
}
250+
251+
func Convert_v1alpha8_OpenStackClusterSpec_To_v1alpha7_OpenStackClusterSpec(in *infrav1.OpenStackClusterSpec, out *OpenStackClusterSpec, s apiconversion.Scope) error {
252+
err := autoConvert_v1alpha8_OpenStackClusterSpec_To_v1alpha7_OpenStackClusterSpec(in, out, s)
253+
if err != nil {
254+
return err
255+
}
256+
257+
if in.Subnets != nil && len(in.Subnets) == 1 {
258+
out.Subnet = SubnetFilter(in.Subnets[0])
259+
}
260+
261+
return nil
262+
}

api/v1alpha7/zz_generated.conversion.go

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

api/v1alpha8/openstackcluster_types.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ type OpenStackClusterSpec struct {
4747
// If NodeCIDR cannot be set this can be used to detect an existing network.
4848
Network NetworkFilter `json:"network,omitempty"`
4949

50-
// If NodeCIDR cannot be set this can be used to detect an existing subnet.
51-
Subnet SubnetFilter `json:"subnet,omitempty"`
50+
// If NodeCIDR cannot be set this can be used to detect existing IPv4 and/or IPv6 subnets.
51+
Subnets []SubnetFilter `json:"subnets,omitempty"`
5252

5353
// NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
5454
// This value will be used only if the Cluster actuator creates the network.

api/v1alpha8/zz_generated.deepcopy.go

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)