@@ -17,6 +17,7 @@ limitations under the License.
1717package v1alpha2_test
1818
1919import (
20+ "fmt"
2021 "strings"
2122
2223 "github.com/Azure/karpenter-provider-azure/pkg/apis/v1alpha2"
@@ -1103,6 +1104,79 @@ var _ = Describe("CEL/Validation", func() {
11031104 )
11041105 })
11051106
1107+ Context ("LocalDNS MaxProperties validation" , func () {
1108+ DescribeTable ("should validate VnetDNSOverrides property limits" ,
1109+ func (numZones int , expectedErr string ) {
1110+ overrides := make (map [string ]* v1alpha2.LocalDNSOverrides )
1111+ overrides ["." ] = createCompleteLocalDNSOverrides (true )
1112+ overrides ["cluster.local" ] = createCompleteLocalDNSOverrides (false )
1113+ // Add additional zones beyond the required 2
1114+ for i := 1 ; i <= numZones - 2 ; i ++ {
1115+ overrides [fmt .Sprintf ("zone%d.local" , i )] = createCompleteLocalDNSOverrides (false )
1116+ }
1117+
1118+ nodeClass := & v1alpha2.AKSNodeClass {
1119+ ObjectMeta : metav1.ObjectMeta {Name : strings .ToLower (randomdata .SillyName ())},
1120+ Spec : v1alpha2.AKSNodeClassSpec {
1121+ LocalDNS : & v1alpha2.LocalDNS {
1122+ Mode : lo .ToPtr (v1alpha2 .LocalDNSModeRequired ),
1123+ VnetDNSOverrides : overrides ,
1124+ KubeDNSOverrides : map [string ]* v1alpha2.LocalDNSOverrides {
1125+ "." : createCompleteLocalDNSOverrides (false ),
1126+ "cluster.local" : createCompleteLocalDNSOverrides (false ),
1127+ },
1128+ },
1129+ },
1130+ }
1131+ err := env .Client .Create (ctx , nodeClass )
1132+ if expectedErr == "" {
1133+ Expect (err ).To (Succeed ())
1134+ } else {
1135+ Expect (err ).To (HaveOccurred ())
1136+ Expect (err .Error ()).To (ContainSubstring (expectedErr ))
1137+ }
1138+ },
1139+ Entry ("valid: exactly 10 properties" , 10 , "" ),
1140+ Entry ("invalid: 11 properties (exceeds limit)" , 11 , "must have at most 10 items" ),
1141+ Entry ("invalid: 12 properties (exceeds limit)" , 12 , "must have at most 10 items" ),
1142+ )
1143+
1144+ DescribeTable ("should validate KubeDNSOverrides property limits" ,
1145+ func (numZones int , expectedErr string ) {
1146+ overrides := make (map [string ]* v1alpha2.LocalDNSOverrides )
1147+ overrides ["." ] = createCompleteLocalDNSOverrides (false )
1148+ overrides ["cluster.local" ] = createCompleteLocalDNSOverrides (false )
1149+ // Add additional zones beyond the required 2
1150+ for i := 1 ; i <= numZones - 2 ; i ++ {
1151+ overrides [fmt .Sprintf ("zone%d.local" , i )] = createCompleteLocalDNSOverrides (false )
1152+ }
1153+
1154+ nodeClass := & v1alpha2.AKSNodeClass {
1155+ ObjectMeta : metav1.ObjectMeta {Name : strings .ToLower (randomdata .SillyName ())},
1156+ Spec : v1alpha2.AKSNodeClassSpec {
1157+ LocalDNS : & v1alpha2.LocalDNS {
1158+ Mode : lo .ToPtr (v1alpha2 .LocalDNSModeRequired ),
1159+ VnetDNSOverrides : map [string ]* v1alpha2.LocalDNSOverrides {
1160+ "." : createCompleteLocalDNSOverrides (true ),
1161+ "cluster.local" : createCompleteLocalDNSOverrides (false ),
1162+ },
1163+ KubeDNSOverrides : overrides ,
1164+ },
1165+ },
1166+ }
1167+ err := env .Client .Create (ctx , nodeClass )
1168+ if expectedErr == "" {
1169+ Expect (err ).To (Succeed ())
1170+ } else {
1171+ Expect (err ).To (HaveOccurred ())
1172+ Expect (err .Error ()).To (ContainSubstring (expectedErr ))
1173+ }
1174+ },
1175+ Entry ("valid: exactly 10 properties" , 10 , "" ),
1176+ Entry ("invalid: 11 properties (exceeds limit)" , 11 , "must have at most 10 items" ),
1177+ Entry ("invalid: 12 properties (exceeds limit)" , 12 , "must have at most 10 items" ),
1178+ )
1179+ })
11061180 })
11071181
11081182 Context ("OSDiskSizeGB" , func () {
0 commit comments