Skip to content

Commit cb1c839

Browse files
committed
network regex validation
1 parent 33ca961 commit cb1c839

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

api/v1beta2/ibmpowervscluster_webhook.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,20 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSCluster() (admission.Warnings, err
9696
}
9797

9898
func (r *IBMPowerVSCluster) validateNetworkRegex() (bool, *field.Error) {
99-
if r.Spec.Network.RegEx != nil && *r.Spec.DHCPServer.Name != "" && r.GetObjectMeta().GetName() != "" {
99+
if r.Spec.Network.RegEx != nil {
100100
var targetName string
101101
var validationMessage string
102102

103103
if *r.Spec.DHCPServer.Name != "" {
104104
targetName = *r.Spec.DHCPServer.Name
105105
validationMessage = "The RegEx should match the DHCP server name when the DHCP server is set"
106106
} else {
107+
if r.GetObjectMeta().GetName() == "" {
108+
return false, field.Required(
109+
field.NewPath("metadata", "name"),
110+
"Cluster name must be set when Network.RegEx is provided and DHCP server name is not set",
111+
)
112+
}
107113
targetName = r.GetObjectMeta().GetName()
108114
validationMessage = "The RegEx should match the cluster name when the DHCP server is not set"
109115
}
@@ -116,6 +122,7 @@ func (r *IBMPowerVSCluster) validateNetworkRegex() (bool, *field.Error) {
116122
)
117123
}
118124
}
125+
119126
return true, nil
120127
}
121128

api/v1beta2/ibmpowervscluster_webhook_test.go

+88
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,36 @@ func TestIBMPowerVSCluster_create(t *testing.T) {
6868
},
6969
wantErr: true,
7070
},
71+
{
72+
name: "Should error network regex and dhcp server name is set but does not match dhcp server name",
73+
powervsCluster: &IBMPowerVSCluster{
74+
Spec: IBMPowerVSClusterSpec{
75+
ServiceInstanceID: "capi-si-id",
76+
Network: IBMPowerVSResourceReference{
77+
RegEx: ptr.To("^capi$"),
78+
},
79+
DHCPServer: &DHCPServer{
80+
Name: ptr.To("test"),
81+
},
82+
},
83+
},
84+
wantErr: true,
85+
},
86+
{
87+
name: "Should error if only network regex is set, dhcp server name is not set and does not match cluster name",
88+
powervsCluster: &IBMPowerVSCluster{
89+
Spec: IBMPowerVSClusterSpec{
90+
ServiceInstanceID: "capi-si-id",
91+
Network: IBMPowerVSResourceReference{
92+
RegEx: ptr.To("^capi$"),
93+
},
94+
},
95+
ObjectMeta: metav1.ObjectMeta{
96+
Name: "test",
97+
},
98+
},
99+
wantErr: true,
100+
},
71101
}
72102

73103
for _, tc := range tests {
@@ -141,6 +171,9 @@ func TestIBMPowerVSCluster_update(t *testing.T) {
141171
Network: IBMPowerVSResourceReference{
142172
RegEx: ptr.To("^capi-net-id$"),
143173
},
174+
DHCPServer: &DHCPServer{
175+
Name: ptr.To("capi-net-id"),
176+
},
144177
},
145178
},
146179
newPowervsCluster: &IBMPowerVSCluster{
@@ -149,6 +182,9 @@ func TestIBMPowerVSCluster_update(t *testing.T) {
149182
Network: IBMPowerVSResourceReference{
150183
RegEx: ptr.To("^capi-net-id$"),
151184
},
185+
DHCPServer: &DHCPServer{
186+
Name: ptr.To("capi-net-id"),
187+
},
152188
},
153189
},
154190
wantErr: false,
@@ -175,6 +211,58 @@ func TestIBMPowerVSCluster_update(t *testing.T) {
175211
},
176212
wantErr: true,
177213
},
214+
{
215+
name: "Should error if network regex and dhcp server name is set but network regex does not match dhcp server name",
216+
oldPowervsCluster: &IBMPowerVSCluster{
217+
Spec: IBMPowerVSClusterSpec{
218+
ServiceInstanceID: "capi-si-id",
219+
Network: IBMPowerVSResourceReference{
220+
RegEx: ptr.To("^capi$"),
221+
},
222+
DHCPServer: &DHCPServer{
223+
Name: ptr.To("capi"),
224+
},
225+
},
226+
},
227+
newPowervsCluster: &IBMPowerVSCluster{
228+
Spec: IBMPowerVSClusterSpec{
229+
ServiceInstanceID: "capi-si-id",
230+
Network: IBMPowerVSResourceReference{
231+
RegEx: ptr.To("^capi$"),
232+
},
233+
DHCPServer: &DHCPServer{
234+
Name: ptr.To("test"),
235+
},
236+
},
237+
},
238+
wantErr: true,
239+
},
240+
{
241+
name: "Should error if network regex is set, dhcp server name is not set and network regex does not match cluster name",
242+
oldPowervsCluster: &IBMPowerVSCluster{
243+
Spec: IBMPowerVSClusterSpec{
244+
ServiceInstanceID: "capi-si-id",
245+
Network: IBMPowerVSResourceReference{
246+
RegEx: ptr.To("^capi$"),
247+
},
248+
DHCPServer: &DHCPServer{
249+
Name: ptr.To("capi"),
250+
},
251+
},
252+
},
253+
newPowervsCluster: &IBMPowerVSCluster{
254+
Spec: IBMPowerVSClusterSpec{
255+
ServiceInstanceID: "capi-si-id",
256+
Network: IBMPowerVSResourceReference{
257+
RegEx: ptr.To("^capi$"),
258+
},
259+
},
260+
ObjectMeta: metav1.ObjectMeta{
261+
Name: "capi",
262+
},
263+
},
264+
wantErr: true,
265+
},
178266
}
179267

180268
for _, tc := range tests {

0 commit comments

Comments
 (0)