@@ -1089,54 +1089,35 @@ func validateNetworking(cluster *kops.Cluster, v *kops.NetworkingSpec, fldPath *
1089
1089
allErrs = append (allErrs , validateTopology (cluster , v .Topology , fldPath .Child ("topology" ))... )
1090
1090
}
1091
1091
1092
- optionTaken := false
1093
-
1094
1092
if v .Classic != nil {
1095
1093
allErrs = append (allErrs , field .Invalid (fldPath , "classic" , "classic networking is not supported" ))
1096
1094
}
1097
1095
1098
1096
if v .Kubenet != nil {
1099
- optionTaken = true
1100
-
1101
1097
if cluster .Spec .IsIPv6Only () {
1102
1098
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("kubenet" ), "Kubenet does not support IPv6" ))
1103
1099
}
1104
1100
}
1105
1101
1106
1102
if v .External != nil {
1107
- if optionTaken {
1108
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("external" ), "only one networking option permitted" ))
1109
- }
1110
-
1111
1103
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("external" ), "external is not supported for Kubernetes >= 1.26" ))
1112
- optionTaken = true
1113
1104
}
1114
1105
1115
1106
if v .Kopeio != nil {
1116
- if optionTaken {
1117
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("kopeio" ), "only one networking option permitted" ))
1118
- }
1119
- optionTaken = true
1120
-
1121
1107
if cluster .Spec .IsIPv6Only () {
1122
1108
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("kopeio" ), "Kopeio does not support IPv6" ))
1123
1109
}
1124
1110
}
1125
1111
1126
- if v . CNI != nil && optionTaken {
1127
- allErrs = append ( allErrs , field . Forbidden ( fldPath . Child ( "cni" ), "only one networking option permitted" ))
1128
- }
1112
+ // Nothing to validate for CNI
1113
+ // if v.CNI != nil {
1114
+ // }
1129
1115
1130
1116
if v .Weave != nil {
1131
1117
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("weave" ), "Weave is no longer supported" ))
1132
1118
}
1133
1119
1134
1120
if v .Flannel != nil {
1135
- if optionTaken {
1136
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("flannel" ), "only one networking option permitted" ))
1137
- }
1138
- optionTaken = true
1139
-
1140
1121
if cluster .IsKubernetesGTE ("1.28" ) {
1141
1122
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("flannel" ), "Flannel is not supported for Kubernetes >= 1.28" ))
1142
1123
} else {
@@ -1145,20 +1126,10 @@ func validateNetworking(cluster *kops.Cluster, v *kops.NetworkingSpec, fldPath *
1145
1126
}
1146
1127
1147
1128
if v .Calico != nil {
1148
- if optionTaken {
1149
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("calico" ), "only one networking option permitted" ))
1150
- }
1151
- optionTaken = true
1152
-
1153
1129
allErrs = append (allErrs , validateNetworkingCalico (& cluster .Spec , v .Calico , fldPath .Child ("calico" ))... )
1154
1130
}
1155
1131
1156
1132
if v .Canal != nil {
1157
- if optionTaken {
1158
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("canal" ), "only one networking option permitted" ))
1159
- }
1160
- optionTaken = true
1161
-
1162
1133
if cluster .IsKubernetesGTE ("1.28" ) {
1163
1134
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("canal" ), "Canal is not supported for Kubernetes >= 1.28" ))
1164
1135
} else {
@@ -1167,13 +1138,9 @@ func validateNetworking(cluster *kops.Cluster, v *kops.NetworkingSpec, fldPath *
1167
1138
}
1168
1139
1169
1140
if v .KubeRouter != nil {
1170
- if optionTaken {
1171
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("kubeRouter" ), "only one networking option permitted" ))
1172
- }
1173
1141
if c .KubeProxy != nil && (c .KubeProxy .Enabled == nil || * c .KubeProxy .Enabled ) {
1174
1142
allErrs = append (allErrs , field .Forbidden (fldPath .Root ().Child ("spec" , "kubeProxy" , "enabled" ), "kube-router requires kubeProxy to be disabled" ))
1175
1143
}
1176
- optionTaken = true
1177
1144
1178
1145
if cluster .Spec .IsIPv6Only () {
1179
1146
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("kubeRouter" ), "kube-router does not support IPv6" ))
@@ -1185,50 +1152,39 @@ func validateNetworking(cluster *kops.Cluster, v *kops.NetworkingSpec, fldPath *
1185
1152
}
1186
1153
1187
1154
if v .AmazonVPC != nil {
1188
- if optionTaken {
1189
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("amazonVPC" ), "only one networking option permitted" ))
1190
- }
1191
- optionTaken = true
1192
-
1193
1155
if cluster .GetCloudProvider () != kops .CloudProviderAWS {
1194
1156
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("amazonVPC" ), "amazon-vpc-routed-eni networking is supported only in AWS" ))
1195
1157
}
1196
1158
1197
1159
if cluster .Spec .IsIPv6Only () {
1198
1160
allErrs = append (allErrs , field .Forbidden (fldPath .Child ("amazonVPC" ), "amazon-vpc-routed-eni networking does not support IPv6" ))
1199
1161
}
1200
-
1201
1162
}
1202
1163
1203
1164
if v .Cilium != nil {
1204
- if optionTaken {
1205
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("cilium" ), "only one networking option permitted" ))
1206
- }
1207
- optionTaken = true
1208
-
1209
1165
allErrs = append (allErrs , validateNetworkingCilium (cluster , v .Cilium , fldPath .Child ("cilium" ))... )
1210
1166
}
1211
1167
1212
1168
if v .LyftVPC != nil {
1213
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("lyftvp " ), "support for LyftVPC has been removed" ))
1169
+ allErrs = append (allErrs , field .Forbidden (fldPath .Child ("lyftvpc " ), "support for LyftVPC has been removed" ))
1214
1170
}
1215
1171
1216
1172
if v .GCP != nil {
1217
- if optionTaken {
1218
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("gcp" ), "only one networking option permitted" ))
1219
- }
1220
-
1221
1173
allErrs = append (allErrs , validateNetworkingGCP (cluster , v .GCP , fldPath .Child ("gcp" ))... )
1222
1174
}
1223
1175
1224
1176
if v .Kindnet != nil {
1225
- if optionTaken {
1226
- allErrs = append (allErrs , field .Forbidden (fldPath .Child ("kindnet" ), "only one networking option permitted" ))
1227
- }
1228
-
1229
1177
allErrs = append (allErrs , validateNetworkingKindnet (cluster , v .Kindnet , fldPath .Child ("kindnet" ))... )
1230
1178
}
1231
1179
1180
+ options := v .ConfiguredOptions ()
1181
+ if options .Len () > 1 {
1182
+ optionsList := sets .List (options )
1183
+ for _ , option := range optionsList {
1184
+ allErrs = append (allErrs , field .Forbidden (fldPath .Child (option ), fmt .Sprintf ("only one networking option permitted, found %s" , strings .Join (optionsList , ", " ))))
1185
+ }
1186
+ }
1187
+
1232
1188
return allErrs
1233
1189
}
1234
1190
0 commit comments