From d27d7f2952aaca10822646ec4ac63db9b95756dd Mon Sep 17 00:00:00 2001 From: Lavkesh Lahngir Date: Thu, 12 Sep 2019 14:27:30 +0800 Subject: [PATCH] [Lavkesh] Add multiple routes for same cluster --- controlplane/target.go | 21 +++++++++++++++------ controlplane/target_test.go | 6 +++--- controlplane/vhost.go | 4 +++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/controlplane/target.go b/controlplane/target.go index 9442ae3..47a48af 100644 --- a/controlplane/target.go +++ b/controlplane/target.go @@ -1,6 +1,9 @@ package controlplane -import "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" +import ( + "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" + "strings" +) func routeMatch(prefix string) route.RouteMatch { return route.RouteMatch{ @@ -31,10 +34,16 @@ type Target struct { } //Route is the route for the current target -func (t *Target) Route() route.Route { - return route.Route{ - Match: routeMatch(t.Prefix), - Action: routeAction(t.Host, t.ClusterName), +func (t *Target) Route() []route.Route { + var routes []route.Route + arr := strings.Split(t.Prefix, ",") + for _, p := range arr { + if len(p) > 0 { + routes = append(routes, route.Route{ + Match: routeMatch(p), + Action: routeAction(t.Host, t.ClusterName), + }) + } } - + return routes } diff --git a/controlplane/target_test.go b/controlplane/target_test.go index 5a25235..87d6f3c 100644 --- a/controlplane/target_test.go +++ b/controlplane/target_test.go @@ -11,7 +11,7 @@ import ( func TestTargetRoute(t *testing.T) { target := &cp.Target{Host: "test", Prefix: "/", ClusterName: "cluster_a"} r := target.Route() - assert.Equal(t, "/", r.Match.PathSpecifier.(*route.RouteMatch_Prefix).Prefix) - assert.Equal(t, "test", r.Action.(*route.Route_Route).Route.HostRewriteSpecifier.(*route.RouteAction_HostRewrite).HostRewrite) - assert.Equal(t, "cluster_a", r.Action.(*route.Route_Route).Route.ClusterSpecifier.(*route.RouteAction_Cluster).Cluster) + assert.Equal(t, "/", r[0].Match.PathSpecifier.(*route.RouteMatch_Prefix).Prefix) + assert.Equal(t, "test", r[0].Action.(*route.Route_Route).Route.HostRewriteSpecifier.(*route.RouteAction_HostRewrite).HostRewrite) + assert.Equal(t, "cluster_a", r[0].Action.(*route.Route_Route).Route.ClusterSpecifier.(*route.RouteAction_Cluster).Cluster) } diff --git a/controlplane/vhost.go b/controlplane/vhost.go index 00cb744..ad294f8 100644 --- a/controlplane/vhost.go +++ b/controlplane/vhost.go @@ -7,7 +7,9 @@ import ( func VHost(name string, domains []string, targets []Target, retryPolicy *route.RetryPolicy) route.VirtualHost { var routes []route.Route for _, t := range targets { - routes = append(routes, t.Route()) + for _, r := range t.Route() { + routes = append(routes, r) + } } var retryPredicateArray []*route.RetryPolicy_RetryHostPredicate