From f1e41813156be94ee835aa9e1c59545904f3329d Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Wed, 13 Dec 2017 13:29:21 +0800 Subject: [PATCH] Enhance proxy mode validation --- .../apis/kubeproxyconfig/validation/BUILD | 1 + .../kubeproxyconfig/validation/validation.go | 40 +++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/pkg/proxy/apis/kubeproxyconfig/validation/BUILD b/pkg/proxy/apis/kubeproxyconfig/validation/BUILD index 2c8abb0dca..9737c96624 100644 --- a/pkg/proxy/apis/kubeproxyconfig/validation/BUILD +++ b/pkg/proxy/apis/kubeproxyconfig/validation/BUILD @@ -14,6 +14,7 @@ go_library( "//pkg/apis/core/validation:go_default_library", "//pkg/proxy/apis/kubeproxyconfig:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], ) diff --git a/pkg/proxy/apis/kubeproxyconfig/validation/validation.go b/pkg/proxy/apis/kubeproxyconfig/validation/validation.go index 376d281c9d..19be3b386a 100644 --- a/pkg/proxy/apis/kubeproxyconfig/validation/validation.go +++ b/pkg/proxy/apis/kubeproxyconfig/validation/validation.go @@ -24,6 +24,7 @@ import ( "strings" utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig" @@ -150,33 +151,32 @@ func validateProxyMode(mode kubeproxyconfig.ProxyMode, fldPath *field.Path) fiel } func validateProxyModeLinux(mode kubeproxyconfig.ProxyMode, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} + validModes := sets.NewString( + string(kubeproxyconfig.ProxyModeUserspace), + string(kubeproxyconfig.ProxyModeIPTables), + string(kubeproxyconfig.ProxyModeIPVS), + ) - switch mode { - case kubeproxyconfig.ProxyModeUserspace: - case kubeproxyconfig.ProxyModeIPTables: - case kubeproxyconfig.ProxyModeIPVS: - case "": - default: - modes := []string{string(kubeproxyconfig.ProxyModeUserspace), string(kubeproxyconfig.ProxyModeIPTables), string(kubeproxyconfig.ProxyModeIPVS)} - errMsg := fmt.Sprintf("must be %s or blank (blank means the best-available proxy [currently iptables])", strings.Join(modes, ",")) - allErrs = append(allErrs, field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg)) + if mode == "" || validModes.Has(string(mode)) { + return nil } - return allErrs + + errMsg := fmt.Sprintf("must be %s or blank (blank means the best-available proxy [currently iptables])", strings.Join(validModes.List(), ",")) + return field.ErrorList{field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg)} } func validateProxyModeWindows(mode kubeproxyconfig.ProxyMode, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} + validModes := sets.NewString( + string(kubeproxyconfig.ProxyModeUserspace), + string(kubeproxyconfig.ProxyModeKernelspace), + ) - switch mode { - case kubeproxyconfig.ProxyModeUserspace: - case kubeproxyconfig.ProxyModeKernelspace: - default: - modes := []string{string(kubeproxyconfig.ProxyModeUserspace), string(kubeproxyconfig.ProxyModeKernelspace)} - errMsg := fmt.Sprintf("must be %s or blank (blank means the most-available proxy [currently userspace])", strings.Join(modes, ",")) - allErrs = append(allErrs, field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg)) + if mode == "" || validModes.Has(string(mode)) { + return nil } - return allErrs + + errMsg := fmt.Sprintf("must be %s or blank (blank means the most-available proxy [currently userspace])", strings.Join(validModes.List(), ",")) + return field.ErrorList{field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg)} } func validateClientConnectionConfiguration(config kubeproxyconfig.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList {