From 537e8fdaf7b4127f6d13fa76758fe93f856d545f Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Mon, 7 Jan 2019 00:24:43 +0200 Subject: [PATCH] Add canary analysis interval to CRD --- artifacts/canaries/canary.yaml | 2 ++ artifacts/flagger/crd.yaml | 3 +++ charts/flagger/templates/crd.yaml | 3 +++ pkg/apis/flagger/v1alpha2/types.go | 16 ++++++++++++++++ 4 files changed, 24 insertions(+) diff --git a/artifacts/canaries/canary.yaml b/artifacts/canaries/canary.yaml index 5547df55..392dbc13 100644 --- a/artifacts/canaries/canary.yaml +++ b/artifacts/canaries/canary.yaml @@ -27,6 +27,8 @@ spec: hosts: - app.iowa.weavedx.com canaryAnalysis: + # schedule interval (default 60s) + interval: 10s # max number of failed metric checks before rollback threshold: 10 # max traffic percentage routed to canary diff --git a/artifacts/flagger/crd.yaml b/artifacts/flagger/crd.yaml index 6304a390..dbd0d26d 100644 --- a/artifacts/flagger/crd.yaml +++ b/artifacts/flagger/crd.yaml @@ -56,6 +56,9 @@ spec: type: number canaryAnalysis: properties: + interval: + type: string + pattern: "^[0-9]+(m)" threshold: type: number maxWeight: diff --git a/charts/flagger/templates/crd.yaml b/charts/flagger/templates/crd.yaml index 708ecd86..6c0fffaf 100644 --- a/charts/flagger/templates/crd.yaml +++ b/charts/flagger/templates/crd.yaml @@ -57,6 +57,9 @@ spec: type: number canaryAnalysis: properties: + interval: + type: string + pattern: "^[0-9]+(m)" threshold: type: number maxWeight: diff --git a/pkg/apis/flagger/v1alpha2/types.go b/pkg/apis/flagger/v1alpha2/types.go index fc71ff91..dded0929 100755 --- a/pkg/apis/flagger/v1alpha2/types.go +++ b/pkg/apis/flagger/v1alpha2/types.go @@ -19,11 +19,13 @@ package v1alpha2 import ( hpav1 "k8s.io/api/autoscaling/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "time" ) const ( CanaryKind = "Canary" ProgressDeadlineSeconds = 600 + AnalysisInterval = 60 * time.Second ) // +genclient @@ -96,6 +98,7 @@ type CanaryService struct { // CanaryAnalysis is used to describe how the analysis should be done type CanaryAnalysis struct { + Interval string `json:"interval"` Threshold int `json:"threshold"` MaxWeight int `json:"maxWeight"` StepWeight int `json:"stepWeight"` @@ -134,3 +137,16 @@ func (c *Canary) GetProgressDeadlineSeconds() int { return ProgressDeadlineSeconds } + +func (c *Canary) GetAnalysisInterval() time.Duration { + if c.Spec.CanaryAnalysis.Interval == "" { + return AnalysisInterval + } + + interval, err := time.ParseDuration(c.Spec.CanaryAnalysis.Interval) + if err != nil { + return AnalysisInterval + } + + return interval +}