github.com/cilium/cilium@v1.16.2/operator/pkg/model/translation/envoy_route_configuration.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package translation 5 6 import ( 7 envoy_config_route_v3 "github.com/cilium/proxy/go/envoy/config/route/v3" 8 "google.golang.org/protobuf/proto" 9 "google.golang.org/protobuf/types/known/anypb" 10 11 "github.com/cilium/cilium/pkg/envoy" 12 ciliumv2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2" 13 ) 14 15 type RouteConfigurationMutator func(*envoy_config_route_v3.RouteConfiguration) *envoy_config_route_v3.RouteConfiguration 16 17 // NewRouteConfiguration returns a new route configuration for a given list of http routes. 18 func NewRouteConfiguration(name string, virtualhosts []*envoy_config_route_v3.VirtualHost, mutators ...RouteConfigurationMutator) (ciliumv2.XDSResource, error) { 19 routeConfig := &envoy_config_route_v3.RouteConfiguration{ 20 Name: name, 21 VirtualHosts: virtualhosts, 22 } 23 24 // Apply mutation functions for customizing the route configuration. 25 for _, fn := range mutators { 26 routeConfig = fn(routeConfig) 27 } 28 29 routeBytes, err := proto.Marshal(routeConfig) 30 if err != nil { 31 return ciliumv2.XDSResource{}, err 32 } 33 34 return ciliumv2.XDSResource{ 35 Any: &anypb.Any{ 36 TypeUrl: envoy.RouteTypeURL, 37 Value: routeBytes, 38 }, 39 }, nil 40 }