github.com/vmware/govmomi@v0.51.0/object/compute_resource.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package object 6 7 import ( 8 "context" 9 "fmt" 10 "path" 11 12 "github.com/vmware/govmomi/property" 13 "github.com/vmware/govmomi/vim25" 14 "github.com/vmware/govmomi/vim25/methods" 15 "github.com/vmware/govmomi/vim25/mo" 16 "github.com/vmware/govmomi/vim25/types" 17 ) 18 19 type ComputeResource struct { 20 Common 21 } 22 23 func NewComputeResource(c *vim25.Client, ref types.ManagedObjectReference) *ComputeResource { 24 return &ComputeResource{ 25 Common: NewCommon(c, ref), 26 } 27 } 28 29 func (c ComputeResource) Hosts(ctx context.Context) ([]*HostSystem, error) { 30 var cr mo.ComputeResource 31 32 err := c.Properties(ctx, c.Reference(), []string{"host"}, &cr) 33 if err != nil { 34 return nil, err 35 } 36 37 if len(cr.Host) == 0 { 38 return nil, nil 39 } 40 41 var hs []mo.HostSystem 42 pc := property.DefaultCollector(c.Client()) 43 err = pc.Retrieve(ctx, cr.Host, []string{"name"}, &hs) 44 if err != nil { 45 return nil, err 46 } 47 48 var hosts []*HostSystem 49 50 for _, h := range hs { 51 host := NewHostSystem(c.Client(), h.Reference()) 52 host.InventoryPath = path.Join(c.InventoryPath, h.Name) 53 hosts = append(hosts, host) 54 } 55 56 return hosts, nil 57 } 58 59 func (c ComputeResource) Datastores(ctx context.Context) ([]*Datastore, error) { 60 var cr mo.ComputeResource 61 62 err := c.Properties(ctx, c.Reference(), []string{"datastore"}, &cr) 63 if err != nil { 64 return nil, err 65 } 66 67 var dss []*Datastore 68 for _, ref := range cr.Datastore { 69 ds := NewDatastore(c.c, ref) 70 dss = append(dss, ds) 71 } 72 73 return dss, nil 74 } 75 76 func (c ComputeResource) EnvironmentBrowser(ctx context.Context) (*EnvironmentBrowser, error) { 77 var cr mo.ComputeResource 78 79 err := c.Properties(ctx, c.Reference(), []string{"environmentBrowser"}, &cr) 80 if err != nil { 81 return nil, err 82 } 83 84 if cr.EnvironmentBrowser == nil { 85 return nil, fmt.Errorf("%s: nil environmentBrowser", c.Reference()) 86 } 87 88 return NewEnvironmentBrowser(c.c, *cr.EnvironmentBrowser), nil 89 } 90 91 func (c ComputeResource) ResourcePool(ctx context.Context) (*ResourcePool, error) { 92 var cr mo.ComputeResource 93 94 err := c.Properties(ctx, c.Reference(), []string{"resourcePool"}, &cr) 95 if err != nil { 96 return nil, err 97 } 98 99 return NewResourcePool(c.c, *cr.ResourcePool), nil 100 } 101 102 func (c ComputeResource) Reconfigure(ctx context.Context, spec types.BaseComputeResourceConfigSpec, modify bool) (*Task, error) { 103 req := types.ReconfigureComputeResource_Task{ 104 This: c.Reference(), 105 Spec: spec, 106 Modify: modify, 107 } 108 109 res, err := methods.ReconfigureComputeResource_Task(ctx, c.c, &req) 110 if err != nil { 111 return nil, err 112 } 113 114 return NewTask(c.c, res.Returnval), nil 115 }