Skip to content

Commit 3897ea2

Browse files
authored
Merge pull request #1590 from prometherion/issues/1589
✨ Allowing update of OpenstackCluster API server fixed IP
2 parents bc57b7f + cb025df commit 3897ea2

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

api/v1alpha7/openstackcluster_webhook.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ func (r *OpenStackCluster) ValidateUpdate(oldRaw runtime.Object) error {
105105
r.Spec.ControlPlaneEndpoint = clusterv1.APIEndpoint{}
106106
}
107107

108+
// Allow change only for the first time.
109+
if old.Spec.DisableAPIServerFloatingIP && old.Spec.APIServerFixedIP == "" {
110+
r.Spec.APIServerFixedIP = ""
111+
}
112+
113+
// If API Server floating IP is disabled, allow the change of the API Server port only for the first time.
114+
if old.Spec.DisableAPIServerFloatingIP && old.Spec.APIServerPort == 0 && r.Spec.APIServerPort > 0 {
115+
r.Spec.APIServerPort = 0
116+
}
117+
108118
// Allow changes to the bastion spec.
109119
old.Spec.Bastion = &Bastion{}
110120
r.Spec.Bastion = &Bastion{}

api/v1alpha7/openstackcluster_webhook_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,67 @@ func TestOpenStackCluster_ValidateUpdate(t *testing.T) {
234234
},
235235
wantErr: false,
236236
},
237+
{
238+
name: "Changing OpenStackCluster.Spec.APIServerFixedIP is allowed when API Server Floating IP is disabled",
239+
oldTemplate: &OpenStackCluster{
240+
Spec: OpenStackClusterSpec{
241+
DisableAPIServerFloatingIP: true,
242+
},
243+
},
244+
newTemplate: &OpenStackCluster{
245+
Spec: OpenStackClusterSpec{
246+
DisableAPIServerFloatingIP: true,
247+
APIServerFixedIP: "20.1.56.1",
248+
},
249+
},
250+
wantErr: false,
251+
},
252+
{
253+
name: "Changing OpenStackCluster.Spec.APIServerFixedIP is not allowed",
254+
oldTemplate: &OpenStackCluster{
255+
Spec: OpenStackClusterSpec{
256+
DisableAPIServerFloatingIP: false,
257+
},
258+
},
259+
newTemplate: &OpenStackCluster{
260+
Spec: OpenStackClusterSpec{
261+
DisableAPIServerFloatingIP: false,
262+
APIServerFixedIP: "20.1.56.1",
263+
},
264+
},
265+
wantErr: true,
266+
},
267+
268+
{
269+
name: "Changing OpenStackCluster.Spec.APIServerPort is allowed when API Server Floating IP is disabled",
270+
oldTemplate: &OpenStackCluster{
271+
Spec: OpenStackClusterSpec{
272+
DisableAPIServerFloatingIP: true,
273+
},
274+
},
275+
newTemplate: &OpenStackCluster{
276+
Spec: OpenStackClusterSpec{
277+
DisableAPIServerFloatingIP: true,
278+
APIServerPort: 8443,
279+
},
280+
},
281+
wantErr: false,
282+
},
283+
{
284+
name: "Changing OpenStackCluster.Spec.APIServerPort is not allowed",
285+
oldTemplate: &OpenStackCluster{
286+
Spec: OpenStackClusterSpec{
287+
DisableAPIServerFloatingIP: false,
288+
},
289+
},
290+
newTemplate: &OpenStackCluster{
291+
Spec: OpenStackClusterSpec{
292+
DisableAPIServerFloatingIP: false,
293+
APIServerPort: 8443,
294+
},
295+
},
296+
wantErr: true,
297+
},
237298
}
238299
for _, tt := range tests {
239300
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)