diff --git a/pkg/controller/scheduler_daemonset_fixture_test.go b/pkg/controller/scheduler_daemonset_fixture_test.go index 7b7cfb7d..354874f5 100644 --- a/pkg/controller/scheduler_daemonset_fixture_test.go +++ b/pkg/controller/scheduler_daemonset_fixture_test.go @@ -356,6 +356,10 @@ func newDaemonSetTestCanaryAB() *flaggerv1.Canary { Min: toFloatPtr(0), Max: toFloatPtr(500000), }, + TemplateRef: &flaggerv1.CrossNamespaceObjectReference{ + Name: "envoy", + Namespace: "default", + }, Interval: "1m", Query: "fake", }, diff --git a/pkg/controller/scheduler_deployment_fixture_test.go b/pkg/controller/scheduler_deployment_fixture_test.go index c08c4541..4ad0ad6e 100644 --- a/pkg/controller/scheduler_deployment_fixture_test.go +++ b/pkg/controller/scheduler_deployment_fixture_test.go @@ -396,6 +396,10 @@ func newDeploymentTestCanaryAB() *flaggerv1.Canary { Min: toFloatPtr(0), Max: toFloatPtr(500000), }, + TemplateRef: &flaggerv1.CrossNamespaceObjectReference{ + Name: "envoy", + Namespace: "default", + }, Interval: "1m", Query: "fake", }, diff --git a/pkg/controller/scheduler_metrics.go b/pkg/controller/scheduler_metrics.go index 960db811..6d2d3c82 100644 --- a/pkg/controller/scheduler_metrics.go +++ b/pkg/controller/scheduler_metrics.go @@ -306,6 +306,9 @@ func (c *Controller) runMetricChecks(canary *flaggerv1.Canary) bool { canary.Name, canary.Namespace, metric.Name, val, metric.Threshold) return false } + } else if metric.Name != "request-success-rate" && metric.Name != "request-duration" { + c.recordEventErrorf(canary, "Metric query failed for no usable metrics template were configured") + return false } } diff --git a/pkg/controller/scheduler_metrics_test.go b/pkg/controller/scheduler_metrics_test.go index 0f70c17e..13ebcb59 100644 --- a/pkg/controller/scheduler_metrics_test.go +++ b/pkg/controller/scheduler_metrics_test.go @@ -107,4 +107,36 @@ func TestController_runMetricChecks(t *testing.T) { } assert.Equal(t, true, ctrl.runMetricChecks(canary)) }) + + t.Run("undefined metric", func(t *testing.T) { + ctrl := newDeploymentFixture(nil).ctrl + analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{ + Name: "undefined metric", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(100), + }, + }}} + canary := &flaggerv1.Canary{ + ObjectMeta: metav1.ObjectMeta{Namespace: "default"}, + Spec: flaggerv1.CanarySpec{Analysis: analysis}, + } + assert.Equal(t, false, ctrl.runMetricChecks(canary)) + }) + + t.Run("builtinMetric", func(t *testing.T) { + ctrl := newDeploymentFixture(nil).ctrl + analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{ + Name: "request-success-rate", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(100), + }, + }}} + canary := &flaggerv1.Canary{ + ObjectMeta: metav1.ObjectMeta{Namespace: "default"}, + Spec: flaggerv1.CanarySpec{Analysis: analysis}, + } + assert.Equal(t, true, ctrl.runMetricChecks(canary)) + }) }