chore(source): use types instead of strings

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
This commit is contained in:
ivan katliarchuk 2025-07-30 12:16:02 +01:00
parent 1b9d7cddc0
commit a3d902f68f
No known key found for this signature in database
GPG Key ID: 601CDBBBB76E47BE
3 changed files with 87 additions and 33 deletions

View File

@ -37,6 +37,8 @@ import (
"k8s.io/client-go/tools/clientcmd"
gateway "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
"sigs.k8s.io/external-dns/source/types"
extdnshttp "sigs.k8s.io/external-dns/pkg/http"
"sigs.k8s.io/external-dns/pkg/apis/externaldns"
@ -332,53 +334,53 @@ func ByNames(ctx context.Context, p ClientGenerator, names []string, cfg *Config
// because they have simpler initialization requirements.
func BuildWithConfig(ctx context.Context, source string, p ClientGenerator, cfg *Config) (Source, error) {
switch source {
case "node":
case types.Node:
return buildNodeSource(ctx, p, cfg)
case "service":
case types.Service:
return buildServiceSource(ctx, p, cfg)
case "ingress":
case types.Ingress:
return buildIngressSource(ctx, p, cfg)
case "pod":
case types.Pod:
return buildPodSource(ctx, p, cfg)
case "gateway-httproute":
case types.GatewayHttpRoute:
return NewGatewayHTTPRouteSource(p, cfg)
case "gateway-grpcroute":
case types.GatewayGrpcRoute:
return NewGatewayGRPCRouteSource(p, cfg)
case "gateway-tlsroute":
case types.GatewayTlsRoute:
return NewGatewayTLSRouteSource(p, cfg)
case "gateway-tcproute":
case types.GatewayTcpRoute:
return NewGatewayTCPRouteSource(p, cfg)
case "gateway-udproute":
case types.GatewayUdpRoute:
return NewGatewayUDPRouteSource(p, cfg)
case "istio-gateway":
case types.IstioGateway:
return buildIstioGatewaySource(ctx, p, cfg)
case "istio-virtualservice":
case types.IstioVirtualService:
return buildIstioVirtualServiceSource(ctx, p, cfg)
case "cloudfoundry":
case types.Cloudfoundry:
return buildCloudFoundrySource(ctx, p, cfg)
case "ambassador-host":
case types.AmbassadorHost:
return buildAmbassadorHostSource(ctx, p, cfg)
case "contour-httpproxy":
case types.ContourHTTPProxy:
return buildContourHTTPProxySource(ctx, p, cfg)
case "gloo-proxy":
case types.GlooProxy:
return buildGlooProxySource(ctx, p, cfg)
case "traefik-proxy":
case types.TraefikProxy:
return buildTraefikProxySource(ctx, p, cfg)
case "openshift-route":
case types.OpenShiftRoute:
return buildOpenShiftRouteSource(ctx, p, cfg)
case "fake":
case types.Fake:
return NewFakeSource(cfg.FQDNTemplate)
case "connector":
case types.Connector:
return NewConnectorSource(cfg.ConnectorServer)
case "crd":
case types.CRD:
return buildCRDSource(ctx, p, cfg)
case "skipper-routegroup":
case types.SkipperRouteGroup:
return buildSkipperRouteGroupSource(ctx, cfg)
case "kong-tcpingress":
case types.KongTCPIngress:
return buildKongTCPIngressSource(ctx, p, cfg)
case "f5-virtualserver":
case types.F5VirtualServer:
return buildF5VirtualServerSource(ctx, p, cfg)
case "f5-transportserver":
case types.F5TransportServer:
return buildF5TransportServerSource(ctx, p, cfg)
}
return nil, ErrSourceNotFound

View File

@ -21,7 +21,7 @@ import (
"errors"
"testing"
cfclient "github.com/cloudfoundry-community/go-cfclient"
"github.com/cloudfoundry-community/go-cfclient"
openshift "github.com/openshift/client-go/route/clientset/versioned"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/suite"
@ -34,6 +34,7 @@ import (
fakeDynamic "k8s.io/client-go/dynamic/fake"
"k8s.io/client-go/kubernetes"
fakeKube "k8s.io/client-go/kubernetes/fake"
"sigs.k8s.io/external-dns/source/types"
gateway "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
)
@ -168,7 +169,10 @@ func (suite *ByNamesTestSuite) TestAllInitialized() {
}: "IngressRouteUDPList",
}), nil)
sources, err := ByNames(context.TODO(), mockClientGenerator, []string{"service", "ingress", "istio-gateway", "contour-httpproxy", "kong-tcpingress", "f5-virtualserver", "f5-transportserver", "traefik-proxy", "fake"}, &Config{})
sources, err := ByNames(context.TODO(), mockClientGenerator, []string{
types.Service, types.Ingress, types.IstioGateway, types.ContourHTTPProxy,
types.KongTCPIngress, types.F5VirtualServer, types.F5TransportServer, types.TraefikProxy, types.Fake,
}, &Config{})
suite.NoError(err, "should not generate errors")
suite.Len(sources, 9, "should generate all nine sources")
}
@ -177,7 +181,7 @@ func (suite *ByNamesTestSuite) TestOnlyFake() {
mockClientGenerator := new(MockClientGenerator)
mockClientGenerator.On("KubeClient").Return(fakeKube.NewSimpleClientset(), nil)
sources, err := ByNames(context.TODO(), mockClientGenerator, []string{"fake"}, &Config{})
sources, err := ByNames(context.TODO(), mockClientGenerator, []string{types.Fake}, &Config{})
suite.NoError(err, "should not generate errors")
suite.Len(sources, 1, "should generate fake source")
suite.Nil(mockClientGenerator.kubeClient, "client should not be created")
@ -197,9 +201,9 @@ func (suite *ByNamesTestSuite) TestKubeClientFails() {
mockClientGenerator.On("KubeClient").Return(nil, errors.New("foo"))
sourcesDependentOnKubeClient := []string{
"node", "service", "ingress", "pod", "istio-gateway", "istio-virtualservice",
"ambassador-host", "gloo-proxy", "traefik-proxy", "crd", "kong-tcpingress",
"f5-virtualserver", "f5-transportserver",
types.Node, types.Service, types.Ingress, types.Pod, types.IstioGateway, types.IstioVirtualService,
types.AmbassadorHost, types.GlooProxy, types.TraefikProxy, types.CRD, types.KongTCPIngress,
types.F5VirtualServer, types.F5TransportServer,
}
for _, source := range sourcesDependentOnKubeClient {
@ -214,7 +218,7 @@ func (suite *ByNamesTestSuite) TestIstioClientFails() {
mockClientGenerator.On("IstioClient").Return(nil, errors.New("foo"))
mockClientGenerator.On("DynamicKubernetesClient").Return(nil, errors.New("foo"))
sourcesDependentOnIstioClient := []string{"istio-gateway", "istio-virtualservice"}
sourcesDependentOnIstioClient := []string{types.IstioGateway, types.IstioVirtualService}
for _, source := range sourcesDependentOnIstioClient {
_, err := ByNames(context.TODO(), mockClientGenerator, []string{source}, &Config{})
@ -228,8 +232,10 @@ func (suite *ByNamesTestSuite) TestDynamicKubernetesClientFails() {
mockClientGenerator.On("IstioClient").Return(istiofake.NewSimpleClientset(), nil)
mockClientGenerator.On("DynamicKubernetesClient").Return(nil, errors.New("foo"))
sourcesDependentOnDynamicKubernetesClient := []string{"ambassador-host", "contour-httpproxy", "gloo-proxy", "traefik-proxy",
"kong-tcpingress", "f5-virtualserver", "f5-transportserver"}
sourcesDependentOnDynamicKubernetesClient := []string{
types.AmbassadorHost, types.ContourHTTPProxy, types.GlooProxy, types.TraefikProxy,
types.KongTCPIngress, types.F5VirtualServer, types.F5TransportServer,
}
for _, source := range sourcesDependentOnDynamicKubernetesClient {
_, err := ByNames(context.TODO(), mockClientGenerator, []string{source}, &Config{})

46
source/types/types.go Normal file
View File

@ -0,0 +1,46 @@
/*
Copyright 2025 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package types
type Type = string
const (
Node Type = "node"
Service Type = "service"
Ingress Type = "ingress"
Pod Type = "pod"
GatewayHttpRoute Type = "gateway-httproute"
GatewayGrpcRoute Type = "gateway-grpcroute"
GatewayTlsRoute Type = "gateway-tlsroute"
GatewayTcpRoute Type = "gateway-tcproute"
GatewayUdpRoute Type = "gateway-udproute"
IstioGateway Type = "istio-gateway"
IstioVirtualService Type = "istio-virtualservice"
Cloudfoundry Type = "cloudfoundry"
AmbassadorHost Type = "ambassador-host"
ContourHTTPProxy Type = "contour-httpproxy"
GlooProxy Type = "gloo-proxy"
TraefikProxy Type = "traefik-proxy"
OpenShiftRoute Type = "openshift-route"
Fake Type = "fake"
Connector Type = "connector"
CRD Type = "crd"
SkipperRouteGroup Type = "skipper-routegroup"
KongTCPIngress Type = "kong-tcpingress"
F5VirtualServer Type = "f5-virtualserver"
F5TransportServer Type = "f5-transportserver"
)