diff --git a/compute_resource.go b/compute_resource.go index a02cace75..434009cbc 100644 --- a/compute_resource.go +++ b/compute_resource.go @@ -16,12 +16,35 @@ limitations under the License. package govmomi -import "github.com/vmware/govmomi/vim25/types" +import ( + "github.com/vmware/govmomi/vim25/mo" + "github.com/vmware/govmomi/vim25/types" +) type ComputeResource struct { types.ManagedObjectReference + + c *Client +} + +func NewComputeResource(c *Client, ref types.ManagedObjectReference) *ComputeResource { + return &ComputeResource{ + ManagedObjectReference: ref, + c: c, + } } func (c ComputeResource) Reference() types.ManagedObjectReference { return c.ManagedObjectReference } + +func (c ComputeResource) Hosts() ([]types.ManagedObjectReference, error) { + var cr mo.ComputeResource + ps := []string{"host"} + + err := c.c.Properties(c.Reference(), ps, &cr) + if err != nil { + return nil, err + } + return cr.Host, nil +} diff --git a/find/finder.go b/find/finder.go index dd41b24dd..be9be72c2 100644 --- a/find/finder.go +++ b/find/finder.go @@ -313,10 +313,16 @@ func (f *Finder) HostSystemList(path ...string) ([]*govmomi.HostSystem, error) { var hss []*govmomi.HostSystem for _, e := range es { switch o := e.Object.(type) { - case mo.HostSystem: - hs := govmomi.NewHostSystem(f.Client, o.Reference()) + case mo.ComputeResource: + cr := govmomi.NewComputeResource(f.Client, o.Reference()) + hosts, err := cr.Hosts() + if err != nil { + return nil, err + } + hs := govmomi.NewHostSystem(f.Client, hosts[0]) hss = append(hss, hs) } + } return hss, nil diff --git a/govc/test/host.bats b/govc/test/host.bats index 7e7f94d11..008ce96b8 100755 --- a/govc/test/host.bats +++ b/govc/test/host.bats @@ -23,6 +23,10 @@ load test_helper assert_success grep -q Manufacturer: <<<$output + run govc host.info -host ${name##*/} + assert_success + grep -q Manufacturer: <<<$output + run govc host.info -host.ipath $name assert_success