github.com/vmware/govmomi@v0.51.0/object/cluster_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 10 "github.com/vmware/govmomi/vim25" 11 "github.com/vmware/govmomi/vim25/methods" 12 "github.com/vmware/govmomi/vim25/mo" 13 "github.com/vmware/govmomi/vim25/types" 14 ) 15 16 type ClusterComputeResource struct { 17 ComputeResource 18 } 19 20 func NewClusterComputeResource(c *vim25.Client, ref types.ManagedObjectReference) *ClusterComputeResource { 21 return &ClusterComputeResource{ 22 ComputeResource: *NewComputeResource(c, ref), 23 } 24 } 25 26 func (c ClusterComputeResource) Configuration(ctx context.Context) (*types.ClusterConfigInfoEx, error) { 27 var obj mo.ClusterComputeResource 28 29 err := c.Properties(ctx, c.Reference(), []string{"configurationEx"}, &obj) 30 if err != nil { 31 return nil, err 32 } 33 34 return obj.ConfigurationEx.(*types.ClusterConfigInfoEx), nil 35 } 36 37 func (c ClusterComputeResource) AddHost(ctx context.Context, spec types.HostConnectSpec, asConnected bool, license *string, resourcePool *types.ManagedObjectReference) (*Task, error) { 38 req := types.AddHost_Task{ 39 This: c.Reference(), 40 Spec: spec, 41 AsConnected: asConnected, 42 } 43 44 if license != nil { 45 req.License = *license 46 } 47 48 if resourcePool != nil { 49 req.ResourcePool = resourcePool 50 } 51 52 res, err := methods.AddHost_Task(ctx, c.c, &req) 53 if err != nil { 54 return nil, err 55 } 56 57 return NewTask(c.c, res.Returnval), nil 58 } 59 60 func (c ClusterComputeResource) MoveInto(ctx context.Context, hosts ...*HostSystem) (*Task, error) { 61 req := types.MoveInto_Task{ 62 This: c.Reference(), 63 } 64 65 hostReferences := make([]types.ManagedObjectReference, len(hosts)) 66 for i, host := range hosts { 67 hostReferences[i] = host.Reference() 68 } 69 req.Host = hostReferences 70 71 res, err := methods.MoveInto_Task(ctx, c.c, &req) 72 if err != nil { 73 return nil, err 74 } 75 76 return NewTask(c.c, res.Returnval), nil 77 } 78 79 func (c ClusterComputeResource) PlaceVm(ctx context.Context, spec types.PlacementSpec) (*types.PlacementResult, error) { 80 req := types.PlaceVm{ 81 This: c.Reference(), 82 PlacementSpec: spec, 83 } 84 85 res, err := methods.PlaceVm(ctx, c.c, &req) 86 if err != nil { 87 return nil, err 88 } 89 90 return &res.Returnval, nil 91 }