Skip to content

Commit

Permalink
Validate zones order for infrastructure
Browse files Browse the repository at this point in the history
  • Loading branch information
timuthy committed Feb 11, 2020
1 parent 641a409 commit 561ead6
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 16 deletions.
16 changes: 5 additions & 11 deletions pkg/apis/aws/validation/infrastructure.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,21 +147,15 @@ func ValidateInfrastructureConfigUpdate(oldConfig, newConfig *apisaws.Infrastruc
var (
oldZones = oldConfig.Networks.Zones
newZones = newConfig.Networks.Zones
missingZones = sets.NewString()
)

for i, oldZone := range oldZones {
missingZones.Insert(oldZone.Name)
for j, newZone := range newZones {
if newZone.Name == oldZone.Name {
missingZones.Delete(newZone.Name)
allErrs = append(allErrs, apivalidation.ValidateImmutableField(newConfig.Networks.Zones[j], oldConfig.Networks.Zones[j], field.NewPath("networks.zones").Index(i))...)
}
}
if len(oldZones) > len(newZones) {
allErrs = append(allErrs, field.Forbidden(field.NewPath("networks.zones"), "removing zones is not allowed"))
return allErrs
}

for zone := range missingZones {
allErrs = append(allErrs, field.Invalid(field.NewPath("networks.zones"), zone, "zone is missing - removing a zone is not supported"))
for i, oldZone := range oldZones {
allErrs = append(allErrs, apivalidation.ValidateImmutableField(oldZone, newConfig.Networks.Zones[i], field.NewPath("networks.zones").Index(i))...)
}

return allErrs
Expand Down
30 changes: 25 additions & 5 deletions pkg/apis/aws/validation/infrastructure_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,6 @@ var _ = Describe("InfrastructureConfig validation", func() {
})

It("should allow adding a zone", func() {

newInfrastructureConfig := infrastructureConfig.DeepCopy()
newInfrastructureConfig.Networks.Zones = append(newInfrastructureConfig.Networks.Zones, awsZone2)

Expand Down Expand Up @@ -398,18 +397,19 @@ var _ = Describe("InfrastructureConfig validation", func() {
})

It("should forbid removing a zone", func() {
infrastructureConfig.Networks.Zones = append(infrastructureConfig.Networks.Zones, awsZone2)
newInfrastructureConfig := infrastructureConfig.DeepCopy()
newInfrastructureConfig.Networks.Zones[0] = awsZone2
newInfrastructureConfig.Networks.Zones = newInfrastructureConfig.Networks.Zones[:1]

errorList := ValidateInfrastructureConfigUpdate(infrastructureConfig, newInfrastructureConfig)

Expect(errorList).To(ConsistOf(PointTo(MatchFields(IgnoreExtras, Fields{
"Type": Equal(field.ErrorTypeInvalid),
"Type": Equal(field.ErrorTypeForbidden),
"Field": Equal("networks.zones"),
}))))
})

It("should allow adding a zone but forbid removing a zone", func() {
It("should allow adding a zone but forbid changing one", func() {
newInfrastructureConfig := infrastructureConfig.DeepCopy()
newInfrastructureConfig.Networks.Zones = append(newInfrastructureConfig.Networks.Zones, awsZone2)
newInfrastructureConfig.Networks.Zones[0].Name = "zone3"
Expand All @@ -418,8 +418,28 @@ var _ = Describe("InfrastructureConfig validation", func() {

Expect(errorList).To(ConsistOf(PointTo(MatchFields(IgnoreExtras, Fields{
"Type": Equal(field.ErrorTypeInvalid),
"Field": Equal("networks.zones"),
"Field": Equal("networks.zones[0]"),
}))))
})

It("should forbid changing the order of zones", func() {
infrastructureConfig.Networks.Zones = append(infrastructureConfig.Networks.Zones, awsZone2)
newInfrastructureConfig := infrastructureConfig.DeepCopy()
newInfrastructureConfig.Networks.Zones[0] = infrastructureConfig.Networks.Zones[1]
newInfrastructureConfig.Networks.Zones[1] = infrastructureConfig.Networks.Zones[0]

errorList := ValidateInfrastructureConfigUpdate(infrastructureConfig, newInfrastructureConfig)

Expect(errorList).To(ConsistOf(
PointTo(MatchFields(IgnoreExtras, Fields{
"Type": Equal(field.ErrorTypeInvalid),
"Field": Equal("networks.zones[0]"),
})),
PointTo(MatchFields(IgnoreExtras, Fields{
"Type": Equal(field.ErrorTypeInvalid),
"Field": Equal("networks.zones[1]"),
})),
))
})
})
})

0 comments on commit 561ead6

Please sign in to comment.