diff --git a/pkg/scalers/cpu_memory_scaler.go b/pkg/scalers/cpu_memory_scaler.go index 72233ea13cc..ae8d3e82f30 100644 --- a/pkg/scalers/cpu_memory_scaler.go +++ b/pkg/scalers/cpu_memory_scaler.go @@ -21,10 +21,10 @@ type cpuMemoryScaler struct { } type cpuMemoryMetadata struct { - MetricType string `keda:"name=type,order=triggerMetadata,enum=Utilization;AverageValue"` - Value string `keda:"name=value,order=triggerMetadata"` - ContainerName string `keda:"name=containerName,order=triggerMetadata,optional"` - AverageValue *resource.Quantity + MetricType string `keda:"name=type,order=triggerMetadata,enum=Utilization;AverageValue"` + Value string `keda:"name=value,order=triggerMetadata"` + ContainerName string `keda:"name=containerName,order=triggerMetadata,optional"` + AverageValue *resource.Quantity AverageUtilization *int32 } @@ -49,32 +49,32 @@ func NewCPUMemoryScaler(resourceName v1.ResourceName, config *scalersconfig.Scal } func parseResourceMetadata(config *scalersconfig.ScalerConfig) (cpuMemoryMetadata, error) { - meta := cpuMemoryMetadata{} - err := config.TypedConfig(&meta) - if err != nil { - return meta, err - } - - if config.MetricType != "" { - if meta.MetricType != "" { - return meta, fmt.Errorf("only one of trigger.metadata.type or trigger.metricType should be defined") - } - meta.MetricType = string(config.MetricType) - } - - switch v2.MetricTargetType(meta.MetricType) { - case v2.AverageValueMetricType: - averageValueQuantity := resource.MustParse(meta.Value) - meta.AverageValue = &averageValueQuantity - case v2.UtilizationMetricType: - utilizationNum, err := parseUtilization(meta.Value) - if err != nil { - return meta, err - } - meta.AverageUtilization = utilizationNum - } - - return meta, nil + meta := cpuMemoryMetadata{} + err := config.TypedConfig(&meta) + if err != nil { + return meta, err + } + + if config.MetricType != "" { + if meta.MetricType != "" { + return meta, fmt.Errorf("only one of trigger.metadata.type or trigger.metricType should be defined") + } + meta.MetricType = string(config.MetricType) + } + + switch v2.MetricTargetType(meta.MetricType) { + case v2.AverageValueMetricType: + averageValueQuantity := resource.MustParse(meta.Value) + meta.AverageValue = &averageValueQuantity + case v2.UtilizationMetricType: + utilizationNum, err := parseUtilization(meta.Value) + if err != nil { + return meta, err + } + meta.AverageUtilization = utilizationNum + } + + return meta, nil } func parseUtilization(value string) (*int32, error) { @@ -94,7 +94,7 @@ func (s *cpuMemoryScaler) Close(context.Context) error { // GetMetricSpecForScaling returns the metric spec for the HPA func (s *cpuMemoryScaler) GetMetricSpecForScaling(context.Context) []v2.MetricSpec { metricType := v2.MetricTargetType(s.metadata.MetricType) - + var metricSpec v2.MetricSpec if s.metadata.ContainerName != "" { containerCPUMemoryMetric := &v2.ContainerResourceMetricSource{ diff --git a/pkg/scalers/cpu_memory_scaler_test.go b/pkg/scalers/cpu_memory_scaler_test.go index 81f7ea9df9a..9092137dc69 100644 --- a/pkg/scalers/cpu_memory_scaler_test.go +++ b/pkg/scalers/cpu_memory_scaler_test.go @@ -4,7 +4,6 @@ import ( "context" "testing" - "github.com/go-logr/logr" "github.com/stretchr/testify/assert" v2 "k8s.io/api/autoscaling/v2" v1 "k8s.io/api/core/v1" @@ -13,12 +12,11 @@ import ( ) type parseCPUMemoryMetadataTestData struct { - metricType v2.MetricTargetType + metricType string metadata map[string]string isError bool } -// A complete valid metadata example for reference var validCPUMemoryMetadata = map[string]string{ "type": "Utilization", "value": "50", @@ -34,11 +32,11 @@ var testCPUMemoryMetadata = []parseCPUMemoryMetadataTestData{ {"", validCPUMemoryMetadata, false}, {"", validContainerCPUMemoryMetadata, false}, {"", map[string]string{"type": "Utilization", "value": "50"}, false}, - {v2.UtilizationMetricType, map[string]string{"value": "50"}, false}, + {"Utilization", map[string]string{"value": "50"}, false}, {"", map[string]string{"type": "AverageValue", "value": "50"}, false}, - {v2.AverageValueMetricType, map[string]string{"value": "50"}, false}, + {"AverageValue", map[string]string{"value": "50"}, false}, {"", map[string]string{"type": "Value", "value": "50"}, true}, - {v2.ValueMetricType, map[string]string{"value": "50"}, true}, + {"Value", map[string]string{"value": "50"}, true}, {"", map[string]string{"type": "AverageValue"}, true}, {"", map[string]string{"type": "xxx", "value": "50"}, true}, } @@ -47,9 +45,9 @@ func TestCPUMemoryParseMetadata(t *testing.T) { for _, testData := range testCPUMemoryMetadata { config := &scalersconfig.ScalerConfig{ TriggerMetadata: testData.metadata, - MetricType: testData.metricType, + MetricType: v2.MetricTargetType(testData.metricType), } - _, err := parseResourceMetadata(config, logr.Discard()) + _, err := parseResourceMetadata(config) if err != nil && !testData.isError { t.Error("Expected success but got error", err) }