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  }