diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index eb08bf23c86..d0ec25726c4 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -599,27 +599,24 @@ func validateIngressClassParametersReference(params *networking.IngressClassPara return allErrs } - if params.Scope != nil || params.Namespace != nil { - scope := utilpointer.StringDeref(params.Scope, "") + scope := utilpointer.StringDeref(params.Scope, "") - if !supportedIngressClassParametersReferenceScopes.Has(scope) { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("scope"), scope, - supportedIngressClassParametersReferenceScopes.List())) - } else { - - if scope == networking.IngressClassParametersReferenceScopeNamespace { - if params.Namespace == nil { - allErrs = append(allErrs, field.Required(fldPath.Child("namespace"), "`parameters.scope` is set to 'Namespace'")) - } else { - for _, msg := range apivalidation.ValidateNamespaceName(*params.Namespace, false) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("namespace"), *params.Namespace, msg)) - } + if !supportedIngressClassParametersReferenceScopes.Has(scope) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("scope"), scope, + supportedIngressClassParametersReferenceScopes.List())) + } else { + if scope == networking.IngressClassParametersReferenceScopeNamespace { + if params.Namespace == nil { + allErrs = append(allErrs, field.Required(fldPath.Child("namespace"), "`parameters.scope` is set to 'Namespace'")) + } else { + for _, msg := range apivalidation.ValidateNamespaceName(*params.Namespace, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("namespace"), *params.Namespace, msg)) } } + } - if scope == networking.IngressClassParametersReferenceScopeCluster && params.Namespace != nil { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("namespace"), "`parameters.scope` is set to 'Cluster'")) - } + if scope == networking.IngressClassParametersReferenceScopeCluster && params.Namespace != nil { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("namespace"), "`parameters.scope` is set to 'Cluster'")) } } diff --git a/pkg/apis/networking/validation/validation_test.go b/pkg/apis/networking/validation/validation_test.go index 65f1a494aff..04d110b35bf 100644 --- a/pkg/apis/networking/validation/validation_test.go +++ b/pkg/apis/networking/validation/validation_test.go @@ -1652,6 +1652,14 @@ func TestValidateIngressClass(t *testing.T) { ), expectedErrs: field.ErrorList{}, }, + "valid name, valid controller, invalid scope": { + ingressClass: makeValidIngressClass("test123", "foo.co/bar", + setParams(makeIngressClassParams(nil, "foo", "bar", nil, utilpointer.String("foo_ns"))), + ), + expectedErrs: field.ErrorList{ + field.Required(field.NewPath("spec.parameters.scope"), ""), + }, + }, "namespace not set when scope is Namespace": { ingressClass: makeValidIngressClass("test123", "foo.co/bar", setParams(makeIngressClassParams(nil, "foo", "bar", utilpointer.String("Namespace"), nil)),