mirror of https://github.com/status-im/consul.git
Header manip for service-router plumbed through
This commit is contained in:
parent
f439dfc04f
commit
83fc8723a3
|
@ -1281,6 +1281,32 @@ func setupTestVariationConfigEntriesAndSnapshot(
|
|||
}),
|
||||
Destination: toService("split-3-ways"),
|
||||
},
|
||||
{
|
||||
Match: httpMatch(&structs.ServiceRouteHTTPMatch{
|
||||
PathExact: "/header-manip",
|
||||
}),
|
||||
Destination: &structs.ServiceRouteDestination{
|
||||
Service: "header-manip",
|
||||
RequestHeaders: &structs.HTTPHeaderModifiers{
|
||||
Add: map[string]string{
|
||||
"request": "bar",
|
||||
},
|
||||
Set: map[string]string{
|
||||
"bar": "baz",
|
||||
},
|
||||
Remove: []string{"qux"},
|
||||
},
|
||||
ResponseHeaders: &structs.HTTPHeaderModifiers{
|
||||
Add: map[string]string{
|
||||
"response": "bar",
|
||||
},
|
||||
Set: map[string]string{
|
||||
"bar": "baz",
|
||||
},
|
||||
Remove: []string{"qux"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
|
|
@ -355,24 +355,23 @@ func makeUpstreamRouteForDiscoveryChain(
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if err := injectLBToRouteAction(lb, routeAction.Route); err != nil {
|
||||
return nil, fmt.Errorf("failed to apply load balancer configuration to route action: %v", err)
|
||||
}
|
||||
|
||||
case structs.DiscoveryGraphNodeTypeResolver:
|
||||
routeAction = makeRouteActionForChainCluster(nextNode.Resolver.Target, chain)
|
||||
|
||||
if err := injectLBToRouteAction(lb, routeAction.Route); err != nil {
|
||||
return nil, fmt.Errorf("failed to apply load balancer configuration to route action: %v", err)
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unexpected graph node after route %q", nextNode.Type)
|
||||
}
|
||||
|
||||
if err := injectLBToRouteAction(lb, routeAction.Route); err != nil {
|
||||
return nil, fmt.Errorf("failed to apply load balancer configuration to route action: %v", err)
|
||||
}
|
||||
|
||||
// TODO(rb): Better help handle the envoy case where you need (prefix=/foo/,rewrite=/) and (exact=/foo,rewrite=/) to do a full rewrite
|
||||
|
||||
destination := discoveryRoute.Definition.Destination
|
||||
|
||||
route := &envoy_route_v3.Route{}
|
||||
|
||||
if destination != nil {
|
||||
if destination.PrefixRewrite != "" {
|
||||
routeAction.Route.PrefixRewrite = destination.PrefixRewrite
|
||||
|
@ -403,12 +402,16 @@ func makeUpstreamRouteForDiscoveryChain(
|
|||
|
||||
routeAction.Route.RetryPolicy = retryPolicy
|
||||
}
|
||||
|
||||
if err := injectHeaderManipToRoute(destination, route); err != nil {
|
||||
return nil, fmt.Errorf("failed to apply header manipulation configuration to route: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
routes = append(routes, &envoy_route_v3.Route{
|
||||
Match: routeMatch,
|
||||
Action: routeAction,
|
||||
})
|
||||
route.Match = routeMatch
|
||||
route.Action = routeAction
|
||||
|
||||
routes = append(routes, route)
|
||||
}
|
||||
|
||||
case structs.DiscoveryGraphNodeTypeSplitter:
|
||||
|
@ -714,3 +717,35 @@ func injectLBToRouteAction(lb *structs.LoadBalancer, action *envoy_route_v3.Rout
|
|||
action.HashPolicy = result
|
||||
return nil
|
||||
}
|
||||
|
||||
func injectHeaderManipToRoute(dest *structs.ServiceRouteDestination, r *envoy_route_v3.Route) error {
|
||||
if dest.RequestHeaders != nil {
|
||||
r.RequestHeadersToAdd = append(
|
||||
r.RequestHeadersToAdd,
|
||||
makeHeadersValueOptions(dest.RequestHeaders.Add, true)...,
|
||||
)
|
||||
r.RequestHeadersToAdd = append(
|
||||
r.RequestHeadersToAdd,
|
||||
makeHeadersValueOptions(dest.RequestHeaders.Set, false)...,
|
||||
)
|
||||
r.RequestHeadersToRemove = append(
|
||||
r.RequestHeadersToRemove,
|
||||
dest.RequestHeaders.Remove...,
|
||||
)
|
||||
}
|
||||
if dest.ResponseHeaders != nil {
|
||||
r.ResponseHeadersToAdd = append(
|
||||
r.ResponseHeadersToAdd,
|
||||
makeHeadersValueOptions(dest.ResponseHeaders.Add, true)...,
|
||||
)
|
||||
r.ResponseHeadersToAdd = append(
|
||||
r.ResponseHeadersToAdd,
|
||||
makeHeadersValueOptions(dest.ResponseHeaders.Set, false)...,
|
||||
)
|
||||
r.ResponseHeadersToRemove = append(
|
||||
r.ResponseHeadersToRemove,
|
||||
dest.ResponseHeaders.Remove...,
|
||||
)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -343,6 +343,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"path": "/header-manip"
|
||||
},
|
||||
"route": {
|
||||
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||
},
|
||||
"requestHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "request",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"requestHeadersToRemove": [
|
||||
"qux"
|
||||
],
|
||||
"responseHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "response",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"responseHeadersToRemove": [
|
||||
"qux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"prefix": "/"
|
||||
|
|
|
@ -343,6 +343,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"path": "/header-manip"
|
||||
},
|
||||
"route": {
|
||||
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||
},
|
||||
"requestHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "request",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"requestHeadersToRemove": [
|
||||
"qux"
|
||||
],
|
||||
"responseHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "response",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"responseHeadersToRemove": [
|
||||
"qux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"prefix": "/"
|
||||
|
|
|
@ -344,6 +344,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"path": "/header-manip"
|
||||
},
|
||||
"route": {
|
||||
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||
},
|
||||
"requestHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "request",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"requestHeadersToRemove": [
|
||||
"qux"
|
||||
],
|
||||
"responseHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "response",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"responseHeadersToRemove": [
|
||||
"qux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"prefix": "/"
|
||||
|
|
|
@ -344,6 +344,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"path": "/header-manip"
|
||||
},
|
||||
"route": {
|
||||
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||
},
|
||||
"requestHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "request",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"requestHeadersToRemove": [
|
||||
"qux"
|
||||
],
|
||||
"responseHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "response",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"responseHeadersToRemove": [
|
||||
"qux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"prefix": "/"
|
||||
|
|
|
@ -344,6 +344,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"path": "/header-manip"
|
||||
},
|
||||
"route": {
|
||||
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||
},
|
||||
"requestHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "request",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"requestHeadersToRemove": [
|
||||
"qux"
|
||||
],
|
||||
"responseHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "response",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"responseHeadersToRemove": [
|
||||
"qux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"prefix": "/"
|
||||
|
|
|
@ -344,6 +344,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"path": "/header-manip"
|
||||
},
|
||||
"route": {
|
||||
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||
},
|
||||
"requestHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "request",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"requestHeadersToRemove": [
|
||||
"qux"
|
||||
],
|
||||
"responseHeadersToAdd": [
|
||||
{
|
||||
"header": {
|
||||
"key": "response",
|
||||
"value": "bar"
|
||||
},
|
||||
"append": true
|
||||
},
|
||||
{
|
||||
"header": {
|
||||
"key": "bar",
|
||||
"value": "baz"
|
||||
},
|
||||
"append": false
|
||||
}
|
||||
],
|
||||
"responseHeadersToRemove": [
|
||||
"qux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"prefix": "/"
|
||||
|
|
Loading…
Reference in New Issue