diff --git a/pkg/framework/plugins/nodeutilization/validation.go b/pkg/framework/plugins/nodeutilization/validation.go index 6ac48b72af..885f1b63b1 100644 --- a/pkg/framework/plugins/nodeutilization/validation.go +++ b/pkg/framework/plugins/nodeutilization/validation.go @@ -63,6 +63,12 @@ func ValidateLowNodeUtilizationArgs(obj runtime.Object) error { return err } if args.MetricsUtilization != nil { + if args.MetricsUtilization.Source == "" && !args.MetricsUtilization.MetricsServer { + return fmt.Errorf("metrics source is empty") + } + if args.MetricsUtilization.Source != "" && args.MetricsUtilization.Source != api.KubernetesMetrics && args.MetricsUtilization.Source != api.PrometheusMetrics { + return fmt.Errorf("unrecognized metrics source") + } if args.MetricsUtilization.Source == api.KubernetesMetrics && args.MetricsUtilization.MetricsServer { return fmt.Errorf("it is not allowed to set both %q source and metricsServer", api.KubernetesMetrics) } diff --git a/pkg/framework/plugins/nodeutilization/validation_test.go b/pkg/framework/plugins/nodeutilization/validation_test.go index 1f82ccc5c4..a5cb810d33 100644 --- a/pkg/framework/plugins/nodeutilization/validation_test.go +++ b/pkg/framework/plugins/nodeutilization/validation_test.go @@ -203,6 +203,25 @@ func TestValidateLowNodeUtilizationPluginConfig(t *testing.T) { }, errInfo: fmt.Errorf("it is not allowed to set both \"KubernetesMetrics\" source and metricsServer"), }, + { + name: "legacy metrics server without metrics source", + args: &LowNodeUtilizationArgs{ + Thresholds: api.ResourceThresholds{ + v1.ResourceCPU: 20, + v1.ResourceMemory: 20, + extendedResource: 20, + }, + TargetThresholds: api.ResourceThresholds{ + v1.ResourceCPU: 80, + v1.ResourceMemory: 80, + extendedResource: 80, + }, + MetricsUtilization: &MetricsUtilization{ + MetricsServer: true, + }, + }, + errInfo: nil, + }, { name: "missing prometheus query", args: &LowNodeUtilizationArgs{ @@ -242,6 +261,42 @@ func TestValidateLowNodeUtilizationPluginConfig(t *testing.T) { }, errInfo: fmt.Errorf("prometheus configuration is not allowed to set when source is set to \"KubernetesMetrics\""), }, + { + name: "metrics utilization without metrics source", + args: &LowNodeUtilizationArgs{ + Thresholds: api.ResourceThresholds{ + v1.ResourceCPU: 20, + v1.ResourceMemory: 20, + extendedResource: 20, + }, + TargetThresholds: api.ResourceThresholds{ + v1.ResourceCPU: 80, + v1.ResourceMemory: 80, + extendedResource: 80, + }, + MetricsUtilization: &MetricsUtilization{}, + }, + errInfo: fmt.Errorf("metrics source is empty"), + }, + { + name: "unknown metrics source", + args: &LowNodeUtilizationArgs{ + Thresholds: api.ResourceThresholds{ + v1.ResourceCPU: 20, + v1.ResourceMemory: 20, + extendedResource: 20, + }, + TargetThresholds: api.ResourceThresholds{ + v1.ResourceCPU: 80, + v1.ResourceMemory: 80, + extendedResource: 80, + }, + MetricsUtilization: &MetricsUtilization{ + Source: api.MetricsSource("UnknownMetrics"), + }, + }, + errInfo: fmt.Errorf("unrecognized metrics source"), + }, } for _, testCase := range tests {