From 854d7665f00875e81d963ded59ff194bc4393ea7 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Fri, 8 May 2020 13:15:37 +0300 Subject: [PATCH] Add AppMesh v1beta2 to factories --- pkg/controller/finalizer.go | 2 +- .../scheduler_daemonset_fixture_test.go | 2 +- .../scheduler_deployment_fixture_test.go | 2 +- pkg/metrics/observers/factory.go | 2 +- pkg/router/factory.go | 86 +++++++++---------- 5 files changed, 43 insertions(+), 51 deletions(-) diff --git a/pkg/controller/finalizer.go b/pkg/controller/finalizer.go index 50596272..4ea2a139 100644 --- a/pkg/controller/finalizer.go +++ b/pkg/controller/finalizer.go @@ -79,7 +79,7 @@ func (c *Controller) revertMesh(r *flaggerv1.Canary) error { provider = r.Spec.Provider } - meshRouter := c.routerFactory.MeshRouter(provider) + meshRouter := c.routerFactory.MeshRouter(provider, "") if err := meshRouter.Finalize(r); err != nil { return fmt.Errorf("meshRouter.Finlize failed: %w", err) } diff --git a/pkg/controller/scheduler_daemonset_fixture_test.go b/pkg/controller/scheduler_daemonset_fixture_test.go index cb70efcf..02d8778c 100644 --- a/pkg/controller/scheduler_daemonset_fixture_test.go +++ b/pkg/controller/scheduler_daemonset_fixture_test.go @@ -110,7 +110,7 @@ func newDaemonSetFixture(c *flaggerv1.Canary) daemonSetFixture { ctrl.flaggerInformers.MetricInformer.Informer().GetIndexer().Add(newDaemonSetTestMetricTemplate()) ctrl.flaggerInformers.AlertInformer.Informer().GetIndexer().Add(newDaemonSetTestAlertProvider()) - meshRouter := rf.MeshRouter("istio") + meshRouter := rf.MeshRouter("istio", "") return daemonSetFixture{ canary: c, diff --git a/pkg/controller/scheduler_deployment_fixture_test.go b/pkg/controller/scheduler_deployment_fixture_test.go index f44415d6..fadf8366 100644 --- a/pkg/controller/scheduler_deployment_fixture_test.go +++ b/pkg/controller/scheduler_deployment_fixture_test.go @@ -138,7 +138,7 @@ func newDeploymentFixture(c *flaggerv1.Canary) fixture { ctrl.flaggerInformers.MetricInformer.Informer().GetIndexer().Add(newDeploymentTestMetricTemplate()) ctrl.flaggerInformers.AlertInformer.Informer().GetIndexer().Add(newDeploymentTestAlertProvider()) - meshRouter := rf.MeshRouter("istio") + meshRouter := rf.MeshRouter("istio", "") return fixture{ canary: c, diff --git a/pkg/metrics/observers/factory.go b/pkg/metrics/observers/factory.go index 15824b19..35555c7c 100644 --- a/pkg/metrics/observers/factory.go +++ b/pkg/metrics/observers/factory.go @@ -28,7 +28,7 @@ func NewFactory(metricsServer string) (*Factory, error) { func (factory Factory) Observer(provider string) Interface { switch { - case provider == flaggerv1.AppMeshProvider: + case strings.HasPrefix(provider, flaggerv1.AppMeshProvider): return &AppMeshObserver{ client: factory.Client, } diff --git a/pkg/router/factory.go b/pkg/router/factory.go index 5e28868a..9efcf8a6 100644 --- a/pkg/router/factory.go +++ b/pkg/router/factory.go @@ -7,6 +7,7 @@ import ( "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" + flaggerv1 "github.com/weaveworks/flagger/pkg/apis/flagger/v1beta1" clientset "github.com/weaveworks/flagger/pkg/client/clientset/versioned" ) @@ -51,27 +52,40 @@ func (factory *Factory) KubernetesRouter(kind string, labelSelector string, port } // MeshRouter returns a service mesh router -func (factory *Factory) MeshRouter(provider string) Interface { +func (factory *Factory) MeshRouter(provider string, labelSelector string) Interface { switch { - case provider == "none": - return &NopRouter{} - case provider == "kubernetes": - return &NopRouter{} - case provider == "nginx": - return &IngressRouter{ - logger: factory.logger, - kubeClient: factory.kubeClient, - annotationsPrefix: factory.ingressAnnotationsPrefix, + case strings.HasPrefix(provider, flaggerv1.AppMeshProvider+":v1beta2"): + return &AppMeshv1beta2Router{ + logger: factory.logger, + flaggerClient: factory.flaggerClient, + kubeClient: factory.kubeClient, + appmeshClient: factory.meshClient, + labelSelector: labelSelector, } - case provider == "appmesh": + case provider == flaggerv1.AppMeshProvider: return &AppMeshRouter{ logger: factory.logger, flaggerClient: factory.flaggerClient, kubeClient: factory.kubeClient, appmeshClient: factory.meshClient, } - case strings.HasPrefix(provider, "smi:"): - mesh := strings.TrimPrefix(provider, "smi:") + case provider == flaggerv1.LinkerdProvider: + return &SmiRouter{ + logger: factory.logger, + flaggerClient: factory.flaggerClient, + kubeClient: factory.kubeClient, + smiClient: factory.meshClient, + targetMesh: flaggerv1.LinkerdProvider, + } + case provider == flaggerv1.IstioProvider: + return &IstioRouter{ + logger: factory.logger, + flaggerClient: factory.flaggerClient, + kubeClient: factory.kubeClient, + istioClient: factory.meshClient, + } + case strings.HasPrefix(provider, flaggerv1.SMIProvider): + mesh := strings.TrimPrefix(provider, flaggerv1.SMIProvider+":") return &SmiRouter{ logger: factory.logger, flaggerClient: factory.flaggerClient, @@ -79,25 +93,17 @@ func (factory *Factory) MeshRouter(provider string) Interface { smiClient: factory.meshClient, targetMesh: mesh, } - case provider == "linkerd": - return &SmiRouter{ - logger: factory.logger, - flaggerClient: factory.flaggerClient, - kubeClient: factory.kubeClient, - smiClient: factory.meshClient, - targetMesh: "linkerd", - } - case provider == "contour": + case provider == flaggerv1.ContourProvider: return &ContourRouter{ logger: factory.logger, flaggerClient: factory.flaggerClient, kubeClient: factory.kubeClient, contourClient: factory.meshClient, } - case strings.HasPrefix(provider, "gloo"): - upstreamDiscoveryNs := "gloo-system" - if strings.HasPrefix(provider, "gloo:") { - upstreamDiscoveryNs = strings.TrimPrefix(provider, "gloo:") + case strings.HasPrefix(provider, flaggerv1.GlooProvider): + upstreamDiscoveryNs := flaggerv1.GlooProvider + "-system" + if strings.HasPrefix(provider, flaggerv1.GlooProvider+":") { + upstreamDiscoveryNs = strings.TrimPrefix(provider, flaggerv1.GlooProvider+":") } return &GlooRouter{ logger: factory.logger, @@ -106,28 +112,14 @@ func (factory *Factory) MeshRouter(provider string) Interface { glooClient: factory.meshClient, upstreamDiscoveryNs: upstreamDiscoveryNs, } - case strings.HasPrefix(provider, "supergloo:appmesh"): - return &AppMeshRouter{ - logger: factory.logger, - flaggerClient: factory.flaggerClient, - kubeClient: factory.kubeClient, - appmeshClient: factory.meshClient, - } - case strings.HasPrefix(provider, "supergloo:istio"): - return &IstioRouter{ - logger: factory.logger, - flaggerClient: factory.flaggerClient, - kubeClient: factory.kubeClient, - istioClient: factory.meshClient, - } - case strings.HasPrefix(provider, "supergloo:linkerd"): - return &SmiRouter{ - logger: factory.logger, - flaggerClient: factory.flaggerClient, - kubeClient: factory.kubeClient, - smiClient: factory.meshClient, - targetMesh: "linkerd", + case provider == flaggerv1.NGINXProvider: + return &IngressRouter{ + logger: factory.logger, + kubeClient: factory.kubeClient, + annotationsPrefix: factory.ingressAnnotationsPrefix, } + case provider == flaggerv1.KubernetesProvider: + return &NopRouter{} default: return &IstioRouter{ logger: factory.logger,