func (t *tracker) Delete(gvk unversioned.GroupVersionKind, ns, name string) error { if err := checkNamespace(gvk, ns); err != nil { return err } t.lock.Lock() defer t.lock.Unlock() found := false for i, existingObj := range t.objects[gvk] { objMeta, err := meta.Accessor(existingObj) if err != nil { return err } if objMeta.GetNamespace() == ns && objMeta.GetName() == name { t.objects[gvk] = append(t.objects[gvk][:i], t.objects[gvk][i+1:]...) found = true break } } if found { return nil } return errors.NewNotFound(unversioned.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, name) }
func (s storeReplicaSetsNamespacer) Get(name string) (*extensions.ReplicaSet, error) { obj, exists, err := s.store.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensions.Resource("replicaset"), name) } return obj.(*extensions.ReplicaSet), nil }
func (s storeReplicationControllersNamespacer) Get(name string) (*api.ReplicationController, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(api.Resource("replicationcontroller"), name) } return obj.(*api.ReplicationController), nil }
func (s storePodsNamespacer) Get(name string) (*api.Pod, error) { obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(api.Resource("pod"), name) } return obj.(*api.Pod), nil }
func (s storeServicesNamespacer) Get(name string) (*api.Service, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(api.Resource("service"), name) } return obj.(*api.Service), nil }
func (t *tracker) Get(gvk unversioned.GroupVersionKind, ns, name string) (runtime.Object, error) { if err := checkNamespace(gvk, ns); err != nil { return nil, err } errNotFound := errors.NewNotFound(unversioned.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, name) t.lock.RLock() defer t.lock.RUnlock() objs, ok := t.objects[gvk] if !ok { return nil, errNotFound } matchingObjs, err := filterByNamespaceAndName(objs, ns, name) if err != nil { return nil, err } if len(matchingObjs) == 0 { return nil, errNotFound } if len(matchingObjs) > 1 { return nil, fmt.Errorf("more than one object matched gvk %s, ns: %q name: %q", gvk, ns, name) } // Only one object should match in the tracker if it works // correctly, as Add/Update methods enforce kind/namespace/name // uniqueness. obj, err := t.scheme.Copy(matchingObjs[0]) if err != nil { return nil, err } if status, ok := obj.(*unversioned.Status); ok { if status.Details != nil { status.Details.Kind = gvk.Kind } if status.Status != unversioned.StatusSuccess { return nil, &errors.StatusError{ErrStatus: *status} } } return obj, nil }
func (t *tracker) add(obj runtime.Object, replaceExisting bool) error { if meta.IsListType(obj) { return t.addList(obj, replaceExisting) } gvks, _, err := t.scheme.ObjectKinds(obj) if err != nil { return err } if len(gvks) == 0 { return fmt.Errorf("no registered kinds for %v", obj) } t.lock.Lock() defer t.lock.Unlock() for _, gvk := range gvks { gr := unversioned.GroupResource{Group: gvk.Group, Resource: gvk.Kind} // To avoid the object from being accidentally modified by caller // after it's been added to the tracker, we always store the deep // copy. obj, err = t.scheme.Copy(obj) if err != nil { return err } if status, ok := obj.(*unversioned.Status); ok && status.Details != nil { gvk.Kind = status.Details.Kind } newMeta, err := meta.Accessor(obj) if err != nil { return err } if err := checkNamespace(gvk, newMeta.GetNamespace()); err != nil { return err } for i, existingObj := range t.objects[gvk] { oldMeta, err := meta.Accessor(existingObj) if err != nil { return err } if oldMeta.GetNamespace() == newMeta.GetNamespace() && oldMeta.GetName() == newMeta.GetName() { if replaceExisting { t.objects[gvk][i] = obj return nil } return errors.NewAlreadyExists(gr, newMeta.GetName()) } } if replaceExisting { // Tried to update but no matching object was found. return errors.NewNotFound(gr, newMeta.GetName()) } t.objects[gvk] = append(t.objects[gvk], obj) } return nil }