mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 02:03:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package object
 | ||
|  | 
 | ||
|  | import (
 | ||
|  | 	"maps"
 | ||
|  | 
 | ||
|  | 	meta "k8s.io/apimachinery/pkg/apis/meta/v1"
 | ||
|  | 	"k8s.io/apimachinery/pkg/runtime"
 | ||
|  | 	mcs "sigs.k8s.io/mcs-api/pkg/apis/v1alpha1"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | // Endpoints is a stripped down api.Endpoints with only the items we need for CoreDNS.
 | ||
|  | type MultiClusterEndpoints struct {
 | ||
|  | 	Endpoints
 | ||
|  | 	ClusterId string
 | ||
|  | 	*Empty
 | ||
|  | }
 | ||
|  | 
 | ||
|  | // MultiClusterEndpointsKey returns a string using for the index.
 | ||
|  | func MultiClusterEndpointsKey(name, namespace string) string { return name + "." + namespace }
 | ||
|  | 
 | ||
|  | // EndpointSliceToEndpoints converts a *discovery.EndpointSlice to a *Endpoints.
 | ||
|  | func EndpointSliceToMultiClusterEndpoints(obj meta.Object) (meta.Object, error) {
 | ||
|  | 	labels := maps.Clone(obj.GetLabels())
 | ||
|  | 	ends, err := EndpointSliceToEndpoints(obj)
 | ||
|  | 	if err != nil {
 | ||
|  | 		return nil, err
 | ||
|  | 	}
 | ||
|  | 	e := &MultiClusterEndpoints{
 | ||
|  | 		Endpoints: *ends.(*Endpoints),
 | ||
|  | 		ClusterId: labels[mcs.LabelSourceCluster],
 | ||
|  | 	}
 | ||
|  | 	e.Index = MultiClusterEndpointsKey(labels[mcs.LabelServiceName], ends.GetNamespace())
 | ||
|  | 
 | ||
|  | 	return e, nil
 | ||
|  | }
 | ||
|  | 
 | ||
|  | var _ runtime.Object = &Endpoints{}
 | ||
|  | 
 | ||
|  | // DeepCopyObject implements the ObjectKind interface.
 | ||
|  | func (e *MultiClusterEndpoints) DeepCopyObject() runtime.Object {
 | ||
|  | 	e1 := &MultiClusterEndpoints{
 | ||
|  | 		ClusterId: e.ClusterId,
 | ||
|  | 		Endpoints: *e.Endpoints.DeepCopyObject().(*Endpoints),
 | ||
|  | 	}
 | ||
|  | 	return e1
 | ||
|  | }
 | ||
|  | 
 | ||
|  | // GetNamespace implements the metav1.Object interface.
 | ||
|  | func (e *MultiClusterEndpoints) GetNamespace() string { return e.Endpoints.GetNamespace() }
 | ||
|  | 
 | ||
|  | // SetNamespace implements the metav1.Object interface.
 | ||
|  | func (e *MultiClusterEndpoints) SetNamespace(namespace string) {}
 | ||
|  | 
 | ||
|  | // GetName implements the metav1.Object interface.
 | ||
|  | func (e *MultiClusterEndpoints) GetName() string { return e.Endpoints.GetName() }
 | ||
|  | 
 | ||
|  | // SetName implements the metav1.Object interface.
 | ||
|  | func (e *MultiClusterEndpoints) SetName(name string) {}
 | ||
|  | 
 | ||
|  | // GetResourceVersion implements the metav1.Object interface.
 | ||
|  | func (e *MultiClusterEndpoints) GetResourceVersion() string { return e.Endpoints.GetResourceVersion() }
 | ||
|  | 
 | ||
|  | // SetResourceVersion implements the metav1.Object interface.
 | ||
|  | func (e *MultiClusterEndpoints) SetResourceVersion(version string) {}
 |