2025-10-10 12:12:04 +02:00

49 lines
1.8 KiB
Go

package gateway
import (
"sync"
"k8s.io/apimachinery/pkg/util/sets"
"sigs.k8s.io/gateway-api/pkg/features"
)
var SupportedFeatures = sync.OnceValue(func() []features.FeatureName {
featureSet := sets.New[features.Feature]().
Insert(features.GatewayCoreFeatures.UnsortedList()...).
Insert(features.GatewayExtendedFeatures.Intersection(extendedGatewayFeatures()).UnsortedList()...).
Insert(features.HTTPRouteCoreFeatures.UnsortedList()...).
Insert(features.HTTPRouteExtendedFeatures.Intersection(extendedHTTPRouteFeatures()).UnsortedList()...).
Insert(features.ReferenceGrantCoreFeatures.UnsortedList()...).
Insert(features.BackendTLSPolicyCoreFeatures.UnsortedList()...).
Insert(features.GRPCRouteCoreFeatures.UnsortedList()...).
Insert(features.TLSRouteCoreFeatures.UnsortedList()...)
featureNames := make([]features.FeatureName, 0, featureSet.Len())
for f := range featureSet {
featureNames = append(featureNames, f.Name)
}
return featureNames
})
// extendedGatewayFeatures returns the supported extended Gateway features.
func extendedGatewayFeatures() sets.Set[features.Feature] {
return sets.New(features.GatewayPort8080Feature)
}
// extendedHTTPRouteFeatures returns the supported extended HTTP Route features.
func extendedHTTPRouteFeatures() sets.Set[features.Feature] {
return sets.New(
features.HTTPRouteQueryParamMatchingFeature,
features.HTTPRouteMethodMatchingFeature,
features.HTTPRoutePortRedirectFeature,
features.HTTPRouteSchemeRedirectFeature,
features.HTTPRouteHostRewriteFeature,
features.HTTPRoutePathRewriteFeature,
features.HTTPRoutePathRedirectFeature,
features.HTTPRouteResponseHeaderModificationFeature,
features.HTTPRouteBackendProtocolH2CFeature,
features.HTTPRouteBackendProtocolWebSocketFeature,
features.HTTPRouteDestinationPortMatchingFeature,
)
}