Repository: submariner-io/lighthouse
Pull request #437 (2021-01-18 16:19:27)

Remove Lighthouse-specific ServiceImport/Export
Signed-off-by: Stephen Kitt <skitt@redhat.com>


Patch:
diff --git a/pkg/agent/controller/agent.go b/pkg/agent/controller/agent.go
index cd1a5f1..259c7d3 100644
--- a/pkg/agent/controller/agent.go
+++ b/pkg/agent/controller/agent.go
@@ -137,12 +137,6 @@ func New(spec *AgentSpecification, syncerConf broker.SyncerConfig, kubeClientSet
 		return nil, err
 	}
 
-	agentController.lhServiceExportController, err = newLHServiceExportController(syncerConf.LocalClient, syncerConf.RestMapper,
-		syncerConf.Scheme)
-	if err != nil {
-		return nil, err
-	}
-
 	return agentController, nil
 }
 
@@ -172,10 +166,6 @@ func (a *Controller) Start(stopCh <-chan struct{}) error {
 		return err
 	}
 
-	if err := a.lhServiceExportController.start(stopCh); err != nil {
-		return err
-	}
-
 	klog.Info("Agent controller started")
 
 	return nil
diff --git a/pkg/agent/controller/endpoint.go b/pkg/agent/controller/endpoint.go
index 295bd76..de06ed4 100644
--- a/pkg/agent/controller/endpoint.go
+++ b/pkg/agent/controller/endpoint.go
@@ -102,7 +102,7 @@ func (e *EndpointController) endpointSliceFromEndpoints(endpoints *corev1.Endpoi
 		lhconstants.LabelSourceName:        e.serviceName,
 	}
 	endpointSlice.OwnerReferences = []metav1.OwnerReference{{
-		APIVersion:         "lighthouse.submariner.io.v2alpha1",
+		APIVersion:         "multicluster.x-k8s.io.v1alpha1",
 		Kind:               "ServiceImport",
 		Name:               e.serviceImportName,
 		UID:                e.serviceImportUID,
diff --git a/pkg/agent/controller/lhserviceexport.go b/pkg/agent/controller/lhserviceexport.go
deleted file mode 100644
index 137e0e1..0000000
--- a/pkg/agent/controller/lhserviceexport.go
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-© 2020 Red Hat, Inc. and others
-
-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 controller
-
-import (
-	"github.com/submariner-io/admiral/pkg/syncer"
-	"github.com/submariner-io/admiral/pkg/syncer/broker"
-	lighthousev2a1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	"k8s.io/apimachinery/pkg/api/meta"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
-	"k8s.io/client-go/dynamic"
-	"k8s.io/klog"
-	mcsv1a1 "sigs.k8s.io/mcs-api/pkg/apis/v1alpha1"
-)
-
-func newLHServiceExportController(localClient dynamic.Interface, restMapper meta.RESTMapper,
-	scheme *runtime.Scheme) (*LHServiceExportController, error) {
-	serviceExportController := LHServiceExportController{
-		localClient: localClient,
-	}
-
-	lhServiceExportSyncer, err := syncer.NewResourceSyncer(&syncer.ResourceSyncerConfig{
-		Name:             "lhServiceExport -> mcsServiceExport",
-		SourceClient:     localClient,
-		SourceNamespace:  metav1.NamespaceAll,
-		Direction:        syncer.LocalToRemote,
-		RestMapper:       restMapper,
-		Federator:        broker.NewFederator(localClient, restMapper, metav1.NamespaceAll, ""),
-		ResourceType:     &lighthousev2a1.ServiceExport{},
-		Transform:        serviceExportController.LHtoMCSServiceExport,
-		Scheme:           scheme,
-		OnSuccessfulSync: serviceExportController.deleteLHServiceExport,
-	})
-
-	if err != nil {
-		return nil, err
-	}
-
-	serviceExportController.lhServiceExportSyncer = lhServiceExportSyncer
-
-	return &serviceExportController, nil
-}
-
-func (c *LHServiceExportController) start(stopCh <-chan struct{}) error {
-	if err := c.lhServiceExportSyncer.Start(stopCh); err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func (c *LHServiceExportController) LHtoMCSServiceExport(obj runtime.Object, numRequeues int, op syncer.Operation) (runtime.Object, bool) {
-	if op != syncer.Create {
-		return nil, false
-	}
-
-	serviceExportCreated := obj.(*lighthousev2a1.ServiceExport)
-	objMeta := serviceExportCreated.GetObjectMeta()
-	mcsServiceExport := &mcsv1a1.ServiceExport{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      objMeta.GetName(),
-			Namespace: objMeta.GetNamespace(),
-		},
-	}
-
-	return mcsServiceExport, false
-}
-
-func (c *LHServiceExportController) deleteLHServiceExport(obj runtime.Object, op syncer.Operation) {
-	serviceExportDeleted := obj.(*mcsv1a1.ServiceExport)
-	resourceClient := c.localClient.Resource(schema.GroupVersionResource{Group: "lighthouse.submariner.io",
-		Version: "v2alpha1", Resource: "serviceexports"}).Namespace(serviceExportDeleted.ObjectMeta.GetNamespace())
-	err := resourceClient.Delete(serviceExportDeleted.ObjectMeta.GetName(), &metav1.DeleteOptions{})
-
-	if err != nil {
-		klog.Errorf("Error deleting the ServiceExport %q: %v", serviceExportDeleted.GetObjectMeta().GetName(), err)
-	}
-}
diff --git a/pkg/agent/controller/types.go b/pkg/agent/controller/types.go
index 24a4b8c..0ac9697 100644
--- a/pkg/agent/controller/types.go
+++ b/pkg/agent/controller/types.go
@@ -29,17 +29,16 @@ import (
 )
 
 type Controller struct {
-	clusterID                 string
-	globalnetEnabled          bool
-	namespace                 string
-	kubeClientSet             kubernetes.Interface
-	serviceExportClient       dynamic.NamespaceableResourceInterface
-	serviceExportSyncer       syncer.Interface
-	serviceImportSyncer       *broker.Syncer
-	endpointSliceSyncer       *broker.Syncer
-	serviceSyncer             syncer.Interface
-	serviceImportController   *ServiceImportController
-	lhServiceExportController *LHServiceExportController
+	clusterID               string
+	globalnetEnabled        bool
+	namespace               string
+	kubeClientSet           kubernetes.Interface
+	serviceExportClient     dynamic.NamespaceableResourceInterface
+	serviceExportSyncer     syncer.Interface
+	serviceImportSyncer     *broker.Syncer
+	endpointSliceSyncer     *broker.Syncer
+	serviceSyncer           syncer.Interface
+	serviceImportController *ServiceImportController
 }
 
 type AgentSpecification struct {
@@ -72,8 +71,3 @@ type EndpointController struct {
 	serviceImportSourceNameSpace string
 	stopCh                       chan struct{}
 }
-
-type LHServiceExportController struct {
-	lhServiceExportSyncer syncer.Interface
-	localClient           dynamic.Interface
-}
diff --git a/pkg/agent/main.go b/pkg/agent/main.go
index 901d837..6ec735c 100644
--- a/pkg/agent/main.go
+++ b/pkg/agent/main.go
@@ -26,7 +26,6 @@ import (
 	"k8s.io/client-go/kubernetes"
 	"k8s.io/client-go/kubernetes/scheme"
 
-	lighthousev2a1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
 	"k8s.io/client-go/tools/clientcmd"
 	"k8s.io/klog"
 	"sigs.k8s.io/controller-runtime/pkg/manager/signals"
@@ -57,11 +56,6 @@ func main() {
 		klog.Exitf("Error adding Multicluster v1alpha1 to the scheme: %v", err)
 	}
 
-	err = lighthousev2a1.AddToScheme(scheme.Scheme)
-	if err != nil {
-		klog.Exitf("Error adding lighthouse V2alpha1 to the scheme: %v", err)
-	}
-
 	cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeConfig)
 	if err != nil {
 		klog.Fatalf("Error building kubeconfig: %s", err.Error())
diff --git a/pkg/apis/lighthouse.submariner.io/v2alpha1/doc.go b/pkg/apis/lighthouse.submariner.io/v2alpha1/doc.go
deleted file mode 100644
index af28397..0000000
--- a/pkg/apis/lighthouse.submariner.io/v2alpha1/doc.go
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-© 2020 Red Hat, Inc. and others
-
-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.
-*/
-// +k8s:deepcopy-gen=package
-// +groupName=lighthouse.submariner.io
-
-package v2alpha1
diff --git a/pkg/apis/lighthouse.submariner.io/v2alpha1/register.go b/pkg/apis/lighthouse.submariner.io/v2alpha1/register.go
deleted file mode 100644
index 2dcf68a..0000000
--- a/pkg/apis/lighthouse.submariner.io/v2alpha1/register.go
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-© 2020 Red Hat, Inc. and others
-
-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 v2alpha1
-
-import (
-	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
-)
-
-// SchemeGroupVersion identifieds the group name and the group version.
-// SchemeGroupVersion is group version used to register these objects
-var SchemeGroupVersion = schema.GroupVersion{
-	Group:   "lighthouse.submariner.io",
-	Version: "v2alpha1",
-}
-
-// create a SchemeBuilder which uses functions to add types to
-// the scheme
-// more comments here
-var (
-	SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
-	AddToScheme   = SchemeBuilder.AddToScheme
-)
-
-// Resource takes an unqualified resource and returns a Group qualified GroupResource
-func Resource(resource string) schema.GroupResource {
-	return SchemeGroupVersion.WithResource(resource).GroupResource()
-}
-
-// addKnownTypes adds our types to the API scheme by registering
-// MultiClusterService and MultiClusterServiceList
-func addKnownTypes(scheme *runtime.Scheme) error {
-	scheme.AddKnownTypes(
-		SchemeGroupVersion,
-		&ServiceExport{},
-		&ServiceExportList{},
-		&ServiceImport{},
-		&ServiceImportList{},
-	)
-
-	// register the type in the scheme
-	meta_v1.AddToGroupVersion(scheme, SchemeGroupVersion)
-
-	return nil
-}
diff --git a/pkg/apis/lighthouse.submariner.io/v2alpha1/types.go b/pkg/apis/lighthouse.submariner.io/v2alpha1/types.go
deleted file mode 100644
index d89dd43..0000000
--- a/pkg/apis/lighthouse.submariner.io/v2alpha1/types.go
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-© 2020 Red Hat, Inc. and others
-
-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 v2alpha1
-
-import (
-	corev1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// Refer: https://github.com/kubernetes/enhancements/pull/1646
-
-//+genclient
-//+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-
-// ServiceExport declares that the associated service should be exported to
-// other clusters.
-type ServiceExport struct {
-	metav1.TypeMeta `json:",inline"`
-	// +optional
-	metav1.ObjectMeta `json:"metadata,omitempty"`
-	// +optional
-	Status ServiceExportStatus `json:"status,omitempty"`
-}
-
-// ServiceExportStatus contains the current status of an export.
-type ServiceExportStatus struct {
-	// +optional
-	// +patchStrategy=merge
-	// +patchMergeKey=type
-	// +listType=map
-	// +listMapKey=type
-	Conditions []ServiceExportCondition `json:"conditions,omitempty"`
-}
-
-// ServiceExportConditionType identifies a specific condition.
-type ServiceExportConditionType string
-
-const (
-	// ServiceExportInitialized means the service export has been noticed
-	// by the controller, has passed validation, has appropriate finalizers
-	// set, and any required clusterset resources like the IP have been
-	// reserved
-	ServiceExportInitialized ServiceExportConditionType = "Initialized"
-	// ServiceExportExported means that the service referenced by this
-	// service export has been synced to all clusters in the clusterset
-	ServiceExportExported ServiceExportConditionType = "Exported"
-)
-
-// ServiceExportCondition contains details for the current condition of this
-// service export.
-//
-// Once [#1624](https://github.com/kubernetes/enhancements/pull/1624) is
-// merged, this will be replaced by metav1.Condition.
-type ServiceExportCondition struct {
-	Type ServiceExportConditionType `json:"type"`
-	// Status is one of {"True", "False", "Unknown"}
-	Status corev1.ConditionStatus `json:"status"`
-	// +optional
-	LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
-	// +optional
-	Reason *string `json:"reason,omitempty"`
-	// +optional
-	Message *string `json:"message,omitempty"`
-}
-
-// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-
-// ServiceExportList is a list of serviceexport objects.
-type ServiceExportList struct {
-	metav1.TypeMeta `json:",inline"`
-	metav1.ListMeta `json:"metadata"`
-	Items           []ServiceExport `json:"items"`
-}
-
-//+genclient
-//+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-// +genclient:noStatus
-
-// ServiceImport describes a service imported from clusters in a clusterset.
-type ServiceImport struct {
-	metav1.TypeMeta `json:",inline"`
-	// +optional
-	metav1.ObjectMeta `json:"metadata,omitempty"`
-	// +optional
-	Spec ServiceImportSpec `json:"spec,omitempty"`
-	// +optional
-	Status ServiceImportStatus `json:"status,omitempty"`
-}
-
-// ServiceImportType designates the type of a ServiceImport
-type ServiceImportType string
-
-const (
-	// Services are only accessible via their clusterset IP.
-	ClusterSetIP ServiceImportType = "ClusterSetIP"
-	// Headless services allow backend pods to be addressed directly.
-	Headless ServiceImportType = "Headless"
-)
-
-// ServiceImportSpec describes an imported service and the information necessary to consume it.
-type ServiceImportSpec struct {
-	// +listType=atomic
-	Ports []ServicePort `json:"ports"`
-	// +optional
-	IP string `json:"ip,omitempty"`
-	// +optional
-	Type ServiceImportType `json:"type"`
-	// +optional
-	SessionAffinity corev1.ServiceAffinity `json:"sessionAffinity"`
-	// +optional
-	SessionAffinityConfig *corev1.SessionAffinityConfig `json:"sessionAffinityConfig"`
-}
-
-// ServicePort represents the port on which the service is exposed
-type ServicePort struct {
-	// The name of this port within the service. This must be a DNS_LABEL.
-	// All ports within a ServiceSpec must have unique names. When considering
-	// the endpoints for a Service, this must match the 'name' field in the
-	// EndpointPort.
-	// Optional if only one ServicePort is defined on this service.
-	// +optional
-	Name string `json:"name,omitempty"`
-
-	// The IP protocol for this port. Supports "TCP", "UDP", and "SCTP".
-	// Default is TCP.
-	// +optional
-	Protocol corev1.Protocol `json:"protocol,omitempty"`
-
-	// The application protocol for this port.
-	// This field follows standard Kubernetes label syntax.
-	// Un-prefixed names are reserved for IANA standard service names (as per
-	// RFC-6335 and http://www.iana.org/assignments/service-names).
-	// Non-standard protocols should use prefixed names such as
-	// mycompany.com/my-custom-protocol.
-	// Field can be enabled with ServiceAppProtocol feature gate.
-	// +optional
-	AppProtocol *string `json:"appProtocol,omitempty"`
-
-	// The port that will be exposed by this service.
-	Port int32 `json:"port"`
-}
-
-// ServiceImportStatus describes derived state of an imported service.
-type ServiceImportStatus struct {
-	// +optional
-	// +patchStrategy=merge
-	// +patchMergeKey=cluster
-	// +listType=map
-	// +listMapKey=cluster
-	Clusters []ClusterStatus `json:"clusters"`
-}
-
-// ClusterStatus contains service configuration mapped to a specific source cluster
-type ClusterStatus struct {
-	Cluster string `json:"cluster"`
-
-	// The IP(s) of the service running in the cluster.  In the case of a headless service, it is the list of pod IPs
-	// that back the service.
-	// +optional
-	IPs []string `json:"ips,omitempty"`
-}
-
-// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-
-// ServiceImportList is a list of serviceimport objects.
-type ServiceImportList struct {
-	metav1.TypeMeta `json:",inline"`
-	metav1.ListMeta `json:"metadata"`
-	Items           []ServiceImport `json:"items"`
-}
diff --git a/pkg/apis/lighthouse.submariner.io/v2alpha1/zz_generated.deepcopy.go b/pkg/apis/lighthouse.submariner.io/v2alpha1/zz_generated.deepcopy.go
deleted file mode 100644
index 460055b..0000000
--- a/pkg/apis/lighthouse.submariner.io/v2alpha1/zz_generated.deepcopy.go
+++ /dev/null
@@ -1,293 +0,0 @@
-// +build !ignore_autogenerated
-
-/*
-Copyright 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.
-*/
-
-// Code generated by deepcopy-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	v1 "k8s.io/api/core/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) {
-	*out = *in
-	if in.IPs != nil {
-		in, out := &in.IPs, &out.IPs
-		*out = make([]string, len(*in))
-		copy(*out, *in)
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus.
-func (in *ClusterStatus) DeepCopy() *ClusterStatus {
-	if in == nil {
-		return nil
-	}
-	out := new(ClusterStatus)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceExport) DeepCopyInto(out *ServiceExport) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	in.Status.DeepCopyInto(&out.Status)
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceExport.
-func (in *ServiceExport) DeepCopy() *ServiceExport {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceExport)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ServiceExport) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceExportCondition) DeepCopyInto(out *ServiceExportCondition) {
-	*out = *in
-	if in.LastTransitionTime != nil {
-		in, out := &in.LastTransitionTime, &out.LastTransitionTime
-		*out = (*in).DeepCopy()
-	}
-	if in.Reason != nil {
-		in, out := &in.Reason, &out.Reason
-		*out = new(string)
-		**out = **in
-	}
-	if in.Message != nil {
-		in, out := &in.Message, &out.Message
-		*out = new(string)
-		**out = **in
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceExportCondition.
-func (in *ServiceExportCondition) DeepCopy() *ServiceExportCondition {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceExportCondition)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceExportList) DeepCopyInto(out *ServiceExportList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ListMeta.DeepCopyInto(&out.ListMeta)
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]ServiceExport, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceExportList.
-func (in *ServiceExportList) DeepCopy() *ServiceExportList {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceExportList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ServiceExportList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceExportStatus) DeepCopyInto(out *ServiceExportStatus) {
-	*out = *in
-	if in.Conditions != nil {
-		in, out := &in.Conditions, &out.Conditions
-		*out = make([]ServiceExportCondition, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceExportStatus.
-func (in *ServiceExportStatus) DeepCopy() *ServiceExportStatus {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceExportStatus)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceImport) DeepCopyInto(out *ServiceImport) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	in.Spec.DeepCopyInto(&out.Spec)
-	in.Status.DeepCopyInto(&out.Status)
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceImport.
-func (in *ServiceImport) DeepCopy() *ServiceImport {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceImport)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ServiceImport) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceImportList) DeepCopyInto(out *ServiceImportList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ListMeta.DeepCopyInto(&out.ListMeta)
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]ServiceImport, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceImportList.
-func (in *ServiceImportList) DeepCopy() *ServiceImportList {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceImportList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ServiceImportList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceImportSpec) DeepCopyInto(out *ServiceImportSpec) {
-	*out = *in
-	if in.Ports != nil {
-		in, out := &in.Ports, &out.Ports
-		*out = make([]ServicePort, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-	if in.SessionAffinityConfig != nil {
-		in, out := &in.SessionAffinityConfig, &out.SessionAffinityConfig
-		*out = new(v1.SessionAffinityConfig)
-		(*in).DeepCopyInto(*out)
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceImportSpec.
-func (in *ServiceImportSpec) DeepCopy() *ServiceImportSpec {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceImportSpec)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceImportStatus) DeepCopyInto(out *ServiceImportStatus) {
-	*out = *in
-	if in.Clusters != nil {
-		in, out := &in.Clusters, &out.Clusters
-		*out = make([]ClusterStatus, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceImportStatus.
-func (in *ServiceImportStatus) DeepCopy() *ServiceImportStatus {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceImportStatus)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServicePort) DeepCopyInto(out *ServicePort) {
-	*out = *in
-	if in.AppProtocol != nil {
-		in, out := &in.AppProtocol, &out.AppProtocol
-		*out = new(string)
-		**out = **in
-	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServicePort.
-func (in *ServicePort) DeepCopy() *ServicePort {
-	if in == nil {
-		return nil
-	}
-	out := new(ServicePort)
-	in.DeepCopyInto(out)
-	return out
-}
diff --git a/pkg/client/clientset/versioned/clientset.go b/pkg/client/clientset/versioned/clientset.go
deleted file mode 100644
index c16e153..0000000
--- a/pkg/client/clientset/versioned/clientset.go
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package versioned
-
-import (
-	"fmt"
-
-	lighthousev2alpha1 "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1"
-	discovery "k8s.io/client-go/discovery"
-	rest "k8s.io/client-go/rest"
-	flowcontrol "k8s.io/client-go/util/flowcontrol"
-)
-
-type Interface interface {
-	Discovery() discovery.DiscoveryInterface
-	LighthouseV2alpha1() lighthousev2alpha1.LighthouseV2alpha1Interface
-}
-
-// Clientset contains the clients for groups. Each group has exactly one
-// version included in a Clientset.
-type Clientset struct {
-	*discovery.DiscoveryClient
-	lighthouseV2alpha1 *lighthousev2alpha1.LighthouseV2alpha1Client
-}
-
-// LighthouseV2alpha1 retrieves the LighthouseV2alpha1Client
-func (c *Clientset) LighthouseV2alpha1() lighthousev2alpha1.LighthouseV2alpha1Interface {
-	return c.lighthouseV2alpha1
-}
-
-// Discovery retrieves the DiscoveryClient
-func (c *Clientset) Discovery() discovery.DiscoveryInterface {
-	if c == nil {
-		return nil
-	}
-	return c.DiscoveryClient
-}
-
-// NewForConfig creates a new Clientset for the given config.
-// If config's RateLimiter is not set and QPS and Burst are acceptable,
-// NewForConfig will generate a rate-limiter in configShallowCopy.
-func NewForConfig(c *rest.Config) (*Clientset, error) {
-	configShallowCopy := *c
-	if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 {
-		if configShallowCopy.Burst <= 0 {
-			return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0")
-		}
-		configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst)
-	}
-	var cs Clientset
-	var err error
-	cs.lighthouseV2alpha1, err = lighthousev2alpha1.NewForConfig(&configShallowCopy)
-	if err != nil {
-		return nil, err
-	}
-
-	cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy)
-	if err != nil {
-		return nil, err
-	}
-	return &cs, nil
-}
-
-// NewForConfigOrDie creates a new Clientset for the given config and
-// panics if there is an error in the config.
-func NewForConfigOrDie(c *rest.Config) *Clientset {
-	var cs Clientset
-	cs.lighthouseV2alpha1 = lighthousev2alpha1.NewForConfigOrDie(c)
-
-	cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c)
-	return &cs
-}
-
-// New creates a new Clientset for the given RESTClient.
-func New(c rest.Interface) *Clientset {
-	var cs Clientset
-	cs.lighthouseV2alpha1 = lighthousev2alpha1.New(c)
-
-	cs.DiscoveryClient = discovery.NewDiscoveryClient(c)
-	return &cs
-}
diff --git a/pkg/client/clientset/versioned/doc.go b/pkg/client/clientset/versioned/doc.go
deleted file mode 100644
index 41721ca..0000000
--- a/pkg/client/clientset/versioned/doc.go
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-// This package has the automatically generated clientset.
-package versioned
diff --git a/pkg/client/clientset/versioned/fake/clientset_generated.go b/pkg/client/clientset/versioned/fake/clientset_generated.go
deleted file mode 100644
index be25bf8..0000000
--- a/pkg/client/clientset/versioned/fake/clientset_generated.go
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	clientset "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned"
-	lighthousev2alpha1 "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1"
-	fakelighthousev2alpha1 "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/watch"
-	"k8s.io/client-go/discovery"
-	fakediscovery "k8s.io/client-go/discovery/fake"
-	"k8s.io/client-go/testing"
-)
-
-// NewSimpleClientset returns a clientset that will respond with the provided objects.
-// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
-// without applying any validations and/or defaults. It shouldn't be considered a replacement
-// for a real clientset and is mostly useful in simple unit tests.
-func NewSimpleClientset(objects ...runtime.Object) *Clientset {
-	o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
-	for _, obj := range objects {
-		if err := o.Add(obj); err != nil {
-			panic(err)
-		}
-	}
-
-	cs := &Clientset{tracker: o}
-	cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
-	cs.AddReactor("*", "*", testing.ObjectReaction(o))
-	cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
-		gvr := action.GetResource()
-		ns := action.GetNamespace()
-		watch, err := o.Watch(gvr, ns)
-		if err != nil {
-			return false, nil, err
-		}
-		return true, watch, nil
-	})
-
-	return cs
-}
-
-// Clientset implements clientset.Interface. Meant to be embedded into a
-// struct to get a default implementation. This makes faking out just the method
-// you want to test easier.
-type Clientset struct {
-	testing.Fake
-	discovery *fakediscovery.FakeDiscovery
-	tracker   testing.ObjectTracker
-}
-
-func (c *Clientset) Discovery() discovery.DiscoveryInterface {
-	return c.discovery
-}
-
-func (c *Clientset) Tracker() testing.ObjectTracker {
-	return c.tracker
-}
-
-var _ clientset.Interface = &Clientset{}
-
-// LighthouseV2alpha1 retrieves the LighthouseV2alpha1Client
-func (c *Clientset) LighthouseV2alpha1() lighthousev2alpha1.LighthouseV2alpha1Interface {
-	return &fakelighthousev2alpha1.FakeLighthouseV2alpha1{Fake: &c.Fake}
-}
diff --git a/pkg/client/clientset/versioned/fake/doc.go b/pkg/client/clientset/versioned/fake/doc.go
deleted file mode 100644
index 9b99e71..0000000
--- a/pkg/client/clientset/versioned/fake/doc.go
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-// This package has the automatically generated fake clientset.
-package fake
diff --git a/pkg/client/clientset/versioned/fake/register.go b/pkg/client/clientset/versioned/fake/register.go
deleted file mode 100644
index ecb7317..0000000
--- a/pkg/client/clientset/versioned/fake/register.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	lighthousev2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	serializer "k8s.io/apimachinery/pkg/runtime/serializer"
-	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
-)
-
-var scheme = runtime.NewScheme()
-var codecs = serializer.NewCodecFactory(scheme)
-var parameterCodec = runtime.NewParameterCodec(scheme)
-var localSchemeBuilder = runtime.SchemeBuilder{
-	lighthousev2alpha1.AddToScheme,
-}
-
-// AddToScheme adds all types of this clientset into the given scheme. This allows composition
-// of clientsets, like in:
-//
-//   import (
-//     "k8s.io/client-go/kubernetes"
-//     clientsetscheme "k8s.io/client-go/kubernetes/scheme"
-//     aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
-//   )
-//
-//   kclientset, _ := kubernetes.NewForConfig(c)
-//   _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
-//
-// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
-// correctly.
-var AddToScheme = localSchemeBuilder.AddToScheme
-
-func init() {
-	v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
-	utilruntime.Must(AddToScheme(scheme))
-}
diff --git a/pkg/client/clientset/versioned/scheme/doc.go b/pkg/client/clientset/versioned/scheme/doc.go
deleted file mode 100644
index 7dc3756..0000000
--- a/pkg/client/clientset/versioned/scheme/doc.go
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-// This package contains the scheme of the automatically generated clientset.
-package scheme
diff --git a/pkg/client/clientset/versioned/scheme/register.go b/pkg/client/clientset/versioned/scheme/register.go
deleted file mode 100644
index ae80a4b..0000000
--- a/pkg/client/clientset/versioned/scheme/register.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package scheme
-
-import (
-	lighthousev2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	serializer "k8s.io/apimachinery/pkg/runtime/serializer"
-	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
-)
-
-var Scheme = runtime.NewScheme()
-var Codecs = serializer.NewCodecFactory(Scheme)
-var ParameterCodec = runtime.NewParameterCodec(Scheme)
-var localSchemeBuilder = runtime.SchemeBuilder{
-	lighthousev2alpha1.AddToScheme,
-}
-
-// AddToScheme adds all types of this clientset into the given scheme. This allows composition
-// of clientsets, like in:
-//
-//   import (
-//     "k8s.io/client-go/kubernetes"
-//     clientsetscheme "k8s.io/client-go/kubernetes/scheme"
-//     aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
-//   )
-//
-//   kclientset, _ := kubernetes.NewForConfig(c)
-//   _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
-//
-// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
-// correctly.
-var AddToScheme = localSchemeBuilder.AddToScheme
-
-func init() {
-	v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
-	utilruntime.Must(AddToScheme(Scheme))
-}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/doc.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/doc.go
deleted file mode 100644
index 3efe0d2..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/doc.go
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-// This package has the automatically generated typed clients.
-package v2alpha1
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/doc.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/doc.go
deleted file mode 100644
index 16f4439..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/doc.go
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-// Package fake has the automatically generated clients.
-package fake
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_lighthouse.submariner.io_client.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_lighthouse.submariner.io_client.go
deleted file mode 100644
index 04ad9dc..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_lighthouse.submariner.io_client.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1"
-	rest "k8s.io/client-go/rest"
-	testing "k8s.io/client-go/testing"
-)
-
-type FakeLighthouseV2alpha1 struct {
-	*testing.Fake
-}
-
-func (c *FakeLighthouseV2alpha1) ServiceExports(namespace string) v2alpha1.ServiceExportInterface {
-	return &FakeServiceExports{c, namespace}
-}
-
-func (c *FakeLighthouseV2alpha1) ServiceImports(namespace string) v2alpha1.ServiceImportInterface {
-	return &FakeServiceImports{c, namespace}
-}
-
-// RESTClient returns a RESTClient that is used to communicate
-// with API server by this client implementation.
-func (c *FakeLighthouseV2alpha1) RESTClient() rest.Interface {
-	var ret *rest.RESTClient
-	return ret
-}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_serviceexport.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_serviceexport.go
deleted file mode 100644
index a09799f..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_serviceexport.go
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
-)
-
-// FakeServiceExports implements ServiceExportInterface
-type FakeServiceExports struct {
-	Fake *FakeLighthouseV2alpha1
-	ns   string
-}
-
-var serviceexportsResource = schema.GroupVersionResource{Group: "lighthouse.submariner.io", Version: "v2alpha1", Resource: "serviceexports"}
-
-var serviceexportsKind = schema.GroupVersionKind{Group: "lighthouse.submariner.io", Version: "v2alpha1", Kind: "ServiceExport"}
-
-// Get takes name of the serviceExport, and returns the corresponding serviceExport object, and an error if there is any.
-func (c *FakeServiceExports) Get(name string, options v1.GetOptions) (result *v2alpha1.ServiceExport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewGetAction(serviceexportsResource, c.ns, name), &v2alpha1.ServiceExport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceExport), err
-}
-
-// List takes label and field selectors, and returns the list of ServiceExports that match those selectors.
-func (c *FakeServiceExports) List(opts v1.ListOptions) (result *v2alpha1.ServiceExportList, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewListAction(serviceexportsResource, serviceexportsKind, c.ns, opts), &v2alpha1.ServiceExportList{})
-
-	if obj == nil {
-		return nil, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v2alpha1.ServiceExportList{ListMeta: obj.(*v2alpha1.ServiceExportList).ListMeta}
-	for _, item := range obj.(*v2alpha1.ServiceExportList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested serviceExports.
-func (c *FakeServiceExports) Watch(opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchAction(serviceexportsResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a serviceExport and creates it.  Returns the server's representation of the serviceExport, and an error, if there is any.
-func (c *FakeServiceExports) Create(serviceExport *v2alpha1.ServiceExport) (result *v2alpha1.ServiceExport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateAction(serviceexportsResource, c.ns, serviceExport), &v2alpha1.ServiceExport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceExport), err
-}
-
-// Update takes the representation of a serviceExport and updates it. Returns the server's representation of the serviceExport, and an error, if there is any.
-func (c *FakeServiceExports) Update(serviceExport *v2alpha1.ServiceExport) (result *v2alpha1.ServiceExport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateAction(serviceexportsResource, c.ns, serviceExport), &v2alpha1.ServiceExport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceExport), err
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeServiceExports) UpdateStatus(serviceExport *v2alpha1.ServiceExport) (*v2alpha1.ServiceExport, error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceAction(serviceexportsResource, "status", c.ns, serviceExport), &v2alpha1.ServiceExport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceExport), err
-}
-
-// Delete takes name of the serviceExport and deletes it. Returns an error if one occurs.
-func (c *FakeServiceExports) Delete(name string, options *v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteAction(serviceexportsResource, c.ns, name), &v2alpha1.ServiceExport{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeServiceExports) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
-	action := testing.NewDeleteCollectionAction(serviceexportsResource, c.ns, listOptions)
-
-	_, err := c.Fake.Invokes(action, &v2alpha1.ServiceExportList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched serviceExport.
-func (c *FakeServiceExports) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2alpha1.ServiceExport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceAction(serviceexportsResource, c.ns, name, pt, data, subresources...), &v2alpha1.ServiceExport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceExport), err
-}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_serviceimport.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_serviceimport.go
deleted file mode 100644
index 8e26f84..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/fake/fake_serviceimport.go
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
-)
-
-// FakeServiceImports implements ServiceImportInterface
-type FakeServiceImports struct {
-	Fake *FakeLighthouseV2alpha1
-	ns   string
-}
-
-var serviceimportsResource = schema.GroupVersionResource{Group: "lighthouse.submariner.io", Version: "v2alpha1", Resource: "serviceimports"}
-
-var serviceimportsKind = schema.GroupVersionKind{Group: "lighthouse.submariner.io", Version: "v2alpha1", Kind: "ServiceImport"}
-
-// Get takes name of the serviceImport, and returns the corresponding serviceImport object, and an error if there is any.
-func (c *FakeServiceImports) Get(name string, options v1.GetOptions) (result *v2alpha1.ServiceImport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewGetAction(serviceimportsResource, c.ns, name), &v2alpha1.ServiceImport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceImport), err
-}
-
-// List takes label and field selectors, and returns the list of ServiceImports that match those selectors.
-func (c *FakeServiceImports) List(opts v1.ListOptions) (result *v2alpha1.ServiceImportList, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewListAction(serviceimportsResource, serviceimportsKind, c.ns, opts), &v2alpha1.ServiceImportList{})
-
-	if obj == nil {
-		return nil, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v2alpha1.ServiceImportList{ListMeta: obj.(*v2alpha1.ServiceImportList).ListMeta}
-	for _, item := range obj.(*v2alpha1.ServiceImportList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested serviceImports.
-func (c *FakeServiceImports) Watch(opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchAction(serviceimportsResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a serviceImport and creates it.  Returns the server's representation of the serviceImport, and an error, if there is any.
-func (c *FakeServiceImports) Create(serviceImport *v2alpha1.ServiceImport) (result *v2alpha1.ServiceImport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateAction(serviceimportsResource, c.ns, serviceImport), &v2alpha1.ServiceImport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceImport), err
-}
-
-// Update takes the representation of a serviceImport and updates it. Returns the server's representation of the serviceImport, and an error, if there is any.
-func (c *FakeServiceImports) Update(serviceImport *v2alpha1.ServiceImport) (result *v2alpha1.ServiceImport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateAction(serviceimportsResource, c.ns, serviceImport), &v2alpha1.ServiceImport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceImport), err
-}
-
-// Delete takes name of the serviceImport and deletes it. Returns an error if one occurs.
-func (c *FakeServiceImports) Delete(name string, options *v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteAction(serviceimportsResource, c.ns, name), &v2alpha1.ServiceImport{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeServiceImports) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
-	action := testing.NewDeleteCollectionAction(serviceimportsResource, c.ns, listOptions)
-
-	_, err := c.Fake.Invokes(action, &v2alpha1.ServiceImportList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched serviceImport.
-func (c *FakeServiceImports) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2alpha1.ServiceImport, err error) {
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceAction(serviceimportsResource, c.ns, name, pt, data, subresources...), &v2alpha1.ServiceImport{})
-
-	if obj == nil {
-		return nil, err
-	}
-	return obj.(*v2alpha1.ServiceImport), err
-}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/generated_expansion.go
deleted file mode 100644
index 207a7a3..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/generated_expansion.go
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v2alpha1
-
-type ServiceExportExpansion interface{}
-
-type ServiceImportExpansion interface{}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/lighthouse.submariner.io_client.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/lighthouse.submariner.io_client.go
deleted file mode 100644
index e3457c9..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/lighthouse.submariner.io_client.go
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	"github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/scheme"
-	rest "k8s.io/client-go/rest"
-)
-
-type LighthouseV2alpha1Interface interface {
-	RESTClient() rest.Interface
-	ServiceExportsGetter
-	ServiceImportsGetter
-}
-
-// LighthouseV2alpha1Client is used to interact with features provided by the lighthouse.submariner.io group.
-type LighthouseV2alpha1Client struct {
-	restClient rest.Interface
-}
-
-func (c *LighthouseV2alpha1Client) ServiceExports(namespace string) ServiceExportInterface {
-	return newServiceExports(c, namespace)
-}
-
-func (c *LighthouseV2alpha1Client) ServiceImports(namespace string) ServiceImportInterface {
-	return newServiceImports(c, namespace)
-}
-
-// NewForConfig creates a new LighthouseV2alpha1Client for the given config.
-func NewForConfig(c *rest.Config) (*LighthouseV2alpha1Client, error) {
-	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
-	client, err := rest.RESTClientFor(&config)
-	if err != nil {
-		return nil, err
-	}
-	return &LighthouseV2alpha1Client{client}, nil
-}
-
-// NewForConfigOrDie creates a new LighthouseV2alpha1Client for the given config and
-// panics if there is an error in the config.
-func NewForConfigOrDie(c *rest.Config) *LighthouseV2alpha1Client {
-	client, err := NewForConfig(c)
-	if err != nil {
-		panic(err)
-	}
-	return client
-}
-
-// New creates a new LighthouseV2alpha1Client for the given RESTClient.
-func New(c rest.Interface) *LighthouseV2alpha1Client {
-	return &LighthouseV2alpha1Client{c}
-}
-
-func setConfigDefaults(config *rest.Config) error {
-	gv := v2alpha1.SchemeGroupVersion
-	config.GroupVersion = &gv
-	config.APIPath = "/apis"
-	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
-
-	if config.UserAgent == "" {
-		config.UserAgent = rest.DefaultKubernetesUserAgent()
-	}
-
-	return nil
-}
-
-// RESTClient returns a RESTClient that is used to communicate
-// with API server by this client implementation.
-func (c *LighthouseV2alpha1Client) RESTClient() rest.Interface {
-	if c == nil {
-		return nil
-	}
-	return c.restClient
-}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/serviceexport.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/serviceexport.go
deleted file mode 100644
index 1c6460d..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/serviceexport.go
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	"time"
-
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	scheme "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/scheme"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	rest "k8s.io/client-go/rest"
-)
-
-// ServiceExportsGetter has a method to return a ServiceExportInterface.
-// A group's client should implement this interface.
-type ServiceExportsGetter interface {
-	ServiceExports(namespace string) ServiceExportInterface
-}
-
-// ServiceExportInterface has methods to work with ServiceExport resources.
-type ServiceExportInterface interface {
-	Create(*v2alpha1.ServiceExport) (*v2alpha1.ServiceExport, error)
-	Update(*v2alpha1.ServiceExport) (*v2alpha1.ServiceExport, error)
-	UpdateStatus(*v2alpha1.ServiceExport) (*v2alpha1.ServiceExport, error)
-	Delete(name string, options *v1.DeleteOptions) error
-	DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
-	Get(name string, options v1.GetOptions) (*v2alpha1.ServiceExport, error)
-	List(opts v1.ListOptions) (*v2alpha1.ServiceExportList, error)
-	Watch(opts v1.ListOptions) (watch.Interface, error)
-	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2alpha1.ServiceExport, err error)
-	ServiceExportExpansion
-}
-
-// serviceExports implements ServiceExportInterface
-type serviceExports struct {
-	client rest.Interface
-	ns     string
-}
-
-// newServiceExports returns a ServiceExports
-func newServiceExports(c *LighthouseV2alpha1Client, namespace string) *serviceExports {
-	return &serviceExports{
-		client: c.RESTClient(),
-		ns:     namespace,
-	}
-}
-
-// Get takes name of the serviceExport, and returns the corresponding serviceExport object, and an error if there is any.
-func (c *serviceExports) Get(name string, options v1.GetOptions) (result *v2alpha1.ServiceExport, err error) {
-	result = &v2alpha1.ServiceExport{}
-	err = c.client.Get().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		Name(name).
-		VersionedParams(&options, scheme.ParameterCodec).
-		Do().
-		Into(result)
-	return
-}
-
-// List takes label and field selectors, and returns the list of ServiceExports that match those selectors.
-func (c *serviceExports) List(opts v1.ListOptions) (result *v2alpha1.ServiceExportList, err error) {
-	var timeout time.Duration
-	if opts.TimeoutSeconds != nil {
-		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
-	}
-	result = &v2alpha1.ServiceExportList{}
-	err = c.client.Get().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Timeout(timeout).
-		Do().
-		Into(result)
-	return
-}
-
-// Watch returns a watch.Interface that watches the requested serviceExports.
-func (c *serviceExports) Watch(opts v1.ListOptions) (watch.Interface, error) {
-	var timeout time.Duration
-	if opts.TimeoutSeconds != nil {
-		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
-	}
-	opts.Watch = true
-	return c.client.Get().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Timeout(timeout).
-		Watch()
-}
-
-// Create takes the representation of a serviceExport and creates it.  Returns the server's representation of the serviceExport, and an error, if there is any.
-func (c *serviceExports) Create(serviceExport *v2alpha1.ServiceExport) (result *v2alpha1.ServiceExport, err error) {
-	result = &v2alpha1.ServiceExport{}
-	err = c.client.Post().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		Body(serviceExport).
-		Do().
-		Into(result)
-	return
-}
-
-// Update takes the representation of a serviceExport and updates it. Returns the server's representation of the serviceExport, and an error, if there is any.
-func (c *serviceExports) Update(serviceExport *v2alpha1.ServiceExport) (result *v2alpha1.ServiceExport, err error) {
-	result = &v2alpha1.ServiceExport{}
-	err = c.client.Put().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		Name(serviceExport.Name).
-		Body(serviceExport).
-		Do().
-		Into(result)
-	return
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-
-func (c *serviceExports) UpdateStatus(serviceExport *v2alpha1.ServiceExport) (result *v2alpha1.ServiceExport, err error) {
-	result = &v2alpha1.ServiceExport{}
-	err = c.client.Put().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		Name(serviceExport.Name).
-		SubResource("status").
-		Body(serviceExport).
-		Do().
-		Into(result)
-	return
-}
-
-// Delete takes name of the serviceExport and deletes it. Returns an error if one occurs.
-func (c *serviceExports) Delete(name string, options *v1.DeleteOptions) error {
-	return c.client.Delete().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		Name(name).
-		Body(options).
-		Do().
-		Error()
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *serviceExports) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
-	var timeout time.Duration
-	if listOptions.TimeoutSeconds != nil {
-		timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second
-	}
-	return c.client.Delete().
-		Namespace(c.ns).
-		Resource("serviceexports").
-		VersionedParams(&listOptions, scheme.ParameterCodec).
-		Timeout(timeout).
-		Body(options).
-		Do().
-		Error()
-}
-
-// Patch applies the patch and returns the patched serviceExport.
-func (c *serviceExports) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2alpha1.ServiceExport, err error) {
-	result = &v2alpha1.ServiceExport{}
-	err = c.client.Patch(pt).
-		Namespace(c.ns).
-		Resource("serviceexports").
-		SubResource(subresources...).
-		Name(name).
-		Body(data).
-		Do().
-		Into(result)
-	return
-}
diff --git a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/serviceimport.go b/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/serviceimport.go
deleted file mode 100644
index 7943f91..0000000
--- a/pkg/client/clientset/versioned/typed/lighthouse.submariner.io/v2alpha1/serviceimport.go
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	"time"
-
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	scheme "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned/scheme"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	rest "k8s.io/client-go/rest"
-)
-
-// ServiceImportsGetter has a method to return a ServiceImportInterface.
-// A group's client should implement this interface.
-type ServiceImportsGetter interface {
-	ServiceImports(namespace string) ServiceImportInterface
-}
-
-// ServiceImportInterface has methods to work with ServiceImport resources.
-type ServiceImportInterface interface {
-	Create(*v2alpha1.ServiceImport) (*v2alpha1.ServiceImport, error)
-	Update(*v2alpha1.ServiceImport) (*v2alpha1.ServiceImport, error)
-	Delete(name string, options *v1.DeleteOptions) error
-	DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
-	Get(name string, options v1.GetOptions) (*v2alpha1.ServiceImport, error)
-	List(opts v1.ListOptions) (*v2alpha1.ServiceImportList, error)
-	Watch(opts v1.ListOptions) (watch.Interface, error)
-	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2alpha1.ServiceImport, err error)
-	ServiceImportExpansion
-}
-
-// serviceImports implements ServiceImportInterface
-type serviceImports struct {
-	client rest.Interface
-	ns     string
-}
-
-// newServiceImports returns a ServiceImports
-func newServiceImports(c *LighthouseV2alpha1Client, namespace string) *serviceImports {
-	return &serviceImports{
-		client: c.RESTClient(),
-		ns:     namespace,
-	}
-}
-
-// Get takes name of the serviceImport, and returns the corresponding serviceImport object, and an error if there is any.
-func (c *serviceImports) Get(name string, options v1.GetOptions) (result *v2alpha1.ServiceImport, err error) {
-	result = &v2alpha1.ServiceImport{}
-	err = c.client.Get().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		Name(name).
-		VersionedParams(&options, scheme.ParameterCodec).
-		Do().
-		Into(result)
-	return
-}
-
-// List takes label and field selectors, and returns the list of ServiceImports that match those selectors.
-func (c *serviceImports) List(opts v1.ListOptions) (result *v2alpha1.ServiceImportList, err error) {
-	var timeout time.Duration
-	if opts.TimeoutSeconds != nil {
-		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
-	}
-	result = &v2alpha1.ServiceImportList{}
-	err = c.client.Get().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Timeout(timeout).
-		Do().
-		Into(result)
-	return
-}
-
-// Watch returns a watch.Interface that watches the requested serviceImports.
-func (c *serviceImports) Watch(opts v1.ListOptions) (watch.Interface, error) {
-	var timeout time.Duration
-	if opts.TimeoutSeconds != nil {
-		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
-	}
-	opts.Watch = true
-	return c.client.Get().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Timeout(timeout).
-		Watch()
-}
-
-// Create takes the representation of a serviceImport and creates it.  Returns the server's representation of the serviceImport, and an error, if there is any.
-func (c *serviceImports) Create(serviceImport *v2alpha1.ServiceImport) (result *v2alpha1.ServiceImport, err error) {
-	result = &v2alpha1.ServiceImport{}
-	err = c.client.Post().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		Body(serviceImport).
-		Do().
-		Into(result)
-	return
-}
-
-// Update takes the representation of a serviceImport and updates it. Returns the server's representation of the serviceImport, and an error, if there is any.
-func (c *serviceImports) Update(serviceImport *v2alpha1.ServiceImport) (result *v2alpha1.ServiceImport, err error) {
-	result = &v2alpha1.ServiceImport{}
-	err = c.client.Put().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		Name(serviceImport.Name).
-		Body(serviceImport).
-		Do().
-		Into(result)
-	return
-}
-
-// Delete takes name of the serviceImport and deletes it. Returns an error if one occurs.
-func (c *serviceImports) Delete(name string, options *v1.DeleteOptions) error {
-	return c.client.Delete().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		Name(name).
-		Body(options).
-		Do().
-		Error()
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *serviceImports) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
-	var timeout time.Duration
-	if listOptions.TimeoutSeconds != nil {
-		timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second
-	}
-	return c.client.Delete().
-		Namespace(c.ns).
-		Resource("serviceimports").
-		VersionedParams(&listOptions, scheme.ParameterCodec).
-		Timeout(timeout).
-		Body(options).
-		Do().
-		Error()
-}
-
-// Patch applies the patch and returns the patched serviceImport.
-func (c *serviceImports) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2alpha1.ServiceImport, err error) {
-	result = &v2alpha1.ServiceImport{}
-	err = c.client.Patch(pt).
-		Namespace(c.ns).
-		Resource("serviceimports").
-		SubResource(subresources...).
-		Name(name).
-		Body(data).
-		Do().
-		Into(result)
-	return
-}
diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go
deleted file mode 100644
index e0b41a3..0000000
--- a/pkg/client/informers/externalversions/factory.go
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package externalversions
-
-import (
-	reflect "reflect"
-	sync "sync"
-	time "time"
-
-	versioned "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned"
-	internalinterfaces "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/internalinterfaces"
-	lighthousesubmarinerio "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/lighthouse.submariner.io"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// SharedInformerOption defines the functional option type for SharedInformerFactory.
-type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
-
-type sharedInformerFactory struct {
-	client           versioned.Interface
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	lock             sync.Mutex
-	defaultResync    time.Duration
-	customResync     map[reflect.Type]time.Duration
-
-	informers map[reflect.Type]cache.SharedIndexInformer
-	// startedInformers is used for tracking which informers have been started.
-	// This allows Start() to be called multiple times safely.
-	startedInformers map[reflect.Type]bool
-}
-
-// WithCustomResyncConfig sets a custom resync period for the specified informer types.
-func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption {
-	return func(factory *sharedInformerFactory) *sharedInformerFactory {
-		for k, v := range resyncConfig {
-			factory.customResync[reflect.TypeOf(k)] = v
-		}
-		return factory
-	}
-}
-
-// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory.
-func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption {
-	return func(factory *sharedInformerFactory) *sharedInformerFactory {
-		factory.tweakListOptions = tweakListOptions
-		return factory
-	}
-}
-
-// WithNamespace limits the SharedInformerFactory to the specified namespace.
-func WithNamespace(namespace string) SharedInformerOption {
-	return func(factory *sharedInformerFactory) *sharedInformerFactory {
-		factory.namespace = namespace
-		return factory
-	}
-}
-
-// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
-func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
-	return NewSharedInformerFactoryWithOptions(client, defaultResync)
-}
-
-// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory.
-// Listers obtained via this SharedInformerFactory will be subject to the same filters
-// as specified here.
-// Deprecated: Please use NewSharedInformerFactoryWithOptions instead
-func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
-	return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
-}
-
-// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options.
-func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory {
-	factory := &sharedInformerFactory{
-		client:           client,
-		namespace:        v1.NamespaceAll,
-		defaultResync:    defaultResync,
-		informers:        make(map[reflect.Type]cache.SharedIndexInformer),
-		startedInformers: make(map[reflect.Type]bool),
-		customResync:     make(map[reflect.Type]time.Duration),
-	}
-
-	// Apply all options
-	for _, opt := range options {
-		factory = opt(factory)
-	}
-
-	return factory
-}
-
-// Start initializes all requested informers.
-func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
-	f.lock.Lock()
-	defer f.lock.Unlock()
-
-	for informerType, informer := range f.informers {
-		if !f.startedInformers[informerType] {
-			go informer.Run(stopCh)
-			f.startedInformers[informerType] = true
-		}
-	}
-}
-
-// WaitForCacheSync waits for all started informers' cache were synced.
-func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
-	informers := func() map[reflect.Type]cache.SharedIndexInformer {
-		f.lock.Lock()
-		defer f.lock.Unlock()
-
-		informers := map[reflect.Type]cache.SharedIndexInformer{}
-		for informerType, informer := range f.informers {
-			if f.startedInformers[informerType] {
-				informers[informerType] = informer
-			}
-		}
-		return informers
-	}()
-
-	res := map[reflect.Type]bool{}
-	for informType, informer := range informers {
-		res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced)
-	}
-	return res
-}
-
-// InternalInformerFor returns the SharedIndexInformer for obj using an internal
-// client.
-func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
-	f.lock.Lock()
-	defer f.lock.Unlock()
-
-	informerType := reflect.TypeOf(obj)
-	informer, exists := f.informers[informerType]
-	if exists {
-		return informer
-	}
-
-	resyncPeriod, exists := f.customResync[informerType]
-	if !exists {
-		resyncPeriod = f.defaultResync
-	}
-
-	informer = newFunc(f.client, resyncPeriod)
-	f.informers[informerType] = informer
-
-	return informer
-}
-
-// SharedInformerFactory provides shared informers for resources in all known
-// API group versions.
-type SharedInformerFactory interface {
-	internalinterfaces.SharedInformerFactory
-	ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
-	WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
-
-	Lighthouse() lighthousesubmarinerio.Interface
-}
-
-func (f *sharedInformerFactory) Lighthouse() lighthousesubmarinerio.Interface {
-	return lighthousesubmarinerio.New(f, f.namespace, f.tweakListOptions)
-}
diff --git a/pkg/client/informers/externalversions/generic.go b/pkg/client/informers/externalversions/generic.go
deleted file mode 100644
index b36fd9d..0000000
--- a/pkg/client/informers/externalversions/generic.go
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package externalversions
-
-import (
-	"fmt"
-
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// GenericInformer is type of SharedIndexInformer which will locate and delegate to other
-// sharedInformers based on type
-type GenericInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() cache.GenericLister
-}
-
-type genericInformer struct {
-	informer cache.SharedIndexInformer
-	resource schema.GroupResource
-}
-
-// Informer returns the SharedIndexInformer.
-func (f *genericInformer) Informer() cache.SharedIndexInformer {
-	return f.informer
-}
-
-// Lister returns the GenericLister.
-func (f *genericInformer) Lister() cache.GenericLister {
-	return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource)
-}
-
-// ForResource gives generic access to a shared informer of the matching type
-// TODO extend this to unknown resources with a client pool
-func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
-	switch resource {
-	// Group=lighthouse.submariner.io, Version=v2alpha1
-	case v2alpha1.SchemeGroupVersion.WithResource("serviceexports"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Lighthouse().V2alpha1().ServiceExports().Informer()}, nil
-	case v2alpha1.SchemeGroupVersion.WithResource("serviceimports"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Lighthouse().V2alpha1().ServiceImports().Informer()}, nil
-
-	}
-
-	return nil, fmt.Errorf("no informer found for %v", resource)
-}
diff --git a/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go
deleted file mode 100644
index 7f0905b..0000000
--- a/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package internalinterfaces
-
-import (
-	time "time"
-
-	versioned "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer.
-type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer
-
-// SharedInformerFactory a small interface to allow for adding an informer without an import cycle
-type SharedInformerFactory interface {
-	Start(stopCh <-chan struct{})
-	InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer
-}
-
-// TweakListOptionsFunc is a function that transforms a v1.ListOptions.
-type TweakListOptionsFunc func(*v1.ListOptions)
diff --git a/pkg/client/informers/externalversions/lighthouse.submariner.io/interface.go b/pkg/client/informers/externalversions/lighthouse.submariner.io/interface.go
deleted file mode 100644
index 5b8cbd1..0000000
--- a/pkg/client/informers/externalversions/lighthouse.submariner.io/interface.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package lighthouse
-
-import (
-	internalinterfaces "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/internalinterfaces"
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1"
-)
-
-// Interface provides access to each of this group's versions.
-type Interface interface {
-	// V2alpha1 provides access to shared informers for resources in V2alpha1.
-	V2alpha1() v2alpha1.Interface
-}
-
-type group struct {
-	factory          internalinterfaces.SharedInformerFactory
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// New returns a new Interface.
-func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
-	return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
-}
-
-// V2alpha1 returns a new v2alpha1.Interface.
-func (g *group) V2alpha1() v2alpha1.Interface {
-	return v2alpha1.New(g.factory, g.namespace, g.tweakListOptions)
-}
diff --git a/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/interface.go b/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/interface.go
deleted file mode 100644
index 553dac5..0000000
--- a/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/interface.go
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	internalinterfaces "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/internalinterfaces"
-)
-
-// Interface provides access to all the informers in this group version.
-type Interface interface {
-	// ServiceExports returns a ServiceExportInformer.
-	ServiceExports() ServiceExportInformer
-	// ServiceImports returns a ServiceImportInformer.
-	ServiceImports() ServiceImportInformer
-}
-
-type version struct {
-	factory          internalinterfaces.SharedInformerFactory
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// New returns a new Interface.
-func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
-	return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
-}
-
-// ServiceExports returns a ServiceExportInformer.
-func (v *version) ServiceExports() ServiceExportInformer {
-	return &serviceExportInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
-}
-
-// ServiceImports returns a ServiceImportInformer.
-func (v *version) ServiceImports() ServiceImportInformer {
-	return &serviceImportInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
-}
diff --git a/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/serviceexport.go b/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/serviceexport.go
deleted file mode 100644
index 79a278a..0000000
--- a/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/serviceexport.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	time "time"
-
-	lighthousesubmarineriov2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	versioned "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned"
-	internalinterfaces "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/internalinterfaces"
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/client/listers/lighthouse.submariner.io/v2alpha1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// ServiceExportInformer provides access to a shared informer and lister for
-// ServiceExports.
-type ServiceExportInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v2alpha1.ServiceExportLister
-}
-
-type serviceExportInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	namespace        string
-}
-
-// NewServiceExportInformer constructs a new informer for ServiceExport type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewServiceExportInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredServiceExportInformer(client, namespace, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredServiceExportInformer constructs a new informer for ServiceExport type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredServiceExportInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.LighthouseV2alpha1().ServiceExports(namespace).List(options)
-			},
-			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.LighthouseV2alpha1().ServiceExports(namespace).Watch(options)
-			},
-		},
-		&lighthousesubmarineriov2alpha1.ServiceExport{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *serviceExportInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredServiceExportInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *serviceExportInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&lighthousesubmarineriov2alpha1.ServiceExport{}, f.defaultInformer)
-}
-
-func (f *serviceExportInformer) Lister() v2alpha1.ServiceExportLister {
-	return v2alpha1.NewServiceExportLister(f.Informer().GetIndexer())
-}
diff --git a/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/serviceimport.go b/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/serviceimport.go
deleted file mode 100644
index 71a6c0b..0000000
--- a/pkg/client/informers/externalversions/lighthouse.submariner.io/v2alpha1/serviceimport.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	time "time"
-
-	lighthousesubmarineriov2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	versioned "github.com/submariner-io/lighthouse/pkg/client/clientset/versioned"
-	internalinterfaces "github.com/submariner-io/lighthouse/pkg/client/informers/externalversions/internalinterfaces"
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/client/listers/lighthouse.submariner.io/v2alpha1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// ServiceImportInformer provides access to a shared informer and lister for
-// ServiceImports.
-type ServiceImportInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v2alpha1.ServiceImportLister
-}
-
-type serviceImportInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	namespace        string
-}
-
-// NewServiceImportInformer constructs a new informer for ServiceImport type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewServiceImportInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredServiceImportInformer(client, namespace, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredServiceImportInformer constructs a new informer for ServiceImport type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredServiceImportInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.LighthouseV2alpha1().ServiceImports(namespace).List(options)
-			},
-			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.LighthouseV2alpha1().ServiceImports(namespace).Watch(options)
-			},
-		},
-		&lighthousesubmarineriov2alpha1.ServiceImport{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *serviceImportInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredServiceImportInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *serviceImportInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&lighthousesubmarineriov2alpha1.ServiceImport{}, f.defaultInformer)
-}
-
-func (f *serviceImportInformer) Lister() v2alpha1.ServiceImportLister {
-	return v2alpha1.NewServiceImportLister(f.Informer().GetIndexer())
-}
diff --git a/pkg/client/listers/lighthouse.submariner.io/v2alpha1/expansion_generated.go b/pkg/client/listers/lighthouse.submariner.io/v2alpha1/expansion_generated.go
deleted file mode 100644
index 8277f69..0000000
--- a/pkg/client/listers/lighthouse.submariner.io/v2alpha1/expansion_generated.go
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v2alpha1
-
-// ServiceExportListerExpansion allows custom methods to be added to
-// ServiceExportLister.
-type ServiceExportListerExpansion interface{}
-
-// ServiceExportNamespaceListerExpansion allows custom methods to be added to
-// ServiceExportNamespaceLister.
-type ServiceExportNamespaceListerExpansion interface{}
-
-// ServiceImportListerExpansion allows custom methods to be added to
-// ServiceImportLister.
-type ServiceImportListerExpansion interface{}
-
-// ServiceImportNamespaceListerExpansion allows custom methods to be added to
-// ServiceImportNamespaceLister.
-type ServiceImportNamespaceListerExpansion interface{}
diff --git a/pkg/client/listers/lighthouse.submariner.io/v2alpha1/serviceexport.go b/pkg/client/listers/lighthouse.submariner.io/v2alpha1/serviceexport.go
deleted file mode 100644
index 4bfb845..0000000
--- a/pkg/client/listers/lighthouse.submariner.io/v2alpha1/serviceexport.go
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	"k8s.io/apimachinery/pkg/api/errors"
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/tools/cache"
-)
-
-// ServiceExportLister helps list ServiceExports.
-type ServiceExportLister interface {
-	// List lists all ServiceExports in the indexer.
-	List(selector labels.Selector) (ret []*v2alpha1.ServiceExport, err error)
-	// ServiceExports returns an object that can list and get ServiceExports.
-	ServiceExports(namespace string) ServiceExportNamespaceLister
-	ServiceExportListerExpansion
-}
-
-// serviceExportLister implements the ServiceExportLister interface.
-type serviceExportLister struct {
-	indexer cache.Indexer
-}
-
-// NewServiceExportLister returns a new ServiceExportLister.
-func NewServiceExportLister(indexer cache.Indexer) ServiceExportLister {
-	return &serviceExportLister{indexer: indexer}
-}
-
-// List lists all ServiceExports in the indexer.
-func (s *serviceExportLister) List(selector labels.Selector) (ret []*v2alpha1.ServiceExport, err error) {
-	err = cache.ListAll(s.indexer, selector, func(m interface{}) {
-		ret = append(ret, m.(*v2alpha1.ServiceExport))
-	})
-	return ret, err
-}
-
-// ServiceExports returns an object that can list and get ServiceExports.
-func (s *serviceExportLister) ServiceExports(namespace string) ServiceExportNamespaceLister {
-	return serviceExportNamespaceLister{indexer: s.indexer, namespace: namespace}
-}
-
-// ServiceExportNamespaceLister helps list and get ServiceExports.
-type ServiceExportNamespaceLister interface {
-	// List lists all ServiceExports in the indexer for a given namespace.
-	List(selector labels.Selector) (ret []*v2alpha1.ServiceExport, err error)
-	// Get retrieves the ServiceExport from the indexer for a given namespace and name.
-	Get(name string) (*v2alpha1.ServiceExport, error)
-	ServiceExportNamespaceListerExpansion
-}
-
-// serviceExportNamespaceLister implements the ServiceExportNamespaceLister
-// interface.
-type serviceExportNamespaceLister struct {
-	indexer   cache.Indexer
-	namespace string
-}
-
-// List lists all ServiceExports in the indexer for a given namespace.
-func (s serviceExportNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ServiceExport, err error) {
-	err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
-		ret = append(ret, m.(*v2alpha1.ServiceExport))
-	})
-	return ret, err
-}
-
-// Get retrieves the ServiceExport from the indexer for a given namespace and name.
-func (s serviceExportNamespaceLister) Get(name string) (*v2alpha1.ServiceExport, error) {
-	obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
-	if err != nil {
-		return nil, err
-	}
-	if !exists {
-		return nil, errors.NewNotFound(v2alpha1.Resource("serviceexport"), name)
-	}
-	return obj.(*v2alpha1.ServiceExport), nil
-}
diff --git a/pkg/client/listers/lighthouse.submariner.io/v2alpha1/serviceimport.go b/pkg/client/listers/lighthouse.submariner.io/v2alpha1/serviceimport.go
deleted file mode 100644
index 037d37b..0000000
--- a/pkg/client/listers/lighthouse.submariner.io/v2alpha1/serviceimport.go
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-Copyright 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.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v2alpha1
-
-import (
-	v2alpha1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	"k8s.io/apimachinery/pkg/api/errors"
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/tools/cache"
-)
-
-// ServiceImportLister helps list ServiceImports.
-type ServiceImportLister interface {
-	// List lists all ServiceImports in the indexer.
-	List(selector labels.Selector) (ret []*v2alpha1.ServiceImport, err error)
-	// ServiceImports returns an object that can list and get ServiceImports.
-	ServiceImports(namespace string) ServiceImportNamespaceLister
-	ServiceImportListerExpansion
-}
-
-// serviceImportLister implements the ServiceImportLister interface.
-type serviceImportLister struct {
-	indexer cache.Indexer
-}
-
-// NewServiceImportLister returns a new ServiceImportLister.
-func NewServiceImportLister(indexer cache.Indexer) ServiceImportLister {
-	return &serviceImportLister{indexer: indexer}
-}
-
-// List lists all ServiceImports in the indexer.
-func (s *serviceImportLister) List(selector labels.Selector) (ret []*v2alpha1.ServiceImport, err error) {
-	err = cache.ListAll(s.indexer, selector, func(m interface{}) {
-		ret = append(ret, m.(*v2alpha1.ServiceImport))
-	})
-	return ret, err
-}
-
-// ServiceImports returns an object that can list and get ServiceImports.
-func (s *serviceImportLister) ServiceImports(namespace string) ServiceImportNamespaceLister {
-	return serviceImportNamespaceLister{indexer: s.indexer, namespace: namespace}
-}
-
-// ServiceImportNamespaceLister helps list and get ServiceImports.
-type ServiceImportNamespaceLister interface {
-	// List lists all ServiceImports in the indexer for a given namespace.
-	List(selector labels.Selector) (ret []*v2alpha1.ServiceImport, err error)
-	// Get retrieves the ServiceImport from the indexer for a given namespace and name.
-	Get(name string) (*v2alpha1.ServiceImport, error)
-	ServiceImportNamespaceListerExpansion
-}
-
-// serviceImportNamespaceLister implements the ServiceImportNamespaceLister
-// interface.
-type serviceImportNamespaceLister struct {
-	indexer   cache.Indexer
-	namespace string
-}
-
-// List lists all ServiceImports in the indexer for a given namespace.
-func (s serviceImportNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ServiceImport, err error) {
-	err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
-		ret = append(ret, m.(*v2alpha1.ServiceImport))
-	})
-	return ret, err
-}
-
-// Get retrieves the ServiceImport from the indexer for a given namespace and name.
-func (s serviceImportNamespaceLister) Get(name string) (*v2alpha1.ServiceImport, error) {
-	obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
-	if err != nil {
-		return nil, err
-	}
-	if !exists {
-		return nil, errors.NewNotFound(v2alpha1.Resource("serviceimport"), name)
-	}
-	return obj.(*v2alpha1.ServiceImport), nil
-}
diff --git a/scripts/codegen b/scripts/codegen
deleted file mode 100755
index 9aed351..0000000
--- a/scripts/codegen
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-source ${SCRIPTS_DIR}/lib/debug_functions
-
-K8S_IO_DIR="${GOPATH:-~/go}/src/k8s.io"
-CODEGEN_SCRIPT_DIR="${K8S_IO_DIR}/code-generator"
-CODEGEN_SCRIPT="${CODEGEN_SCRIPT_DIR}/generate-groups.sh"
-CODEGEN_RELEASE_TAG=kubernetes-1.17.0
-
-if [ ! -f "$CODEGEN_SCRIPT" ]; then
-    echo "$CODEGEN_SCRIPT does not exist - downloading..."
-    git clone --branch $CODEGEN_RELEASE_TAG https://github.com/kubernetes/code-generator "${CODEGEN_SCRIPT_DIR}"
-    cd "${CODEGEN_SCRIPT_DIR}"
-    go mod vendor
-    cd -
-    echo "Successsfully checked out release tag $CODEGEN_RELEASE_TAG"
-fi
-
-"${CODEGEN_SCRIPT}" all github.com/submariner-io/lighthouse/pkg/client github.com/submariner-io/lighthouse/pkg/apis lighthouse.submariner.io:v1,v2alpha1


Test patch:
diff --git a/pkg/agent/controller/agent_test.go b/pkg/agent/controller/agent_test.go
index 321352f..86cac03 100644
--- a/pkg/agent/controller/agent_test.go
+++ b/pkg/agent/controller/agent_test.go
@@ -29,7 +29,6 @@ import (
 	"github.com/submariner-io/admiral/pkg/syncer/broker"
 	"github.com/submariner-io/admiral/pkg/syncer/test"
 	"github.com/submariner-io/lighthouse/pkg/agent/controller"
-	lighthousev2a1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
 	lhconstants "github.com/submariner-io/lighthouse/pkg/constants"
 	corev1 "k8s.io/api/core/v1"
 	discovery "k8s.io/api/discovery/v1beta1"
@@ -371,7 +370,6 @@ func newTestDiver() *testDriver {
 	Expect(corev1.AddToScheme(syncerScheme)).To(Succeed())
 	Expect(discovery.AddToScheme(syncerScheme)).To(Succeed())
 	Expect(mcsv1a1.AddToScheme(syncerScheme)).To(Succeed())
-	Expect(lighthousev2a1.AddToScheme(syncerScheme)).To(Succeed())
 
 	t := &testDriver{
 		cluster1: cluster{
@@ -401,7 +399,7 @@ func newTestDiver() *testDriver {
 		syncerConfig: &broker.SyncerConfig{
 			BrokerNamespace: test.RemoteNamespace,
 			RestMapper: test.GetRESTMapperFor(&mcsv1a1.ServiceExport{}, &mcsv1a1.ServiceImport{},
-				&corev1.Service{}, &corev1.Endpoints{}, &discovery.EndpointSlice{}, &lighthousev2a1.ServiceExport{}),
+				&corev1.Service{}, &corev1.Endpoints{}, &discovery.EndpointSlice{}),
 			BrokerClient: fake.NewDynamicClient(syncerScheme),
 			Scheme:       syncerScheme,
 		},
@@ -592,7 +590,7 @@ func awaitEndpointSlice(endpointSliceClient, serviceImportClient dynamic.Resourc
 		controllerFlag := false
 
 		Expect(endpointSlice.OwnerReferences[0]).To(Equal(metav1.OwnerReference{
-			APIVersion: "lighthouse.submariner.io.v2alpha1",
+			APIVersion: "multicluster.x-k8s.io.v1alpha1",
 			Kind:       "ServiceImport",
 			Name:       siName,
 			UID:        si.GetUID(),
diff --git a/pkg/agent/controller/controller_suite_test.go b/pkg/agent/controller/controller_suite_test.go
index 7dcbe22..2222bb0 100644
--- a/pkg/agent/controller/controller_suite_test.go
+++ b/pkg/agent/controller/controller_suite_test.go
@@ -20,7 +20,6 @@ import (
 
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
-	lighthousev2a1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
 	"k8s.io/client-go/kubernetes/scheme"
 	"k8s.io/klog"
 	mcsv1a1 "sigs.k8s.io/mcs-api/pkg/apis/v1alpha1"
@@ -33,11 +32,6 @@ func init() {
 	if err != nil {
 		panic(err)
 	}
-
-	err = lighthousev2a1.AddToScheme(scheme.Scheme)
-	if err != nil {
-		panic(err)
-	}
 }
 
 func TestController(t *testing.T) {
diff --git a/pkg/agent/controller/lhserviceexport_test.go b/pkg/agent/controller/lhserviceexport_test.go
deleted file mode 100644
index 60e926e..0000000
--- a/pkg/agent/controller/lhserviceexport_test.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-© 2020 Red Hat, Inc. and others
-
-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 controller_test
-
-import (
-	. "github.com/onsi/ginkgo"
-	"github.com/submariner-io/admiral/pkg/syncer/test"
-	lighthousev2a1 "github.com/submariner-io/lighthouse/pkg/apis/lighthouse.submariner.io/v2alpha1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/client-go/dynamic"
-)
-
-var _ = Describe("ServiceExport migration", func() {
-	var (
-		t                     *testDriver
-		lhServiceExportClient dynamic.ResourceInterface
-	)
-
-	BeforeEach(func() {
-		t = newTestDiver()
-		lhServiceExportClient = t.cluster1.localDynClient.Resource(*test.GetGroupVersionResourceFor(t.syncerConfig.RestMapper,
-			&lighthousev2a1.ServiceExport{})).Namespace(serviceNamespace)
-	})
-
-	JustBeforeEach(func() {
-		t.justBeforeEach()
-	})
-
-	AfterEach(func() {
-		t.afterEach()
-	})
-
-	When("a legacy LH ServiceExport is created", func() {
-		It("should export the service and delete the LH ServiceExport", func() {
-			serviceExport := &lighthousev2a1.ServiceExport{
-				ObjectMeta: metav1.ObjectMeta{
-					Name:      t.service.Name,
-					Namespace: t.service.Namespace,
-				},
-			}
-
-			t.createService()
-			test.CreateResource(lhServiceExportClient, serviceExport)
-			t.awaitServiceExported(t.service.Spec.ClusterIP, 0)
-
-			test.AwaitNoResource(lhServiceExportClient, serviceExport.Name)
-		})
-	})
-})