func (f *Finder) ComputeResourceList(ctx context.Context, path string) ([]*object.ComputeResource, error) { es, err := f.find(ctx, f.hostFolder, false, path) if err != nil { return nil, err } var crs []*object.ComputeResource for _, e := range es { var cr *object.ComputeResource switch o := e.Object.(type) { case mo.ComputeResource, mo.ClusterComputeResource: cr = object.NewComputeResource(f.client, o.Reference()) default: continue } cr.InventoryPath = e.Path crs = append(crs, cr) } if len(crs) == 0 { return nil, &NotFoundError{"compute resource", path} } return crs, nil }
func (cmd *remove) Remove(ctx context.Context, host *object.HostSystem) error { var h mo.HostSystem err := host.Properties(ctx, host.Reference(), []string{"parent"}, &h) if err != nil { return err } remove := host.Destroy if h.Parent.Type == "ComputeResource" { // Standalone host. From the docs: // "Invoking remove on a HostSystem of standalone type throws a NotSupported fault. // A standalone HostSystem can be removeed only by invoking remove on its parent ComputeResource." remove = object.NewComputeResource(host.Client(), *h.Parent).Destroy } task, err := remove(ctx) if err != nil { return err } logger := cmd.ProgressLogger(fmt.Sprintf("%s removing... ", host.InventoryPath)) defer logger.Wait() _, err = task.WaitForResult(ctx, logger) return err }
func (f *Finder) HostSystemList(ctx context.Context, path string) ([]*object.HostSystem, error) { es, err := f.find(ctx, f.hostFolder, false, path) if err != nil { return nil, err } var hss []*object.HostSystem for _, e := range es { var hs *object.HostSystem switch o := e.Object.(type) { case mo.HostSystem: hs = object.NewHostSystem(f.client, o.Reference()) case mo.ComputeResource: cr := object.NewComputeResource(f.client, o.Reference()) hosts, err := cr.Hosts(ctx) if err != nil { return nil, err } hs = object.NewHostSystem(f.client, hosts[0]) default: continue } hs.InventoryPath = e.Path hss = append(hss, hs) } if len(hss) == 0 { return nil, &NotFoundError{"host", path} } return hss, nil }
func (rp *ResourcePool) GetCluster(ctx context.Context) (*object.ComputeResource, error) { var err error var mrp mo.ResourcePool if err = rp.Properties(ctx, rp.Reference(), []string{"owner"}, &mrp); err != nil { log.Errorf("Unable to get cluster of resource pool %s: %s", rp.Name(), err) return nil, err } return object.NewComputeResource(rp.Client.Client, mrp.Owner), nil }