mirror of https://github.com/hashicorp/consul
48 lines
1.8 KiB
Go
48 lines
1.8 KiB
Go
|
package extensioncommon
|
||
|
|
||
|
import (
|
||
|
envoy_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3"
|
||
|
envoy_listener_v3 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
|
||
|
envoy_route_v3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
|
||
|
"github.com/hashicorp/consul/envoyextensions/xdscommon"
|
||
|
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// GetListenerEnvoyID returns the Envoy ID string parsed from the name of the given Listener. If none is found, it
|
||
|
// returns the empty string.
|
||
|
func GetListenerEnvoyID(l *envoy_listener_v3.Listener) string {
|
||
|
if id, _, found := strings.Cut(l.Name, ":"); found {
|
||
|
return id
|
||
|
}
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
// IsLocalAppCluster returns true if the given Cluster represents the local Cluster, which receives inbound traffic to
|
||
|
// the local proxy.
|
||
|
func IsLocalAppCluster(c *envoy_cluster_v3.Cluster) bool {
|
||
|
return c.Name == xdscommon.LocalAppClusterName
|
||
|
}
|
||
|
|
||
|
// IsRouteToLocalAppCluster takes a RouteConfiguration and returns true if all routes within it target the local
|
||
|
// Cluster. Note that because we currently target RouteConfiguration in PatchRoute, we have to check multiple individual
|
||
|
// Route resources.
|
||
|
func IsRouteToLocalAppCluster(r *envoy_route_v3.RouteConfiguration) bool {
|
||
|
clusterNames := RouteClusterNames(r)
|
||
|
_, match := clusterNames[xdscommon.LocalAppClusterName]
|
||
|
|
||
|
return match && len(clusterNames) == 1
|
||
|
}
|
||
|
|
||
|
// IsInboundPublicListener returns true if the given Listener represents the inbound public Listener for the local
|
||
|
// service.
|
||
|
func IsInboundPublicListener(l *envoy_listener_v3.Listener) bool {
|
||
|
return GetListenerEnvoyID(l) == xdscommon.PublicListenerName
|
||
|
}
|
||
|
|
||
|
// IsOutboundTProxyListener returns true if the given Listener represents the outbound TProxy Listener for the local
|
||
|
// service.
|
||
|
func IsOutboundTProxyListener(l *envoy_listener_v3.Listener) bool {
|
||
|
return GetListenerEnvoyID(l) == xdscommon.OutboundListenerName
|
||
|
}
|