From ec552e6dc6cc874165990b9adc885a43cc9eab01 Mon Sep 17 00:00:00 2001 From: Krzysztof Wiatrzyk Date: Wed, 4 Nov 2020 11:48:34 +0100 Subject: [PATCH] Add flag value validation of TopologyManagerPolicy Signed-off-by: Krzysztof Wiatrzyk --- pkg/kubelet/apis/config/validation/validation.go | 10 +++++++++- pkg/kubelet/apis/config/validation/validation_test.go | 7 +++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/kubelet/apis/config/validation/validation.go b/pkg/kubelet/apis/config/validation/validation.go index fb3dac311bc..f2db970ee15 100644 --- a/pkg/kubelet/apis/config/validation/validation.go +++ b/pkg/kubelet/apis/config/validation/validation.go @@ -123,7 +123,15 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration) error allErrors = append(allErrors, fmt.Errorf("invalid configuration: serverTLSBootstrap %v requires feature gate RotateKubeletServerCertificate", kc.ServerTLSBootstrap)) } if kc.TopologyManagerPolicy != kubeletconfig.NoneTopologyManagerPolicy && !localFeatureGate.Enabled(features.TopologyManager) { - allErrors = append(allErrors, fmt.Errorf("invalid configuration: topologyManager %v requires feature gate TopologyManager", kc.TopologyManagerPolicy)) + allErrors = append(allErrors, fmt.Errorf("invalid configuration: topologyManagerPolicy %v requires feature gate TopologyManager", kc.TopologyManagerPolicy)) + } + switch kc.TopologyManagerPolicy { + case kubeletconfig.NoneTopologyManagerPolicy: + case kubeletconfig.BestEffortTopologyManagerPolicy: + case kubeletconfig.RestrictedTopologyManagerPolicy: + case kubeletconfig.SingleNumaNodeTopologyManagerPolicy: + default: + allErrors = append(allErrors, fmt.Errorf("invalid configuration: topologyManagerPolicy non-allowable value: %v", kc.TopologyManagerPolicy)) } if kc.TopologyManagerScope != kubeletconfig.ContainerTopologyManagerScope && !localFeatureGate.Enabled(features.TopologyManager) { allErrors = append(allErrors, fmt.Errorf("invalid configuration: topologyManagerScope %v requires feature gate TopologyManager", kc.TopologyManagerScope)) diff --git a/pkg/kubelet/apis/config/validation/validation_test.go b/pkg/kubelet/apis/config/validation/validation_test.go index 851fec3941a..72b53e971fc 100644 --- a/pkg/kubelet/apis/config/validation/validation_test.go +++ b/pkg/kubelet/apis/config/validation/validation_test.go @@ -54,6 +54,7 @@ func TestValidateKubeletConfiguration(t *testing.T) { NodeLeaseDurationSeconds: 1, CPUCFSQuotaPeriod: metav1.Duration{Duration: 25 * time.Millisecond}, TopologyManagerScope: kubeletconfig.PodTopologyManagerScope, + TopologyManagerPolicy: kubeletconfig.SingleNumaNodeTopologyManagerPolicy, FeatureGates: map[string]bool{ "CustomCPUCFSQuotaPeriod": true, }, @@ -91,6 +92,7 @@ func TestValidateKubeletConfiguration(t *testing.T) { CPUCFSQuotaPeriod: metav1.Duration{Duration: 50 * time.Millisecond}, ReservedSystemCPUs: "0-3", TopologyManagerScope: kubeletconfig.ContainerTopologyManagerScope, + TopologyManagerPolicy: kubeletconfig.NoneTopologyManagerPolicy, FeatureGates: map[string]bool{ "CustomCPUCFSQuotaPeriod": true, }, @@ -125,7 +127,7 @@ func TestValidateKubeletConfiguration(t *testing.T) { NodeLeaseDurationSeconds: -1, CPUCFSQuotaPeriod: metav1.Duration{Duration: 100 * time.Millisecond}, } - const numErrsErrorCase1 = 26 + const numErrsErrorCase1 = 27 if allErrors := ValidateKubeletConfiguration(errorCase1); len(allErrors.(utilerrors.Aggregate).Errors()) != numErrsErrorCase1 { t.Errorf("expect %d errors, got %v", numErrsErrorCase1, len(allErrors.(utilerrors.Aggregate).Errors())) } @@ -159,11 +161,12 @@ func TestValidateKubeletConfiguration(t *testing.T) { CPUCFSQuotaPeriod: metav1.Duration{Duration: 50 * time.Millisecond}, ReservedSystemCPUs: "0-3", TopologyManagerScope: "invalid", + TopologyManagerPolicy: "invalid", FeatureGates: map[string]bool{ "CustomCPUCFSQuotaPeriod": true, }, } - const numErrsErrorCase2 = 2 + const numErrsErrorCase2 = 3 if allErrors := ValidateKubeletConfiguration(errorCase2); len(allErrors.(utilerrors.Aggregate).Errors()) != numErrsErrorCase2 { t.Errorf("expect %d errors, got %v", numErrsErrorCase2, len(allErrors.(utilerrors.Aggregate).Errors())) }