Skip to content

Commit 6cb6abc

Browse files
committed
fix empty resource metadata for service
Signed-off-by: Teo Zhuo Yang <zteo@moneylion.com>
1 parent 078305e commit 6cb6abc

3 files changed

Lines changed: 24 additions & 7 deletions

File tree

internal/gatewayapi/listener_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1395,7 +1395,7 @@ func TestProcessBackendRefsBackendTLSPolicy(t *testing.T) {
13951395
},
13961396
}
13971397
serviceEndpoints := []*ir.DestinationEndpoint{{Host: "7.7.7.7", Port: 4317}}
1398-
serviceMetadata := &ir.ResourceMetadata{Name: serviceName, Namespace: ns, SectionName: "4317"}
1398+
serviceMetadata := &ir.ResourceMetadata{Kind: resource.KindService, Name: serviceName, Namespace: ns, SectionName: "4317"}
13991399
servicePolicyTLS := &ir.TLSUpstreamConfig{
14001400
SNI: ptr.To("otel-svc.example.com"), UseSystemTrustStore: true,
14011401
CACertificate: &ir.TLSCACertificate{Name: "otel-svc-tls/test-ns-ca"}, SubjectAltNames: []ir.SubjectAltName{},

internal/gatewayapi/route.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,12 +1313,17 @@ func (t *Translator) processHTTPRouteParentRefListener(route RouteContext, route
13131313
return hasHostnameIntersection
13141314
}
13151315

1316-
func buildResourceMetadata(resource client.Object, sectionName *gwapiv1.SectionName) *ir.ResourceMetadata {
1316+
func buildResourceMetadata(obj client.Object, sectionName *gwapiv1.SectionName) *ir.ResourceMetadata {
1317+
kind := obj.GetObjectKind().GroupVersionKind().Kind
1318+
if _, ok := obj.(*corev1.Service); ok && kind == "" {
1319+
kind = resource.KindService
1320+
}
1321+
13171322
metadata := &ir.ResourceMetadata{
1318-
Kind: resource.GetObjectKind().GroupVersionKind().Kind,
1319-
Name: resource.GetName(),
1320-
Namespace: resource.GetNamespace(),
1321-
Annotations: ir.MapToSlice(filterEGPrefix(resource.GetAnnotations())),
1323+
Kind: kind,
1324+
Name: obj.GetName(),
1325+
Namespace: obj.GetNamespace(),
1326+
Annotations: ir.MapToSlice(filterEGPrefix(obj.GetAnnotations())),
13221327
}
13231328
if sectionName != nil {
13241329
metadata.SectionName = string(*sectionName)
@@ -1997,7 +2002,7 @@ func (t *Translator) applyServiceBackendHostname(setting *ir.DestinationSetting)
19972002
return
19982003
}
19992004

2000-
if setting.Metadata.Kind != "" { // if the kind is not empty, it means the destination setting is not a service
2005+
if setting.Metadata.Kind != resource.KindService {
20012006
return
20022007
}
20032008
if setting.Metadata.Name == "" || setting.Metadata.Namespace == "" {

internal/gatewayapi/route_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,11 +451,22 @@ func TestIsServiceHeadless(t *testing.T) {
451451
}
452452

453453
func TestApplyServiceBackendHostname(t *testing.T) {
454+
t.Run("build metadata infers service kind from typed object", func(t *testing.T) {
455+
service := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: "service-1", Namespace: "default"}}
456+
457+
metadata := buildResourceMetadata(service, ptr.To(gwapiv1.SectionName("8080")))
458+
459+
require.Equal(t, resource.KindService, metadata.Kind)
460+
require.Equal(t, "service-1", metadata.Name)
461+
require.Equal(t, "default", metadata.Namespace)
462+
require.Equal(t, "8080", metadata.SectionName)
463+
})
454464

455465
t.Run("uses default cluster domain", func(t *testing.T) {
456466
translator := &Translator{}
457467
setting := &ir.DestinationSetting{
458468
Metadata: &ir.ResourceMetadata{
469+
Kind: resource.KindService,
459470
Name: "service-1",
460471
Namespace: "default",
461472
},
@@ -471,6 +482,7 @@ func TestApplyServiceBackendHostname(t *testing.T) {
471482
translator := &Translator{DNSDomain: "example.internal"}
472483
setting := &ir.DestinationSetting{
473484
Metadata: &ir.ResourceMetadata{
485+
Kind: resource.KindService,
474486
Name: "service-1",
475487
Namespace: "default",
476488
},

0 commit comments

Comments
 (0)