From ff0e4addea5eb2fb2d558dae9bdfb488267f4a18 Mon Sep 17 00:00:00 2001 From: Felix Breuer Date: Fri, 13 Mar 2026 14:19:44 +0100 Subject: [PATCH] add the ability to use the metro zone Signed-off-by: Felix Breuer --- pkg/provider/apis/validation/validation.go | 4 ++-- .../apis/validation/validation_fields_test.go | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/pkg/provider/apis/validation/validation.go b/pkg/provider/apis/validation/validation.go index 67607b0e..517998c8 100644 --- a/pkg/provider/apis/validation/validation.go +++ b/pkg/provider/apis/validation/validation.go @@ -35,8 +35,8 @@ var machineTypeRegex = regexp.MustCompile(`^[a-z]+\d+[a-z]*\.\d+[a-z]*(\.[a-z]+\ var regionRegex = regexp.MustCompile(`^[a-z0-9]+$`) // availabilityZoneRegex is a regex pattern for validating STACKIT availability zone format -// Pattern: lowercase letters/digits followed by digits, dash, then digit(s) (e.g., eu01-1, eu01-2) -var availabilityZoneRegex = regexp.MustCompile(`^[a-z0-9]+-\d+$`) +// Pattern: lowercase letters/digits followed by dash, then digits or letter 'm' (e.g., eu01-1, eu01-2, eu01-m) +var availabilityZoneRegex = regexp.MustCompile(`^[a-z0-9]+-(?:\d+|m)$`) // labelKeyRegex validates Kubernetes label keys (must start/end with alphanumeric, can contain -, _, ., /) // Maximum length: 63 characters diff --git a/pkg/provider/apis/validation/validation_fields_test.go b/pkg/provider/apis/validation/validation_fields_test.go index 98c9157a..09eea89d 100644 --- a/pkg/provider/apis/validation/validation_fields_test.go +++ b/pkg/provider/apis/validation/validation_fields_test.go @@ -129,6 +129,8 @@ var _ = Describe("ValidateProviderSpecNSecret", func() { "eu01-2", "eu02-1", "eu02-4", + "eu01-m", + "eu02-m", } for _, az := range testCases { providerSpec.AvailabilityZone = az @@ -136,6 +138,23 @@ var _ = Describe("ValidateProviderSpecNSecret", func() { Expect(errors).To(BeEmpty(), "AvailabilityZone %q should be valid", az) } }) + + It("should fail with invalid availabilityZone formats", func() { + invalidCases := []string{ + "eu01-a", // letter other than 'm' + "eu01-m1", // 'm' followed by digit + "eu01", // missing dash and suffix + "eu01-", // missing suffix + "-1", // missing prefix + "eu01-mm", // multiple letters + } + for _, az := range invalidCases { + providerSpec.AvailabilityZone = az + errors := ValidateProviderSpecNSecret(providerSpec, secret) + Expect(errors).NotTo(BeEmpty(), "AvailabilityZone %q should be invalid", az) + Expect(errors[0].Error()).To(ContainSubstring("invalid format")) + } + }) }) Context("AffinityGroup validation", func() {