Skip to content

Commit d9be9d0

Browse files
authored
Merge pull request #1187 from apricote/loadbalancer-struct
⚠️ move loadbalancer opts to struct
2 parents d314406 + 8c4352c commit d9be9d0

20 files changed

+246
-74
lines changed

api/v1alpha3/conversion.go

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

1919
import (
20+
unsafe "unsafe"
21+
2022
corev1 "k8s.io/api/core/v1"
2123
conversion "k8s.io/apimachinery/pkg/conversion"
2224
ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"
@@ -117,6 +119,10 @@ func Convert_v1alpha3_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
117119
Name: in.CloudsSecret.Name,
118120
}
119121
}
122+
out.APIServerLoadBalancer = infrav1.APIServerLoadBalancer{
123+
Enabled: in.ManagedAPIServerLoadBalancer,
124+
AdditionalPorts: *(*[]int)(unsafe.Pointer(&in.APIServerLoadBalancerAdditionalPorts)),
125+
}
120126
return autoConvert_v1alpha3_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in, out, s)
121127
}
122128

@@ -139,6 +145,10 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha3_OpenStackClusterSpec(in *i
139145
Name: in.Bastion.Instance.IdentityRef.Name,
140146
}
141147
}
148+
149+
out.ManagedAPIServerLoadBalancer = in.APIServerLoadBalancer.Enabled
150+
out.APIServerLoadBalancerAdditionalPorts = *(*[]int)(unsafe.Pointer(&in.APIServerLoadBalancer.AdditionalPorts))
151+
142152
return autoConvert_v1beta1_OpenStackClusterSpec_To_v1alpha3_OpenStackClusterSpec(in, out, s)
143153
}
144154

api/v1alpha3/conversion_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,93 @@ import (
2525
runtime "k8s.io/apimachinery/pkg/runtime"
2626
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
2727
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
28+
ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"
2829

2930
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
3031
)
3132

33+
func TestConvertTo(t *testing.T) {
34+
g := gomega.NewWithT(t)
35+
scheme := runtime.NewScheme()
36+
g.Expect(AddToScheme(scheme)).To(gomega.Succeed())
37+
g.Expect(infrav1.AddToScheme(scheme)).To(gomega.Succeed())
38+
39+
tests := []struct {
40+
name string
41+
spoke ctrlconversion.Convertible
42+
hub ctrlconversion.Hub
43+
want ctrlconversion.Hub
44+
}{
45+
{
46+
name: "APIServer LoadBalancer Configuration",
47+
spoke: &OpenStackCluster{
48+
Spec: OpenStackClusterSpec{
49+
ManagedAPIServerLoadBalancer: true,
50+
APIServerLoadBalancerAdditionalPorts: []int{80, 443},
51+
},
52+
},
53+
hub: &infrav1.OpenStackCluster{},
54+
want: &infrav1.OpenStackCluster{
55+
Spec: infrav1.OpenStackClusterSpec{
56+
APIServerLoadBalancer: infrav1.APIServerLoadBalancer{
57+
Enabled: true,
58+
AdditionalPorts: []int{80, 443},
59+
},
60+
},
61+
},
62+
},
63+
}
64+
65+
for _, tt := range tests {
66+
t.Run(tt.name, func(t *testing.T) {
67+
err := tt.spoke.ConvertTo(tt.hub)
68+
g.Expect(err).NotTo(gomega.HaveOccurred())
69+
g.Expect(tt.hub).To(gomega.Equal(tt.want))
70+
})
71+
}
72+
}
73+
74+
func TestConvertFrom(t *testing.T) {
75+
g := gomega.NewWithT(t)
76+
scheme := runtime.NewScheme()
77+
g.Expect(AddToScheme(scheme)).To(gomega.Succeed())
78+
g.Expect(infrav1.AddToScheme(scheme)).To(gomega.Succeed())
79+
80+
tests := []struct {
81+
name string
82+
spoke ctrlconversion.Convertible
83+
hub ctrlconversion.Hub
84+
want ctrlconversion.Convertible
85+
}{
86+
{
87+
name: "APIServer LoadBalancer Configuration",
88+
spoke: &OpenStackCluster{},
89+
hub: &infrav1.OpenStackCluster{
90+
Spec: infrav1.OpenStackClusterSpec{
91+
APIServerLoadBalancer: infrav1.APIServerLoadBalancer{
92+
Enabled: true,
93+
AdditionalPorts: []int{80, 443},
94+
},
95+
},
96+
},
97+
want: &OpenStackCluster{
98+
Spec: OpenStackClusterSpec{
99+
ManagedAPIServerLoadBalancer: true,
100+
APIServerLoadBalancerAdditionalPorts: []int{80, 443},
101+
},
102+
},
103+
},
104+
}
105+
106+
for _, tt := range tests {
107+
t.Run(tt.name, func(t *testing.T) {
108+
err := tt.spoke.ConvertFrom(tt.hub)
109+
g.Expect(err).NotTo(gomega.HaveOccurred())
110+
g.Expect(tt.spoke).To(gomega.Equal(tt.want))
111+
})
112+
}
113+
}
114+
32115
func TestFuzzyConversion(t *testing.T) {
33116
g := gomega.NewWithT(t)
34117
scheme := runtime.NewScheme()

api/v1alpha3/zz_generated.conversion.go

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

api/v1alpha4/conversion_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,24 @@ func TestConvertTo(t *testing.T) {
7070
},
7171
},
7272
},
73+
{
74+
name: "APIServer LoadBalancer Configuration",
75+
spoke: &OpenStackCluster{
76+
Spec: OpenStackClusterSpec{
77+
ManagedAPIServerLoadBalancer: true,
78+
APIServerLoadBalancerAdditionalPorts: []int{80, 443},
79+
},
80+
},
81+
hub: &infrav1.OpenStackCluster{},
82+
want: &infrav1.OpenStackCluster{
83+
Spec: infrav1.OpenStackClusterSpec{
84+
APIServerLoadBalancer: infrav1.APIServerLoadBalancer{
85+
Enabled: true,
86+
AdditionalPorts: []int{80, 443},
87+
},
88+
},
89+
},
90+
},
7391
}
7492

7593
for _, tt := range tests {
@@ -121,6 +139,24 @@ func TestConvertFrom(t *testing.T) {
121139
},
122140
},
123141
},
142+
{
143+
name: "APIServer LoadBalancer Configuration",
144+
spoke: &OpenStackCluster{},
145+
hub: &infrav1.OpenStackCluster{
146+
Spec: infrav1.OpenStackClusterSpec{
147+
APIServerLoadBalancer: infrav1.APIServerLoadBalancer{
148+
Enabled: true,
149+
AdditionalPorts: []int{80, 443},
150+
},
151+
},
152+
},
153+
want: &OpenStackCluster{
154+
Spec: OpenStackClusterSpec{
155+
ManagedAPIServerLoadBalancer: true,
156+
APIServerLoadBalancerAdditionalPorts: []int{80, 443},
157+
},
158+
},
159+
},
124160
}
125161

126162
for _, tt := range tests {

api/v1alpha4/openstackcluster_conversion.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ limitations under the License.
1717
package v1alpha4
1818

1919
import (
20+
unsafe "unsafe"
21+
2022
"k8s.io/apimachinery/pkg/conversion"
2123
clusterv1alpha4 "sigs.k8s.io/cluster-api/api/v1alpha4"
2224
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
25+
26+
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
2327
)
2428

2529
// Convert_v1alpha4_APIEndpoint_To_v1beta1_APIEndpoint is an autogenerated conversion function.
@@ -31,3 +35,17 @@ func Convert_v1alpha4_APIEndpoint_To_v1beta1_APIEndpoint(in *clusterv1alpha4.API
3135
func Convert_v1beta1_APIEndpoint_To_v1alpha4_APIEndpoint(in *clusterv1.APIEndpoint, out *clusterv1alpha4.APIEndpoint, s conversion.Scope) error {
3236
return clusterv1alpha4.Convert_v1beta1_APIEndpoint_To_v1alpha4_APIEndpoint(in, out, s)
3337
}
38+
39+
func Convert_v1alpha4_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s conversion.Scope) error {
40+
out.APIServerLoadBalancer.Enabled = in.ManagedAPIServerLoadBalancer
41+
out.APIServerLoadBalancer.AdditionalPorts = *(*[]int)(unsafe.Pointer(&in.APIServerLoadBalancerAdditionalPorts))
42+
43+
return autoConvert_v1alpha4_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in, out, s)
44+
}
45+
46+
func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha4_OpenStackClusterSpec(in *infrav1.OpenStackClusterSpec, out *OpenStackClusterSpec, s conversion.Scope) error {
47+
out.ManagedAPIServerLoadBalancer = in.APIServerLoadBalancer.Enabled
48+
out.APIServerLoadBalancerAdditionalPorts = *(*[]int)(unsafe.Pointer(&in.APIServerLoadBalancer.AdditionalPorts))
49+
50+
return autoConvert_v1beta1_OpenStackClusterSpec_To_v1alpha4_OpenStackClusterSpec(in, out, s)
51+
}

api/v1alpha4/zz_generated.conversion.go

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

api/v1beta1/openstackcluster_types.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ type OpenStackClusterSpec struct {
5757
// +optional
5858
ExternalNetworkID string `json:"externalNetworkId,omitempty"`
5959

60-
// ManagedAPIServerLoadBalancer defines whether a LoadBalancer for the
61-
// APIServer should be created.
60+
// APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
61+
// It must be activated by setting `enabled: true`.
6262
// +optional
63-
ManagedAPIServerLoadBalancer bool `json:"managedAPIServerLoadBalancer"`
63+
APIServerLoadBalancer APIServerLoadBalancer `json:"apiServerLoadBalancer,omitempty"`
6464

6565
// DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
6666
// IP to the API server. This allows for the creation of clusters when attaching a floating
@@ -97,9 +97,6 @@ type OpenStackClusterSpec struct {
9797
// will be created
9898
APIServerPort int `json:"apiServerPort,omitempty"`
9999

100-
// APIServerLoadBalancerAdditionalPorts adds additional ports to the APIServerLoadBalancer
101-
APIServerLoadBalancerAdditionalPorts []int `json:"apiServerLoadBalancerAdditionalPorts,omitempty"`
102-
103100
// ManagedSecurityGroups determines whether OpenStack security groups for the cluster
104101
// will be managed by the OpenStack provider or whether pre-existing security groups will
105102
// be specified as part of the configuration.

api/v1beta1/types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,3 +296,10 @@ type Bastion struct {
296296
//+optional
297297
AvailabilityZone string `json:"availabilityZone,omitempty"`
298298
}
299+
300+
type APIServerLoadBalancer struct {
301+
// Enabled defines whether a LoadBalancer should be created.
302+
Enabled bool `json:"enabled,omitempty"`
303+
// AdditionalPorts adds additional tcp ports to the Loadbalacner
304+
AdditionalPorts []int `json:"additionalPorts,omitempty"`
305+
}

0 commit comments

Comments
 (0)