diff --git a/pkg/api/rest/update.go b/pkg/api/rest/update.go index cebfeccaaab..8f08d49b23c 100644 --- a/pkg/api/rest/update.go +++ b/pkg/api/rest/update.go @@ -17,6 +17,8 @@ limitations under the License. package rest import ( + "fmt" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/validation" @@ -53,19 +55,19 @@ type RESTUpdateStrategy interface { } // TODO: add other common fields that require global validation. -func validateCommonFields(obj, old runtime.Object) field.ErrorList { +func validateCommonFields(obj, old runtime.Object) (field.ErrorList, error) { allErrs := field.ErrorList{} objectMeta, err := api.ObjectMetaFor(obj) if err != nil { - return append(allErrs, field.InternalError(field.NewPath("metadata"), err)) + return nil, fmt.Errorf("failed to get new object metadata: %v", err) } oldObjectMeta, err := api.ObjectMetaFor(old) if err != nil { - return append(allErrs, field.InternalError(field.NewPath("metadata"), err)) + return nil, fmt.Errorf("failed to get old object metadata: %v", err) } allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(objectMeta, oldObjectMeta, field.NewPath("metadata"))...) - return allErrs + return allErrs, nil } // BeforeUpdate ensures that common operations for all resources are performed on update. It only returns @@ -87,7 +89,10 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx api.Context, obj, old runtime strategy.PrepareForUpdate(obj, old) // Ensure some common fields, like UID, are validated for all resources. - errs := validateCommonFields(obj, old) + errs, err := validateCommonFields(obj, old) + if err != nil { + return errors.NewInternalError(err) + } errs = append(errs, strategy.ValidateUpdate(ctx, obj, old)...) if len(errs) > 0 { diff --git a/pkg/registry/pod/etcd/etcd.go b/pkg/registry/pod/etcd/etcd.go index 1ed940df2ce..90e799f870e 100644 --- a/pkg/registry/pod/etcd/etcd.go +++ b/pkg/registry/pod/etcd/etcd.go @@ -135,7 +135,7 @@ func (r *BindingREST) Create(ctx api.Context, obj runtime.Object) (out runtime.O // TODO: move me to a binding strategy if len(binding.Target.Kind) != 0 && binding.Target.Kind != "Node" { // TODO: When validation becomes versioned, this gets more complicated. - return nil, errors.NewInvalid("binding", binding.Name, field.ErrorList{field.NotSupported(field.NewPath("target", "kind"), binding.Target.Kind, []string{"Node", ""})}) + return nil, errors.NewInvalid("binding", binding.Name, field.ErrorList{field.NotSupported(field.NewPath("target", "kind"), binding.Target.Kind, []string{"Node", ""})}) } if len(binding.Target.Name) == 0 { // TODO: When validation becomes versioned, this gets more complicated.