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/modules/k3s"
|
||||||
"github.com/testcontainers/testcontainers-go/network"
|
"github.com/testcontainers/testcontainers-go/network"
|
||||||
"github.com/traefik/traefik/v3/integration/try"
|
"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"
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
kclientset "k8s.io/client-go/kubernetes"
|
kclientset "k8s.io/client-go/kubernetes"
|
||||||
|
@ -33,7 +34,6 @@ import (
|
||||||
"sigs.k8s.io/gateway-api/conformance/tests"
|
"sigs.k8s.io/gateway-api/conformance/tests"
|
||||||
"sigs.k8s.io/gateway-api/conformance/utils/config"
|
"sigs.k8s.io/gateway-api/conformance/utils/config"
|
||||||
ksuite "sigs.k8s.io/gateway-api/conformance/utils/suite"
|
ksuite "sigs.k8s.io/gateway-api/conformance/utils/suite"
|
||||||
"sigs.k8s.io/gateway-api/pkg/features"
|
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -199,23 +199,7 @@ func (s *K8sConformanceSuite) TestK8sGatewayAPIConformance() {
|
||||||
ksuite.GatewayGRPCConformanceProfileName,
|
ksuite.GatewayGRPCConformanceProfileName,
|
||||||
ksuite.GatewayTLSConformanceProfileName,
|
ksuite.GatewayTLSConformanceProfileName,
|
||||||
),
|
),
|
||||||
SupportedFeatures: sets.New(
|
SupportedFeatures: sets.New(gateway.SupportedFeatures()...),
|
||||||
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,
|
|
||||||
),
|
|
||||||
})
|
})
|
||||||
require.NoError(s.T(), err)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var supportedFeatures []gatev1.SupportedFeature
|
||||||
|
for _, feature := range SupportedFeatures() {
|
||||||
|
supportedFeatures = append(supportedFeatures, gatev1.SupportedFeature(feature))
|
||||||
|
}
|
||||||
|
slices.Sort(supportedFeatures)
|
||||||
|
|
||||||
gatewayClassNames := map[string]struct{}{}
|
gatewayClassNames := map[string]struct{}{}
|
||||||
for _, gatewayClass := range gatewayClasses {
|
for _, gatewayClass := range gatewayClasses {
|
||||||
if gatewayClass.Spec.ControllerName != controllerName {
|
if gatewayClass.Spec.ControllerName != controllerName {
|
||||||
|
@ -333,6 +339,7 @@ func (p *Provider) loadConfigurationFromGateways(ctx context.Context) *dynamic.C
|
||||||
Message: "Handled by Traefik controller",
|
Message: "Handled by Traefik controller",
|
||||||
LastTransitionTime: metav1.Now(),
|
LastTransitionTime: metav1.Now(),
|
||||||
}),
|
}),
|
||||||
|
SupportedFeatures: supportedFeatures,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := p.client.UpdateGatewayClassStatus(ctx, gatewayClass.Name, status); err != nil {
|
if err := p.client.UpdateGatewayClassStatus(ctx, gatewayClass.Name, status); err != nil {
|
||||||
|
|
Loading…
Reference in a new issue