@@ -1024,6 +1024,146 @@ func Test_defaultSubnetsResolver_ResolveViaDiscovery(t *testing.T) {
10241024 },
10251025 wantErr : errors .New ("unable to resolve at least one subnet. Evaluated 2 subnets: 1 are tagged for other clusters, and 1 have insufficient available IP addresses" ),
10261026 },
1027+ {
1028+ name : "multiple subnets found per AZ, pick one per az" ,
1029+ fields : fields {
1030+ clusterTagCheckEnabled : true ,
1031+ albSingleSubnetEnabled : false ,
1032+ discoveryByReachabilityEnabled : true ,
1033+ describeSubnetsAsListCalls : []describeSubnetsAsListCall {
1034+ {
1035+ input : & ec2sdk.DescribeSubnetsInput {
1036+ Filters : []ec2types.Filter {
1037+ {
1038+ Name : awssdk .String ("vpc-id" ),
1039+ Values : []string {"vpc-dummy" },
1040+ },
1041+ {
1042+ Name : awssdk .String ("tag:kubernetes.io/role/elb" ),
1043+ Values : []string {"" , "1" },
1044+ },
1045+ },
1046+ },
1047+ output : []ec2types.Subnet {
1048+ {
1049+ SubnetId : awssdk .String ("subnet-1" ),
1050+ AvailabilityZone : awssdk .String ("us-west-2a" ),
1051+ AvailabilityZoneId : awssdk .String ("usw2-az1" ),
1052+ AvailableIpAddressCount : awssdk .Int32 (8 ),
1053+ VpcId : awssdk .String ("vpc-dummy" ),
1054+ Tags : []ec2types.Tag {
1055+ {
1056+ Key : awssdk .String ("kubernetes.io/role/elb" ),
1057+ Value : awssdk .String ("1" ),
1058+ },
1059+ },
1060+ },
1061+ {
1062+ SubnetId : awssdk .String ("subnet-2" ),
1063+ AvailabilityZone : awssdk .String ("us-west-2a" ),
1064+ AvailabilityZoneId : awssdk .String ("usw2-az1" ),
1065+ AvailableIpAddressCount : awssdk .Int32 (8 ),
1066+ VpcId : awssdk .String ("vpc-dummy" ),
1067+ Tags : []ec2types.Tag {
1068+ {
1069+ Key : awssdk .String ("kubernetes.io/role/elb" ),
1070+ Value : awssdk .String ("1" ),
1071+ },
1072+ {
1073+ Key : awssdk .String ("kubernetes.io/cluster/cluster-dummy" ),
1074+ Value : awssdk .String ("owned" ),
1075+ },
1076+ },
1077+ },
1078+ {
1079+ SubnetId : awssdk .String ("subnet-3" ),
1080+ AvailabilityZone : awssdk .String ("us-west-2b" ),
1081+ AvailabilityZoneId : awssdk .String ("usw2-az2" ),
1082+ AvailableIpAddressCount : awssdk .Int32 (8 ),
1083+ VpcId : awssdk .String ("vpc-dummy" ),
1084+ Tags : []ec2types.Tag {
1085+ {
1086+ Key : awssdk .String ("kubernetes.io/role/elb" ),
1087+ Value : awssdk .String ("1" ),
1088+ },
1089+ },
1090+ },
1091+ {
1092+ SubnetId : awssdk .String ("subnet-4" ),
1093+ AvailabilityZone : awssdk .String ("us-west-2b" ),
1094+ AvailabilityZoneId : awssdk .String ("usw2-az2" ),
1095+ AvailableIpAddressCount : awssdk .Int32 (8 ),
1096+ VpcId : awssdk .String ("vpc-dummy" ),
1097+ Tags : []ec2types.Tag {
1098+ {
1099+ Key : awssdk .String ("kubernetes.io/role/elb" ),
1100+ Value : awssdk .String ("1" ),
1101+ },
1102+ },
1103+ },
1104+ },
1105+ },
1106+ },
1107+ fetchAZInfosCalls : []fetchAZInfosCall {
1108+ {
1109+ availabilityZoneIDs : []string {"usw2-az1" },
1110+ azInfoByAZID : map [string ]ec2types.AvailabilityZone {
1111+ "usw2-az1" : {
1112+ ZoneId : awssdk .String ("usw2-az1" ),
1113+ ZoneType : awssdk .String ("availability-zone" ),
1114+ },
1115+ },
1116+ },
1117+ {
1118+ availabilityZoneIDs : []string {"usw2-az2" },
1119+ azInfoByAZID : map [string ]ec2types.AvailabilityZone {
1120+ "usw2-az2" : {
1121+ ZoneId : awssdk .String ("usw2-az2" ),
1122+ ZoneType : awssdk .String ("availability-zone" ),
1123+ },
1124+ },
1125+ },
1126+ },
1127+ },
1128+ args : args {
1129+ opts : []SubnetsResolveOption {
1130+ WithSubnetsResolveLBType (elbv2model .LoadBalancerTypeApplication ),
1131+ WithSubnetsResolveLBScheme (elbv2model .LoadBalancerSchemeInternetFacing ),
1132+ },
1133+ },
1134+ want : []ec2types.Subnet {
1135+ {
1136+ SubnetId : awssdk .String ("subnet-2" ),
1137+ AvailabilityZone : awssdk .String ("us-west-2a" ),
1138+ AvailabilityZoneId : awssdk .String ("usw2-az1" ),
1139+ AvailableIpAddressCount : awssdk .Int32 (8 ),
1140+ VpcId : awssdk .String ("vpc-dummy" ),
1141+ Tags : []ec2types.Tag {
1142+ {
1143+ Key : awssdk .String ("kubernetes.io/role/elb" ),
1144+ Value : awssdk .String ("1" ),
1145+ },
1146+ {
1147+ Key : awssdk .String ("kubernetes.io/cluster/cluster-dummy" ),
1148+ Value : awssdk .String ("owned" ),
1149+ },
1150+ },
1151+ },
1152+ {
1153+ SubnetId : awssdk .String ("subnet-3" ),
1154+ AvailabilityZone : awssdk .String ("us-west-2b" ),
1155+ AvailabilityZoneId : awssdk .String ("usw2-az2" ),
1156+ AvailableIpAddressCount : awssdk .Int32 (8 ),
1157+ VpcId : awssdk .String ("vpc-dummy" ),
1158+ Tags : []ec2types.Tag {
1159+ {
1160+ Key : awssdk .String ("kubernetes.io/role/elb" ),
1161+ Value : awssdk .String ("1" ),
1162+ },
1163+ },
1164+ },
1165+ },
1166+ },
10271167 {
10281168 name : "fallback to reachability were disabled" ,
10291169 fields : fields {
@@ -2353,6 +2493,13 @@ func Test_defaultSubnetsResolver_chooseSubnetsPerAZ(t *testing.T) {
23532493 AvailableIpAddressCount : awssdk .Int32 (8 ),
23542494 VpcId : awssdk .String ("vpc-dummy" ),
23552495 },
2496+ {
2497+ SubnetId : awssdk .String ("subnet-4" ),
2498+ AvailabilityZone : awssdk .String ("us-west-2b" ),
2499+ AvailabilityZoneId : awssdk .String ("usw2-az2" ),
2500+ AvailableIpAddressCount : awssdk .Int32 (8 ),
2501+ VpcId : awssdk .String ("vpc-dummy" ),
2502+ },
23562503 },
23572504 want : []ec2types.Subnet {
23582505 {
@@ -2401,6 +2548,13 @@ func Test_defaultSubnetsResolver_chooseSubnetsPerAZ(t *testing.T) {
24012548 AvailableIpAddressCount : awssdk .Int32 (8 ),
24022549 VpcId : awssdk .String ("vpc-dummy" ),
24032550 },
2551+ {
2552+ SubnetId : awssdk .String ("subnet-4" ),
2553+ AvailabilityZone : awssdk .String ("us-west-2b" ),
2554+ AvailabilityZoneId : awssdk .String ("usw2-az2" ),
2555+ AvailableIpAddressCount : awssdk .Int32 (8 ),
2556+ VpcId : awssdk .String ("vpc-dummy" ),
2557+ },
24042558 },
24052559 want : []ec2types.Subnet {
24062560 {
0 commit comments