From 52894d7bfb50266ecbd18d29f017dcc53b616b0b Mon Sep 17 00:00:00 2001 From: Rob Scott Date: Fri, 24 Jul 2020 17:36:56 -0700 Subject: [PATCH] Updating EndpointSliceMirroring controller to copy labels from Endpoints The KEP specifies that the controller will "mirror all labels from the Endpoints resource and all endpoints and ports from the corresponding subset". I'd missed that in my initial implementation, this should fix that. --- pkg/controller/endpointslicemirroring/utils.go | 12 ++++++++---- pkg/controller/endpointslicemirroring/utils_test.go | 11 ++++++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/controller/endpointslicemirroring/utils.go b/pkg/controller/endpointslicemirroring/utils.go index 65b316ae681..aa1d860da04 100644 --- a/pkg/controller/endpointslicemirroring/utils.go +++ b/pkg/controller/endpointslicemirroring/utils.go @@ -88,10 +88,7 @@ func newEndpointSlice(endpoints *corev1.Endpoints, ports []discovery.EndpointPor ownerRef := metav1.NewControllerRef(endpoints, gvk) epSlice := &discovery.EndpointSlice{ ObjectMeta: metav1.ObjectMeta{ - Labels: map[string]string{ - discovery.LabelServiceName: endpoints.Name, - discovery.LabelManagedBy: controllerName, - }, + Labels: map[string]string{}, OwnerReferences: []metav1.OwnerReference{*ownerRef}, Namespace: endpoints.Namespace, }, @@ -100,6 +97,13 @@ func newEndpointSlice(endpoints *corev1.Endpoints, ports []discovery.EndpointPor Endpoints: []discovery.Endpoint{}, } + for label, val := range endpoints.Labels { + epSlice.Labels[label] = val + } + + epSlice.Labels[discovery.LabelServiceName] = endpoints.Name + epSlice.Labels[discovery.LabelManagedBy] = controllerName + if sliceName == "" { epSlice.GenerateName = getEndpointSlicePrefix(endpoints.Name) } else { diff --git a/pkg/controller/endpointslicemirroring/utils_test.go b/pkg/controller/endpointslicemirroring/utils_test.go index ef374b8350b..9944f191edf 100644 --- a/pkg/controller/endpointslicemirroring/utils_test.go +++ b/pkg/controller/endpointslicemirroring/utils_test.go @@ -39,7 +39,11 @@ func TestNewEndpointSlice(t *testing.T) { addrType := discovery.AddressTypeIPv4 endpoints := v1.Endpoints{ - ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test"}, + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "test", + Labels: map[string]string{"foo": "bar"}, + }, Subsets: []v1.EndpointSubset{{ Ports: []v1.EndpointPort{{Port: 80}}, }}, @@ -51,6 +55,7 @@ func TestNewEndpointSlice(t *testing.T) { expectedSlice := discovery.EndpointSlice{ ObjectMeta: metav1.ObjectMeta{ Labels: map[string]string{ + "foo": "bar", discovery.LabelServiceName: endpoints.Name, discovery.LabelManagedBy: controllerName, }, @@ -65,6 +70,10 @@ func TestNewEndpointSlice(t *testing.T) { generatedSlice := newEndpointSlice(&endpoints, ports, addrType, "") assert.EqualValues(t, expectedSlice, *generatedSlice) + + if len(endpoints.Labels) > 1 { + t.Errorf("Expected Endpoints labels to not be modified, got %+v", endpoints.Labels) + } } // Test helpers