func (f *Folder) putChild(o mo.Entity) { Map.PutEntity(f, o) f.m.Lock() defer f.m.Unlock() f.ChildEntity = append(f.ChildEntity, o.Reference()) }
func (r *Registry) PutEntity(parent mo.Entity, item mo.Entity) mo.Entity { e := item.Entity() if parent != nil { e.Parent = &parent.Entity().Self } r.Put(item) return item }
// getEntityParent traverses up the inventory and returns the first object of type kind. // If no object of type kind is found, the method will panic when it reaches the // inventory root Folder where the Parent field is nil. func (r *Registry) getEntityParent(item mo.Entity, kind string) mo.Entity { for { parent := item.Entity().Parent item = r.Get(*parent).(mo.Entity) if item.Reference().Type == kind { return item } } }
// getEntityComputeResource returns the ComputeResource parent for the given item. // A ResourcePool for example may have N Parents of type ResourcePool, but the top // most Parent pool is always a ComputeResource child. func (r *Registry) getEntityComputeResource(item mo.Entity) mo.Entity { for { parent := item.Entity().Parent item = r.Get(*parent).(mo.Entity) switch item.Reference().Type { case "ComputeResource": return item case "ClusterComputeResource": return item } } }
// NewEntity sets Entity().Self with a new, unique Value. // Useful for creating object instances from templates. func (r *Registry) NewEntity(item mo.Entity) mo.Entity { e := item.Entity() e.Self.Value = "" e.Self = r.newReference(item) return item }