// TODO: add other common fields that require global validation. func validateCommonFields(obj, old runtime.Object) (field.ErrorList, error) { allErrs := field.ErrorList{} objectMeta, err := api.ObjectMetaFor(obj) if err != nil { return nil, fmt.Errorf("failed to get new object metadata: %v", err) } oldObjectMeta, err := api.ObjectMetaFor(old) if err != nil { return nil, fmt.Errorf("failed to get old object metadata: %v", err) } allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(objectMeta, oldObjectMeta, field.NewPath("metadata"))...) return allErrs, nil }
func (t *Tester) getObjectMetaOrFail(obj runtime.Object) *api.ObjectMeta { meta, err := api.ObjectMetaFor(obj) if err != nil { t.Fatalf("object does not have ObjectMeta: %v\n%#v", err, obj) } return meta }
// ObjectReaction returns a ReactionFunc that takes a generic action string of the form // <verb>-<resource> or <verb>-<subresource>-<resource> and attempts to return a runtime // Object or error that matches the requested action. For instance, list-replicationControllers // should attempt to return a list of replication controllers. This method delegates to the // ObjectRetriever interface to satisfy retrieval of lists or retrieval of single items. // TODO: add support for sub resources func ObjectReaction(o ObjectRetriever, mapper meta.RESTMapper) ReactionFunc { return func(action Action) (bool, runtime.Object, error) { kind, err := mapper.KindFor(unversioned.GroupVersionResource{Resource: action.GetResource()}) if err != nil { return false, nil, fmt.Errorf("unrecognized action %s: %v", action.GetResource(), err) } // TODO: have mapper return a Kind for a subresource? switch castAction := action.(type) { case ListAction: kind.Kind += "List" resource, err := o.Kind(kind, "") return true, resource, err case GetAction: resource, err := o.Kind(kind, castAction.GetName()) return true, resource, err case DeleteAction: resource, err := o.Kind(kind, castAction.GetName()) return true, resource, err case CreateAction: meta, err := api.ObjectMetaFor(castAction.GetObject()) if err != nil { return true, nil, err } resource, err := o.Kind(kind, meta.Name) return true, resource, err case UpdateAction: meta, err := api.ObjectMetaFor(castAction.GetObject()) if err != nil { return true, nil, err } resource, err := o.Kind(kind, meta.Name) return true, resource, err default: return false, nil, fmt.Errorf("no reaction implemented for %s", action) } return true, nil, nil } }
// objectMetaAndKind retrieves kind and ObjectMeta from a runtime object, or returns an error. func objectMetaAndKind(typer runtime.ObjectTyper, obj runtime.Object) (*api.ObjectMeta, unversioned.GroupVersionKind, error) { objectMeta, err := api.ObjectMetaFor(obj) if err != nil { return nil, unversioned.GroupVersionKind{}, errors.NewInternalError(err) } kind, err := typer.ObjectKind(obj) if err != nil { return nil, unversioned.GroupVersionKind{}, errors.NewInternalError(err) } return objectMeta, kind, nil }