mirror of https://github.com/kubernetes/kops.git
Make IsValidValue more useful for enum types
This commit is contained in:
parent
e85051b709
commit
43f56de38b
|
|
@ -472,9 +472,9 @@ type AccessLogSpec struct {
|
||||||
BucketPrefix *string `json:"bucketPrefix,omitempty"`
|
BucketPrefix *string `json:"bucketPrefix,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var SupportedLoadBalancerClasses = []string{
|
var SupportedLoadBalancerClasses = []LoadBalancerClass{
|
||||||
string(LoadBalancerClassClassic),
|
LoadBalancerClassClassic,
|
||||||
string(LoadBalancerClassNetwork),
|
LoadBalancerClassNetwork,
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadBalancerSubnetSpec provides configuration for subnets used for a load balancer
|
// LoadBalancerSubnetSpec provides configuration for subnets used for a load balancer
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ var SupportedTopologies = []string{
|
||||||
TopologyPrivate,
|
TopologyPrivate,
|
||||||
}
|
}
|
||||||
|
|
||||||
var SupportedDnsTypes = []string{
|
var SupportedDnsTypes = []DNSType{
|
||||||
string(DNSTypePublic),
|
DNSTypePublic,
|
||||||
string(DNSTypePrivate),
|
DNSTypePrivate,
|
||||||
string(DNSTypeNone),
|
DNSTypeNone,
|
||||||
}
|
}
|
||||||
|
|
||||||
type TopologySpec struct {
|
type TopologySpec struct {
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,7 @@ func awsValidateCluster(c *kops.Cluster) field.ErrorList {
|
||||||
if c.Spec.API.LoadBalancer != nil {
|
if c.Spec.API.LoadBalancer != nil {
|
||||||
lbPath := field.NewPath("spec", "api", "loadBalancer")
|
lbPath := field.NewPath("spec", "api", "loadBalancer")
|
||||||
lbSpec := c.Spec.API.LoadBalancer
|
lbSpec := c.Spec.API.LoadBalancer
|
||||||
value := string(lbSpec.Class)
|
allErrs = append(allErrs, IsValidValue(lbPath.Child("class"), &lbSpec.Class, kops.SupportedLoadBalancerClasses)...)
|
||||||
allErrs = append(allErrs, IsValidValue(lbPath.Child("class"), &value, kops.SupportedLoadBalancerClasses)...)
|
|
||||||
allErrs = append(allErrs, awsValidateTopologyDNS(lbPath.Child("type"), c)...)
|
allErrs = append(allErrs, awsValidateTopologyDNS(lbPath.Child("type"), c)...)
|
||||||
allErrs = append(allErrs, awsValidateSecurityGroupOverride(lbPath.Child("securityGroupOverride"), lbSpec)...)
|
allErrs = append(allErrs, awsValidateSecurityGroupOverride(lbPath.Child("securityGroupOverride"), lbSpec)...)
|
||||||
allErrs = append(allErrs, awsValidateAdditionalSecurityGroups(lbPath.Child("additionalSecurityGroups"), lbSpec.AdditionalSecurityGroups)...)
|
allErrs = append(allErrs, awsValidateAdditionalSecurityGroups(lbPath.Child("additionalSecurityGroups"), lbSpec.AdditionalSecurityGroups)...)
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ func isValidAPIServersURL(s string) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsValidValue(fldPath *field.Path, v *string, validValues []string) field.ErrorList {
|
func IsValidValue[T ~string](fldPath *field.Path, v *T, validValues []T) field.ErrorList {
|
||||||
allErrs := field.ErrorList{}
|
allErrs := field.ErrorList{}
|
||||||
if v != nil {
|
if v != nil {
|
||||||
found := false
|
found := false
|
||||||
|
|
@ -44,7 +44,11 @@ func IsValidValue(fldPath *field.Path, v *string, validValues []string) field.Er
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !found {
|
if !found {
|
||||||
allErrs = append(allErrs, field.NotSupported(fldPath, *v, validValues))
|
var valid []string
|
||||||
|
for _, v := range validValues {
|
||||||
|
valid = append(valid, string(v))
|
||||||
|
}
|
||||||
|
allErrs = append(allErrs, field.NotSupported(fldPath, *v, valid))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return allErrs
|
return allErrs
|
||||||
|
|
|
||||||
|
|
@ -437,10 +437,9 @@ func validateTopology(c *kops.Cluster, topology *kops.TopologySpec, fieldPath *f
|
||||||
|
|
||||||
if topology.DNS != "" {
|
if topology.DNS != "" {
|
||||||
cloud := c.Spec.GetCloudProvider()
|
cloud := c.Spec.GetCloudProvider()
|
||||||
value := string(topology.DNS)
|
allErrs = append(allErrs, IsValidValue(fieldPath.Child("dns", "type"), &topology.DNS, kops.SupportedDnsTypes)...)
|
||||||
allErrs = append(allErrs, IsValidValue(fieldPath.Child("dns", "type"), &value, kops.SupportedDnsTypes)...)
|
if topology.DNS == kops.DNSTypeNone && cloud != kops.CloudProviderHetzner && cloud != kops.CloudProviderAWS && cloud != kops.CloudProviderGCE {
|
||||||
if value == string(kops.DNSTypeNone) && cloud != kops.CloudProviderHetzner && cloud != kops.CloudProviderAWS && cloud != kops.CloudProviderGCE {
|
allErrs = append(allErrs, field.Invalid(fieldPath.Child("dns", "type"), topology.DNS, fmt.Sprintf("not supported for %q", c.Spec.GetCloudProvider())))
|
||||||
allErrs = append(allErrs, field.Invalid(fieldPath.Child("dns", "type"), &value, fmt.Sprintf("not supported for %q", c.Spec.GetCloudProvider())))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -523,11 +522,11 @@ func validateSubnet(subnet *kops.ClusterSubnetSpec, c *kops.ClusterSpec, fieldPa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
allErrs = append(allErrs, IsValidValue(fieldPath.Child("type"), fi.PtrTo(string(subnet.Type)), []string{
|
allErrs = append(allErrs, IsValidValue(fieldPath.Child("type"), &subnet.Type, []kops.SubnetType{
|
||||||
string(kops.SubnetTypePublic),
|
kops.SubnetTypePublic,
|
||||||
string(kops.SubnetTypePrivate),
|
kops.SubnetTypePrivate,
|
||||||
string(kops.SubnetTypeDualStack),
|
kops.SubnetTypeDualStack,
|
||||||
string(kops.SubnetTypeUtility),
|
kops.SubnetTypeUtility,
|
||||||
})...)
|
})...)
|
||||||
|
|
||||||
if subnet.Type == kops.SubnetTypeDualStack && !c.IsIPv6Only() {
|
if subnet.Type == kops.SubnetTypeDualStack && !c.IsIPv6Only() {
|
||||||
|
|
@ -1047,8 +1046,7 @@ func validateNetworkingCilium(cluster *kops.Cluster, v *kops.CiliumNetworkingSpe
|
||||||
allErrs = append(allErrs, field.Forbidden(fldPath.Child("encryptionType"), "encryptionType requires enableEncryption"))
|
allErrs = append(allErrs, field.Forbidden(fldPath.Child("encryptionType"), "encryptionType requires enableEncryption"))
|
||||||
}
|
}
|
||||||
|
|
||||||
encryptionType := string(v.EncryptionType)
|
allErrs = append(allErrs, IsValidValue(fldPath.Child("encryptionType"), &v.EncryptionType, []kops.CiliumEncryptionType{kops.CiliumEncryptionTypeIPSec, kops.CiliumEncryptionTypeWireguard})...)
|
||||||
allErrs = append(allErrs, IsValidValue(fldPath.Child("encryptionType"), &encryptionType, []string{"ipsec", "wireguard"})...)
|
|
||||||
|
|
||||||
if v.EncryptionType == "wireguard" {
|
if v.EncryptionType == "wireguard" {
|
||||||
// Cilium with Wireguard integration follow-up --> https://github.com/cilium/cilium/issues/15462.
|
// Cilium with Wireguard integration follow-up --> https://github.com/cilium/cilium/issues/15462.
|
||||||
|
|
@ -1131,8 +1129,7 @@ func validateAdditionalPolicy(role string, policy string, fldPath *field.Path) f
|
||||||
if statement.Effect == "" {
|
if statement.Effect == "" {
|
||||||
allErrs = append(allErrs, field.Required(fldEffect, "Effect must be specified for IAM policy"))
|
allErrs = append(allErrs, field.Required(fldEffect, "Effect must be specified for IAM policy"))
|
||||||
} else {
|
} else {
|
||||||
value := string(statement.Effect)
|
allErrs = append(allErrs, IsValidValue(fldEffect, &statement.Effect, []iam.StatementEffect{iam.StatementEffectAllow, iam.StatementEffectDeny})...)
|
||||||
allErrs = append(allErrs, IsValidValue(fldEffect, &value, []string{"Allow", "Deny"})...)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1165,8 +1162,7 @@ func validateEtcdClusterSpec(spec kops.EtcdClusterSpec, c *kops.Cluster, fieldPa
|
||||||
allErrs = append(allErrs, IsValidValue(fieldPath.Child("name"), &spec.Name, []string{"cilium", "main", "events"})...)
|
allErrs = append(allErrs, IsValidValue(fieldPath.Child("name"), &spec.Name, []string{"cilium", "main", "events"})...)
|
||||||
|
|
||||||
if spec.Provider != "" {
|
if spec.Provider != "" {
|
||||||
value := string(spec.Provider)
|
allErrs = append(allErrs, IsValidValue(fieldPath.Child("provider"), &spec.Provider, []kops.EtcdProviderType{kops.EtcdProviderTypeManager})...)
|
||||||
allErrs = append(allErrs, IsValidValue(fieldPath.Child("provider"), &value, []string{string(kops.EtcdProviderTypeManager)})...)
|
|
||||||
}
|
}
|
||||||
if len(spec.Members) == 0 {
|
if len(spec.Members) == 0 {
|
||||||
allErrs = append(allErrs, field.Required(fieldPath.Child("etcdMembers"), "No members defined in etcd cluster"))
|
allErrs = append(allErrs, field.Required(fieldPath.Child("etcdMembers"), "No members defined in etcd cluster"))
|
||||||
|
|
@ -1654,7 +1650,7 @@ func validateClusterAutoscaler(cluster *kops.Cluster, spec *kops.ClusterAutoscal
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateExternalDNS(cluster *kops.Cluster, spec *kops.ExternalDNSConfig, fldPath *field.Path) (allErrs field.ErrorList) {
|
func validateExternalDNS(cluster *kops.Cluster, spec *kops.ExternalDNSConfig, fldPath *field.Path) (allErrs field.ErrorList) {
|
||||||
allErrs = append(allErrs, IsValidValue(fldPath.Child("provider"), (*string)(&spec.Provider), []string{"", "dns-controller", "external-dns", "none"})...)
|
allErrs = append(allErrs, IsValidValue(fldPath.Child("provider"), &spec.Provider, []kops.ExternalDNSProvider{"", kops.ExternalDNSProviderDNSController, kops.ExternalDNSProviderExternalDNS, kops.ExternalDNSProviderNone})...)
|
||||||
|
|
||||||
if spec.WatchNamespace != "" {
|
if spec.WatchNamespace != "" {
|
||||||
if spec.WatchNamespace != "kube-system" {
|
if spec.WatchNamespace != "kube-system" {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue