Add supported features to the Gateway API GatewayClass status
This commit is contained in:
parent
1ebd12ff82
commit
42e1f2c9b1
3 changed files with 32 additions and 18 deletions
|
@ -18,6 +18,7 @@ import (
|
|||
"github.com/testcontainers/testcontainers-go/modules/k3s"
|
||||
"github.com/testcontainers/testcontainers-go/network"
|
||||
"github.com/traefik/traefik/v3/integration/try"
|
||||
"github.com/traefik/traefik/v3/pkg/provider/kubernetes/gateway"
|
||||
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
kclientset "k8s.io/client-go/kubernetes"
|
||||
|
@ -33,7 +34,6 @@ import (
|
|||
"sigs.k8s.io/gateway-api/conformance/tests"
|
||||
"sigs.k8s.io/gateway-api/conformance/utils/config"
|
||||
ksuite "sigs.k8s.io/gateway-api/conformance/utils/suite"
|
||||
"sigs.k8s.io/gateway-api/pkg/features"
|
||||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
|
||||
|
@ -199,23 +199,7 @@ func (s *K8sConformanceSuite) TestK8sGatewayAPIConformance() {
|
|||
ksuite.GatewayGRPCConformanceProfileName,
|
||||
ksuite.GatewayTLSConformanceProfileName,
|
||||
),
|
||||
SupportedFeatures: sets.New(
|
||||
features.SupportGateway,
|
||||
features.SupportGatewayPort8080,
|
||||
features.SupportGRPCRoute,
|
||||
features.SupportHTTPRoute,
|
||||
features.SupportHTTPRouteQueryParamMatching,
|
||||
features.SupportHTTPRouteMethodMatching,
|
||||
features.SupportHTTPRoutePortRedirect,
|
||||
features.SupportHTTPRouteSchemeRedirect,
|
||||
features.SupportHTTPRouteHostRewrite,
|
||||
features.SupportHTTPRoutePathRewrite,
|
||||
features.SupportHTTPRoutePathRedirect,
|
||||
features.SupportHTTPRouteResponseHeaderModification,
|
||||
features.SupportTLSRoute,
|
||||
features.SupportHTTPRouteBackendProtocolH2C,
|
||||
features.SupportHTTPRouteBackendProtocolWebSocket,
|
||||
),
|
||||
SupportedFeatures: sets.New(gateway.SupportedFeatures()...),
|
||||
})
|
||||
require.NoError(s.T(), err)
|
||||
|
||||
|
|
23
pkg/provider/kubernetes/gateway/features.go
Normal file
23
pkg/provider/kubernetes/gateway/features.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
package gateway
|
||||
|
||||
import "sigs.k8s.io/gateway-api/pkg/features"
|
||||
|
||||
func SupportedFeatures() []features.SupportedFeature {
|
||||
return []features.SupportedFeature{
|
||||
features.SupportGateway,
|
||||
features.SupportGatewayPort8080,
|
||||
features.SupportGRPCRoute,
|
||||
features.SupportHTTPRoute,
|
||||
features.SupportHTTPRouteQueryParamMatching,
|
||||
features.SupportHTTPRouteMethodMatching,
|
||||
features.SupportHTTPRoutePortRedirect,
|
||||
features.SupportHTTPRouteSchemeRedirect,
|
||||
features.SupportHTTPRouteHostRewrite,
|
||||
features.SupportHTTPRoutePathRewrite,
|
||||
features.SupportHTTPRoutePathRedirect,
|
||||
features.SupportHTTPRouteResponseHeaderModification,
|
||||
features.SupportTLSRoute,
|
||||
features.SupportHTTPRouteBackendProtocolH2C,
|
||||
features.SupportHTTPRouteBackendProtocolWebSocket,
|
||||
}
|
||||
}
|
|
@ -316,6 +316,12 @@ func (p *Provider) loadConfigurationFromGateways(ctx context.Context) *dynamic.C
|
|||
return nil
|
||||
}
|
||||
|
||||
var supportedFeatures []gatev1.SupportedFeature
|
||||
for _, feature := range SupportedFeatures() {
|
||||
supportedFeatures = append(supportedFeatures, gatev1.SupportedFeature(feature))
|
||||
}
|
||||
slices.Sort(supportedFeatures)
|
||||
|
||||
gatewayClassNames := map[string]struct{}{}
|
||||
for _, gatewayClass := range gatewayClasses {
|
||||
if gatewayClass.Spec.ControllerName != controllerName {
|
||||
|
@ -333,6 +339,7 @@ func (p *Provider) loadConfigurationFromGateways(ctx context.Context) *dynamic.C
|
|||
Message: "Handled by Traefik controller",
|
||||
LastTransitionTime: metav1.Now(),
|
||||
}),
|
||||
SupportedFeatures: supportedFeatures,
|
||||
}
|
||||
|
||||
if err := p.client.UpdateGatewayClassStatus(ctx, gatewayClass.Name, status); err != nil {
|
||||
|
|
Loading…
Reference in a new issue