From 4a9e3182c62fa7ca6c9a2de2cc154a6690a9ea0a Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Thu, 20 Jun 2019 14:50:21 +0300 Subject: [PATCH 1/3] Add the mesh provider field to canary CRD --- artifacts/flagger/crd.yaml | 2 ++ charts/flagger/templates/crd.yaml | 2 ++ pkg/apis/flagger/v1alpha3/types.go | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/artifacts/flagger/crd.yaml b/artifacts/flagger/crd.yaml index 3dffd621..b1467d67 100644 --- a/artifacts/flagger/crd.yaml +++ b/artifacts/flagger/crd.yaml @@ -45,6 +45,8 @@ spec: - service - canaryAnalysis properties: + provider: + type: string progressDeadlineSeconds: type: number targetRef: diff --git a/charts/flagger/templates/crd.yaml b/charts/flagger/templates/crd.yaml index 44b3a115..a6eb7409 100644 --- a/charts/flagger/templates/crd.yaml +++ b/charts/flagger/templates/crd.yaml @@ -46,6 +46,8 @@ spec: - service - canaryAnalysis properties: + provider: + type: string progressDeadlineSeconds: type: number targetRef: diff --git a/pkg/apis/flagger/v1alpha3/types.go b/pkg/apis/flagger/v1alpha3/types.go index a07900aa..3d5b0364 100755 --- a/pkg/apis/flagger/v1alpha3/types.go +++ b/pkg/apis/flagger/v1alpha3/types.go @@ -45,6 +45,10 @@ type Canary struct { // CanarySpec is the spec for a Canary resource type CanarySpec struct { + // if specified overwrites the -mesh-provider flag for this particular canary + // +optional + Provider string `json:"provider,omitempty"` + // reference to target resource TargetRef hpav1.CrossVersionObjectReference `json:"targetRef"` From 63cb8a5ba55c2050836d6605fea815ed0ed9e905 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Thu, 20 Jun 2019 14:52:43 +0300 Subject: [PATCH 2/3] Lookup the canary provider field during reconciliation Override the global provider if one is specified in the canary spec --- pkg/controller/scheduler.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/controller/scheduler.go b/pkg/controller/scheduler.go index a6f9ddd3..943a9809 100644 --- a/pkg/controller/scheduler.go +++ b/pkg/controller/scheduler.go @@ -90,10 +90,16 @@ func (c *Controller) advanceCanary(name string, namespace string, skipLivenessCh primaryName := fmt.Sprintf("%s-primary", cd.Spec.TargetRef.Name) + // override the global provider if one is specified in the canary spec + provider := c.meshProvider + if cd.Spec.Provider != "" { + provider = cd.Spec.Provider + } + // create primary deployment and hpa if needed // skip primary check for Istio since the deployment will become ready after the ClusterIP are created skipPrimaryCheck := false - if skipLivenessChecks || strings.Contains(c.meshProvider, "istio") { + if skipLivenessChecks || strings.Contains(provider, "istio") { skipPrimaryCheck = true } label, ports, err := c.deployer.Initialize(cd, skipPrimaryCheck) @@ -103,7 +109,7 @@ func (c *Controller) advanceCanary(name string, namespace string, skipLivenessCh } // init routers - meshRouter := c.routerFactory.MeshRouter(c.meshProvider) + meshRouter := c.routerFactory.MeshRouter(provider) // create or update ClusterIP services if err := c.routerFactory.KubernetesRouter(label, ports).Reconcile(cd); err != nil { From fd23a2f98f01cb9696fa6c50224eaa1f9b88aab4 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Thu, 20 Jun 2019 15:11:43 +0300 Subject: [PATCH 3/3] Add kubernetes provider type Synonym to provider `none`, to be used for blue/green deployments --- pkg/router/factory.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/router/factory.go b/pkg/router/factory.go index 0a13eead..a14fef68 100644 --- a/pkg/router/factory.go +++ b/pkg/router/factory.go @@ -47,6 +47,8 @@ func (factory *Factory) MeshRouter(provider string) Interface { switch { case provider == "none": return &NopRouter{} + case provider == "kubernetes": + return &NopRouter{} case provider == "nginx": return &IngressRouter{ logger: factory.logger,