From 49f765e2b3c4b8c6bc6c091f96104ee45f40cd6b Mon Sep 17 00:00:00 2001 From: jayson wang Date: Fri, 2 May 2025 14:08:09 +0800 Subject: [PATCH] Remove redundant Required validation for IngressRules --- pkg/apis/networking/validation/validation.go | 4 +- .../networking/validation/validation_test.go | 48 +++++++++++++++---- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index 0f5a79eb3b0..d7edbc121ae 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -411,9 +411,7 @@ func ValidateIngressLoadBalancerStatus(status, oldStatus *networking.IngressLoad func validateIngressRules(ingressRules []networking.IngressRule, fldPath *field.Path, opts IngressValidationOptions) field.ErrorList { allErrs := field.ErrorList{} - if len(ingressRules) == 0 { - return append(allErrs, field.Required(fldPath, "")) - } + for i, ih := range ingressRules { wildcardHost := false if len(ih.Host) > 0 { diff --git a/pkg/apis/networking/validation/validation_test.go b/pkg/apis/networking/validation/validation_test.go index 3cc02c8b516..c2b807995cb 100644 --- a/pkg/apis/networking/validation/validation_test.go +++ b/pkg/apis/networking/validation/validation_test.go @@ -609,15 +609,22 @@ func TestValidateNetworkPolicyUpdate(t *testing.T) { } func TestValidateIngress(t *testing.T) { - serviceBackend := &networking.IngressServiceBackend{ + servicePort := networking.ServiceBackendPort{ + Number: 80, + } + serviceName := networking.ServiceBackendPort{ + Name: "http", + } + servicePortBackend := &networking.IngressServiceBackend{ Name: "defaultbackend", - Port: networking.ServiceBackendPort{ - Name: "", - Number: 80, - }, + Port: servicePort, + } + serviceNameBackend := &networking.IngressServiceBackend{ + Name: "defaultbackend", + Port: serviceName, } defaultBackend := networking.IngressBackend{ - Service: serviceBackend, + Service: servicePortBackend, } pathTypePrefix := networking.PathTypePrefix pathTypeImplementationSpecific := networking.PathTypeImplementationSpecific @@ -702,6 +709,27 @@ func TestValidateIngress(t *testing.T) { "spec.rules[0].http.paths", }, }, + "no rules": { + tweakIngress: func(ing *networking.Ingress) { + ing.Spec.Rules = nil + }, + expectErrsOnFields: []string{}, + }, + "no defaultBackend": { + tweakIngress: func(ing *networking.Ingress) { + ing.Spec.DefaultBackend = nil + }, + expectErrsOnFields: []string{}, + }, + "no defaultBackend or rules specified": { + tweakIngress: func(ing *networking.Ingress) { + ing.Spec.DefaultBackend = nil + ing.Spec.Rules = []networking.IngressRule{} + }, + expectErrsOnFields: []string{ + "spec", + }, + }, "invalid host (foobar:80)": { tweakIngress: func(ing *networking.Ingress) { ing.Spec.Rules[0].Host = "foobar:80" @@ -748,7 +776,7 @@ func TestValidateIngress(t *testing.T) { Path: "/foo", PathType: &pathTypeImplementationSpecific, Backend: networking.IngressBackend{ - Service: serviceBackend, + Service: serviceNameBackend, Resource: &api.TypedLocalObjectReference{ APIGroup: utilpointer.String("example.com"), Kind: "foo", @@ -771,7 +799,7 @@ func TestValidateIngress(t *testing.T) { Path: "/foo", PathType: &pathTypeImplementationSpecific, Backend: networking.IngressBackend{ - Service: serviceBackend, + Service: servicePortBackend, Resource: &api.TypedLocalObjectReference{ APIGroup: utilpointer.String("example.com"), Kind: "foo", @@ -789,7 +817,7 @@ func TestValidateIngress(t *testing.T) { "spec.backend resource and service name are not allowed together": { tweakIngress: func(ing *networking.Ingress) { ing.Spec.DefaultBackend = &networking.IngressBackend{ - Service: serviceBackend, + Service: serviceNameBackend, Resource: &api.TypedLocalObjectReference{ APIGroup: utilpointer.String("example.com"), Kind: "foo", @@ -804,7 +832,7 @@ func TestValidateIngress(t *testing.T) { "spec.backend resource and service port are not allowed together": { tweakIngress: func(ing *networking.Ingress) { ing.Spec.DefaultBackend = &networking.IngressBackend{ - Service: serviceBackend, + Service: servicePortBackend, Resource: &api.TypedLocalObjectReference{ APIGroup: utilpointer.String("example.com"), Kind: "foo",