mirror of https://github.com/k3s-io/k3s
Merge pull request #12594 from liggitt/status_field
Limit field errors to a single field namepull/6/head
commit
4516eeba81
|
@ -223,7 +223,9 @@ func ValidateObjectMeta(meta *api.ObjectMeta, requiresNamespace bool, nameFn Val
|
||||||
// report it here. This may confuse users, but indicates a programming bug and still must be validated.
|
// report it here. This may confuse users, but indicates a programming bug and still must be validated.
|
||||||
// If there are multiple fields out of which one is required then add a or as a separator
|
// If there are multiple fields out of which one is required then add a or as a separator
|
||||||
if len(meta.Name) == 0 {
|
if len(meta.Name) == 0 {
|
||||||
allErrs = append(allErrs, errs.NewFieldRequired("name or generateName"))
|
requiredErr := errs.NewFieldRequired("name")
|
||||||
|
requiredErr.Detail = "name or generateName is required"
|
||||||
|
allErrs = append(allErrs, requiredErr)
|
||||||
} else {
|
} else {
|
||||||
if ok, qualifier := nameFn(meta.Name, false); !ok {
|
if ok, qualifier := nameFn(meta.Name, false); !ok {
|
||||||
allErrs = append(allErrs, errs.NewFieldInvalid("name", meta.Name, qualifier))
|
allErrs = append(allErrs, errs.NewFieldInvalid("name", meta.Name, qualifier))
|
||||||
|
|
|
@ -2323,7 +2323,7 @@ func TestValidateReplicationController(t *testing.T) {
|
||||||
for i := range errs {
|
for i := range errs {
|
||||||
field := errs[i].(*errors.ValidationError).Field
|
field := errs[i].(*errors.ValidationError).Field
|
||||||
if !strings.HasPrefix(field, "spec.template.") &&
|
if !strings.HasPrefix(field, "spec.template.") &&
|
||||||
field != "metadata.name or metadata.generateName" &&
|
field != "metadata.name" &&
|
||||||
field != "metadata.namespace" &&
|
field != "metadata.namespace" &&
|
||||||
field != "spec.selector" &&
|
field != "spec.selector" &&
|
||||||
field != "spec.template" &&
|
field != "spec.template" &&
|
||||||
|
@ -2736,7 +2736,7 @@ func TestValidateDaemon(t *testing.T) {
|
||||||
for i := range errs {
|
for i := range errs {
|
||||||
field := errs[i].(*errors.ValidationError).Field
|
field := errs[i].(*errors.ValidationError).Field
|
||||||
if !strings.HasPrefix(field, "spec.template.") &&
|
if !strings.HasPrefix(field, "spec.template.") &&
|
||||||
field != "metadata.name or metadata.generateName" &&
|
field != "metadata.name" &&
|
||||||
field != "metadata.namespace" &&
|
field != "metadata.namespace" &&
|
||||||
field != "spec.selector" &&
|
field != "spec.selector" &&
|
||||||
field != "spec.template" &&
|
field != "spec.template" &&
|
||||||
|
@ -2850,11 +2850,11 @@ func TestValidateNode(t *testing.T) {
|
||||||
for i := range errs {
|
for i := range errs {
|
||||||
field := errs[i].(*errors.ValidationError).Field
|
field := errs[i].(*errors.ValidationError).Field
|
||||||
expectedFields := map[string]bool{
|
expectedFields := map[string]bool{
|
||||||
"metadata.name or metadata.generateName": true,
|
"metadata.name": true,
|
||||||
"metadata.labels": true,
|
"metadata.labels": true,
|
||||||
"metadata.annotations": true,
|
"metadata.annotations": true,
|
||||||
"metadata.namespace": true,
|
"metadata.namespace": true,
|
||||||
"spec.ExternalID": true,
|
"spec.ExternalID": true,
|
||||||
}
|
}
|
||||||
if expectedFields[field] == false {
|
if expectedFields[field] == false {
|
||||||
t.Errorf("%s: missing prefix for: %v", k, errs[i])
|
t.Errorf("%s: missing prefix for: %v", k, errs[i])
|
||||||
|
@ -3286,7 +3286,7 @@ func TestValidateLimitRange(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
"zero-length Name": {
|
"zero-length Name": {
|
||||||
api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "", Namespace: "foo"}, Spec: spec},
|
api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "", Namespace: "foo"}, Spec: spec},
|
||||||
"",
|
"name or generateName is required",
|
||||||
},
|
},
|
||||||
"zero-length-namespace": {
|
"zero-length-namespace": {
|
||||||
api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: ""}, Spec: spec},
|
api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: ""}, Spec: spec},
|
||||||
|
@ -3361,7 +3361,7 @@ func TestValidateResourceQuota(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
"zero-length Name": {
|
"zero-length Name": {
|
||||||
api.ResourceQuota{ObjectMeta: api.ObjectMeta{Name: "", Namespace: "foo"}, Spec: spec},
|
api.ResourceQuota{ObjectMeta: api.ObjectMeta{Name: "", Namespace: "foo"}, Spec: spec},
|
||||||
"",
|
"name or generateName is required",
|
||||||
},
|
},
|
||||||
"zero-length Namespace": {
|
"zero-length Namespace": {
|
||||||
api.ResourceQuota{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: ""}, Spec: spec},
|
api.ResourceQuota{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: ""}, Spec: spec},
|
||||||
|
@ -3384,7 +3384,7 @@ func TestValidateResourceQuota(t *testing.T) {
|
||||||
for i := range errs {
|
for i := range errs {
|
||||||
field := errs[i].(*errors.ValidationError).Field
|
field := errs[i].(*errors.ValidationError).Field
|
||||||
detail := errs[i].(*errors.ValidationError).Detail
|
detail := errs[i].(*errors.ValidationError).Detail
|
||||||
if field != "metadata.name" && field != "metadata.name or metadata.generateName" && field != "metadata.namespace" {
|
if field != "metadata.name" && field != "metadata.namespace" {
|
||||||
t.Errorf("%s: missing prefix for: %v", k, field)
|
t.Errorf("%s: missing prefix for: %v", k, field)
|
||||||
}
|
}
|
||||||
if detail != v.D {
|
if detail != v.D {
|
||||||
|
|
|
@ -148,7 +148,6 @@ func NewFieldTooLong(field string, value interface{}, maxLength int) *Validation
|
||||||
type ValidationErrorList []error
|
type ValidationErrorList []error
|
||||||
|
|
||||||
// Prefix adds a prefix to the Field of every ValidationError in the list.
|
// Prefix adds a prefix to the Field of every ValidationError in the list.
|
||||||
// Also adds prefixes to multiple fields if you send an or separator.
|
|
||||||
// Returns the list for convenience.
|
// Returns the list for convenience.
|
||||||
func (list ValidationErrorList) Prefix(prefix string) ValidationErrorList {
|
func (list ValidationErrorList) Prefix(prefix string) ValidationErrorList {
|
||||||
for i := range list {
|
for i := range list {
|
||||||
|
@ -156,11 +155,7 @@ func (list ValidationErrorList) Prefix(prefix string) ValidationErrorList {
|
||||||
if strings.HasPrefix(err.Field, "[") {
|
if strings.HasPrefix(err.Field, "[") {
|
||||||
err.Field = prefix + err.Field
|
err.Field = prefix + err.Field
|
||||||
} else if len(err.Field) != 0 {
|
} else if len(err.Field) != 0 {
|
||||||
fields := strings.SplitAfter(err.Field, " or ")
|
err.Field = prefix + "." + err.Field
|
||||||
err.Field = ""
|
|
||||||
for j := range fields {
|
|
||||||
err.Field += prefix + "." + fields[j]
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
err.Field = prefix
|
err.Field = prefix
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue