From 8f306d80468b59299be3ae05e33e56513827f8ed Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Tue, 12 Mar 2024 17:30:08 +0000 Subject: [PATCH] services fielse selector for type Change-Id: I57e934c520713713d4b0616a52519ec51c49e0fc --- pkg/apis/core/v1/conversion.go | 3 ++- pkg/registry/core/service/strategy.go | 1 + pkg/registry/core/service/strategy_test.go | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/apis/core/v1/conversion.go b/pkg/apis/core/v1/conversion.go index 28cf6e3efeb..a448fe7b108 100644 --- a/pkg/apis/core/v1/conversion.go +++ b/pkg/apis/core/v1/conversion.go @@ -497,7 +497,8 @@ func AddFieldLabelConversionsForService(scheme *runtime.Scheme) error { switch label { case "metadata.namespace", "metadata.name", - "spec.clusterIP": + "spec.clusterIP", + "spec.type": return label, value, nil default: return "", "", fmt.Errorf("field label not supported: %s", label) diff --git a/pkg/registry/core/service/strategy.go b/pkg/registry/core/service/strategy.go index 978473c6230..a5916b796bb 100644 --- a/pkg/registry/core/service/strategy.go +++ b/pkg/registry/core/service/strategy.go @@ -194,6 +194,7 @@ func SelectableFields(service *api.Service) fields.Set { objectMetaFieldsSet := generic.ObjectMetaFieldsSet(&service.ObjectMeta, true) serviceSpecificFieldsSet := fields.Set{ "spec.clusterIP": service.Spec.ClusterIP, + "spec.type": string(service.Spec.Type), } return generic.MergeFieldsSets(objectMetaFieldsSet, serviceSpecificFieldsSet) } diff --git a/pkg/registry/core/service/strategy_test.go b/pkg/registry/core/service/strategy_test.go index 66676dbc515..de47dd5d2e4 100644 --- a/pkg/registry/core/service/strategy_test.go +++ b/pkg/registry/core/service/strategy_test.go @@ -844,6 +844,22 @@ func TestMatchService(t *testing.T) { fieldSelector: fields.ParseSelectorOrDie("metadata.namespace=nomatch"), expectMatch: false, }, + { + name: "match on loadbalancer type service", + in: &api.Service{ + Spec: api.ServiceSpec{Type: api.ServiceTypeLoadBalancer}, + }, + fieldSelector: fields.ParseSelectorOrDie("spec.type=LoadBalancer"), + expectMatch: true, + }, + { + name: "no match on nodeport type service", + in: &api.Service{ + Spec: api.ServiceSpec{Type: api.ServiceTypeNodePort}, + }, + fieldSelector: fields.ParseSelectorOrDie("spec.type=LoadBalancer"), + expectMatch: false, + }, { name: "match on headless service", in: &api.Service{