Skip to content

Commit bd55221

Browse files
committed
fix: r
Signed-off-by: ashing <[email protected]>
1 parent caf2f5b commit bd55221

File tree

3 files changed

+45
-18
lines changed

3 files changed

+45
-18
lines changed

api/dashboard/v1/zz_generated.deepcopy.go

Lines changed: 15 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/provider/adc/translator/httproute.go

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -307,14 +307,18 @@ func (t *Translator) translateEndpointSlice(portName *string, weight int, endpoi
307307
return nodes
308308
}
309309

310-
func (t *Translator) translateBackendRef(tctx *provider.TranslateContext, ref gatewayv1.BackendRef) adctypes.UpstreamNodes {
310+
func (t *Translator) translateBackendRef(tctx *provider.TranslateContext, ref gatewayv1.BackendRef) (adctypes.UpstreamNodes, error) {
311+
if ref.Kind != nil && *ref.Kind != "Service" {
312+
return adctypes.UpstreamNodes{}, fmt.Errorf("kind %s is not supported", *ref.Kind)
313+
}
314+
311315
key := types.NamespacedName{
312316
Namespace: string(*ref.Namespace),
313317
Name: string(ref.Name),
314318
}
315319
service, ok := tctx.Services[key]
316320
if !ok {
317-
return adctypes.UpstreamNodes{}
321+
return adctypes.UpstreamNodes{}, fmt.Errorf("service %s not found", key)
318322
}
319323

320324
weight := 1
@@ -333,7 +337,7 @@ func (t *Translator) translateBackendRef(tctx *provider.TranslateContext, ref ga
333337
Port: port,
334338
Weight: weight,
335339
},
336-
}
340+
}, nil
337341
}
338342

339343
var portName *string
@@ -345,12 +349,12 @@ func (t *Translator) translateBackendRef(tctx *provider.TranslateContext, ref ga
345349
}
346350
}
347351
if portName == nil {
348-
return adctypes.UpstreamNodes{}
352+
return adctypes.UpstreamNodes{}, nil
349353
}
350354
}
351355

352356
endpointSlices := tctx.EndpointSlices[key]
353-
return t.translateEndpointSlice(portName, weight, endpointSlices)
357+
return t.translateEndpointSlice(portName, weight, endpointSlices), nil
354358
}
355359

356360
// calculateHTTPRoutePriority calculates the priority of the HTTP route.
@@ -424,12 +428,17 @@ func (t *Translator) TranslateHTTPRoute(tctx *provider.TranslateContext, httpRou
424428

425429
for ruleIndex, rule := range rules {
426430
upstream := adctypes.NewDefaultUpstream()
431+
var backendErr error
427432
for _, backend := range rule.BackendRefs {
428433
if backend.Namespace == nil {
429434
namespace := gatewayv1.Namespace(httpRoute.Namespace)
430435
backend.Namespace = &namespace
431436
}
432-
upNodes := t.translateBackendRef(tctx, backend.BackendRef)
437+
upNodes, err := t.translateBackendRef(tctx, backend.BackendRef)
438+
if err != nil {
439+
backendErr = err
440+
continue
441+
}
433442
t.AttachBackendTrafficPolicyToUpstream(backend.BackendRef, tctx.BackendTrafficPolicies, upstream)
434443
upstream.Nodes = append(upstream.Nodes, upNodes...)
435444
}
@@ -443,6 +452,19 @@ func (t *Translator) TranslateHTTPRoute(tctx *provider.TranslateContext, httpRou
443452
service.ID = id.GenID(service.Name)
444453
service.Hosts = hosts
445454
service.Upstream = upstream
455+
456+
if backendErr != nil && len(upstream.Nodes) == 0 {
457+
if service.Plugins == nil {
458+
service.Plugins = make(map[string]any)
459+
}
460+
service.Plugins["fault-injection"] = map[string]any{
461+
"abort": map[string]any{
462+
"http_status": 500,
463+
"body": "No existing backendRef provided",
464+
},
465+
}
466+
}
467+
446468
t.fillPluginsFromHTTPRouteFilters(service.Plugins, httpRoute.GetNamespace(), rule.Filters, rule.Matches, tctx)
447469

448470
matches := rule.Matches

test/conformance/conformance_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ func TestGatewayAPIConformance(t *testing.T) {
6565
opts.CleanupBaseResources = true
6666
opts.GatewayClassName = gatewayClassName
6767
opts.SupportedFeatures = sets.New(gatewaySupportedFeatures...)
68-
opts.SkipTests = append(skippedTestsForSSL, skippedTestsForTraditionalRoutes...)
68+
// opts.SkipTests = append(skippedTestsForSSL, skippedTestsForTraditionalRoutes...)
69+
opts.RunTest = tests.HTTPRouteInvalidBackendRefUnknownKind.ShortName
6970
opts.Implementation = conformancev1.Implementation{
7071
Organization: "API7",
7172
Project: "api7-ingress-controller",

0 commit comments

Comments
 (0)