func setNamespace(typer runtime.ObjectTyper, obj runtime.Object, namespace string) error { itemMeta, err := meta.Accessor(obj) if err != nil { return err } gvks, _, err := typer.ObjectKinds(obj) if err != nil { return err } group, err := registered.Group(gvks[0].Group) if err != nil { return err } mapping, err := group.RESTMapper.RESTMapping(gvks[0].GroupKind(), gvks[0].Version) if err != nil { return err } switch mapping.Scope.Name() { case meta.RESTScopeNameNamespace: if len(itemMeta.GetNamespace()) == 0 { itemMeta.SetNamespace(namespace) } } return 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) } kinds, _, err := typer.ObjectKinds(obj) if err != nil { return nil, unversioned.GroupVersionKind{}, errors.NewInternalError(err) } return objectMeta, kinds[0], nil }
// transformDecodeError adds additional information when a decode fails. func transformDecodeError(typer runtime.ObjectTyper, baseErr error, into runtime.Object, gvk *unversioned.GroupVersionKind, body []byte) error { objGVKs, _, err := typer.ObjectKinds(into) if err != nil { return err } objGVK := objGVKs[0] if gvk != nil && len(gvk.Kind) > 0 { return errors.NewBadRequest(fmt.Sprintf("%s in version %q cannot be handled as a %s: %v", gvk.Kind, gvk.Version, objGVK.Kind, baseErr)) } summary := summarizeData(body, 30) return errors.NewBadRequest(fmt.Sprintf("the object provided is unrecognized (must be of type %s): %v (%s)", objGVK.Kind, baseErr, summary)) }
// TODO: move to pkg/runtime or pkg/api func AsVersionedObjects(objects []runtime.Object, typer runtime.ObjectTyper, convertor runtime.ObjectConvertor, versions ...unversioned.GroupVersion) []error { var errs []error for i, object := range objects { kinds, _, err := typer.ObjectKinds(object) if err != nil { errs = append(errs, err) continue } if kindsInVersions(kinds, versions) { continue } if !isInternalOnly(kinds) { continue } converted, err := tryConvert(convertor, object, versions) if err != nil { errs = append(errs, err) continue } objects[i] = converted } return errs }