Preserve GRPCRoute filters order
This commit is contained in:
parent
83871f27dd
commit
f18fcf3688
4 changed files with 366 additions and 10 deletions
|
@ -278,20 +278,30 @@ func (p *Provider) loadGRPCBackendRef(route *gatev1.GRPCRoute, backendRef gatev1
|
|||
}
|
||||
|
||||
func (p *Provider) loadGRPCMiddlewares(conf *dynamic.Configuration, namespace, routerName string, filters []gatev1.GRPCRouteFilter) ([]string, error) {
|
||||
middlewares := make(map[string]*dynamic.Middleware)
|
||||
type namedMiddleware struct {
|
||||
Name string
|
||||
Config *dynamic.Middleware
|
||||
}
|
||||
|
||||
var middlewares []namedMiddleware
|
||||
for i, filter := range filters {
|
||||
name := fmt.Sprintf("%s-%s-%d", routerName, strings.ToLower(string(filter.Type)), i)
|
||||
switch filter.Type {
|
||||
case gatev1.GRPCRouteFilterRequestHeaderModifier:
|
||||
middlewares[name] = createRequestHeaderModifier(filter.RequestHeaderModifier)
|
||||
middlewares = append(middlewares, namedMiddleware{
|
||||
name,
|
||||
createRequestHeaderModifier(filter.RequestHeaderModifier),
|
||||
})
|
||||
|
||||
case gatev1.GRPCRouteFilterExtensionRef:
|
||||
name, middleware, err := p.loadHTTPRouteFilterExtensionRef(namespace, filter.ExtensionRef)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("loading ExtensionRef filter %s: %w", filter.Type, err)
|
||||
}
|
||||
|
||||
middlewares[name] = middleware
|
||||
middlewares = append(middlewares, namedMiddleware{
|
||||
name,
|
||||
middleware,
|
||||
})
|
||||
|
||||
default:
|
||||
// As per the spec: https://gateway-api.sigs.k8s.io/api-types/httproute/#filters-optional
|
||||
|
@ -303,12 +313,11 @@ func (p *Provider) loadGRPCMiddlewares(conf *dynamic.Configuration, namespace, r
|
|||
}
|
||||
|
||||
var middlewareNames []string
|
||||
for name, middleware := range middlewares {
|
||||
if middleware != nil {
|
||||
conf.HTTP.Middlewares[name] = middleware
|
||||
for _, m := range middlewares {
|
||||
if m.Config != nil {
|
||||
conf.HTTP.Middlewares[m.Name] = m.Config
|
||||
}
|
||||
|
||||
middlewareNames = append(middlewareNames, name)
|
||||
middlewareNames = append(middlewareNames, m.Name)
|
||||
}
|
||||
|
||||
return middlewareNames, nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue