Skip to content

Commit f6de741

Browse files
author
Cecile Robert-Michon
committed
Enforce unique subnet names
1 parent e80d480 commit f6de741

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

api/v1alpha3/azurecluster_validation.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,20 @@ func validateResourceGroup(resourceGroup string, fldPath *field.Path) *field.Err
8484
// validateSubnets validates a list of Subnets
8585
func validateSubnets(subnets Subnets, fldPath *field.Path) field.ErrorList {
8686
var allErrs field.ErrorList
87+
subnetNames := make(map[string]bool, len(subnets))
8788
requiredSubnetRoles := map[string]bool{
8889
"control-plane": false,
8990
"node": false,
9091
}
92+
9193
for i, subnet := range subnets {
9294
if err := validateSubnetName(subnet.Name, fldPath.Index(i).Child("name")); err != nil {
9395
allErrs = append(allErrs, err)
9496
}
97+
if _, ok := subnetNames[subnet.Name]; ok {
98+
allErrs = append(allErrs, field.Duplicate(fldPath, subnet.Name))
99+
}
100+
subnetNames[subnet.Name] = true
95101
if subnet.InternalLBIPAddress != "" {
96102
if err := validateInternalLBIPAddress(subnet.InternalLBIPAddress,
97103
fldPath.Index(i).Child("internalLBIPAddress")); err != nil {

api/v1alpha3/azurecluster_validation_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,31 @@ func TestSubnetsInvalidLackRequiredSubnet(t *testing.T) {
384384
})
385385
}
386386

387+
func TestSubnetNamesNotUnique(t *testing.T) {
388+
g := NewWithT(t)
389+
390+
type test struct {
391+
name string
392+
subnets Subnets
393+
}
394+
395+
testCase := test{
396+
name: "subnets - names not unique",
397+
subnets: createValidSubnets(),
398+
}
399+
400+
testCase.subnets[0].Name = "subnet-name"
401+
testCase.subnets[1].Name = "subnet-name"
402+
403+
t.Run(testCase.name, func(t *testing.T) {
404+
errs := validateSubnets(testCase.subnets,
405+
field.NewPath("spec").Child("networkSpec").Child("subnets"))
406+
g.Expect(errs).To(HaveLen(1))
407+
g.Expect(errs[0].Type).To(Equal(field.ErrorTypeDuplicate))
408+
g.Expect(errs[0].Field).To(Equal("spec.networkSpec.subnets"))
409+
})
410+
}
411+
387412
func TestSubnetNameValid(t *testing.T) {
388413
g := NewWithT(t)
389414

0 commit comments

Comments
 (0)