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  }