github.com/vmware/govmomi@v0.51.0/vapi/cluster/internal/internal.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 internal 6 7 import ( 8 "context" 9 10 "github.com/vmware/govmomi/view" 11 "github.com/vmware/govmomi/vim25" 12 "github.com/vmware/govmomi/vim25/mo" 13 "github.com/vmware/govmomi/vim25/types" 14 ) 15 16 const ( 17 // ModulesPath is rest endpoint for the Cluster Modules API 18 ModulesPath = "/vcenter/cluster/modules" 19 // ModulesVMPath is rest endpoint for the Cluster Modules Members API 20 ModulesVMPath = "/vcenter/cluster/modules/vm" 21 ) 22 23 // Status is used for JSON encode/decode 24 type Status struct { 25 Success bool `json:"success"` 26 } 27 28 // CreateModule is used for JSON encode/decode 29 type CreateModule struct { 30 Spec struct { 31 ID string `json:"cluster"` 32 } `json:"spec"` 33 } 34 35 // ModuleMembers is used for JSON encode/decode 36 type ModuleMembers struct { 37 VMs []string `json:"vms"` 38 } 39 40 // AsReferences converts the ModuleMembers.VM field to morefs 41 func (m *ModuleMembers) AsReferences() []types.ManagedObjectReference { 42 refs := make([]types.ManagedObjectReference, 0, len(m.VMs)) 43 for _, id := range m.VMs { 44 refs = append(refs, types.ManagedObjectReference{ 45 Type: "VirtualMachine", 46 Value: id, 47 }) 48 } 49 return refs 50 } 51 52 // ClusterVM returns all VM references in the given cluster 53 func ClusterVM(c *vim25.Client, cluster mo.Reference) ([]mo.Reference, error) { 54 ctx := context.Background() 55 kind := []string{"VirtualMachine"} 56 57 m := view.NewManager(c) 58 v, err := m.CreateContainerView(ctx, cluster.Reference(), kind, true) 59 if err != nil { 60 return nil, err 61 } 62 defer func() { _ = v.Destroy(ctx) }() 63 64 refs, err := v.Find(ctx, kind, nil) 65 if err != nil { 66 return nil, err 67 } 68 69 vms := make([]mo.Reference, 0, len(refs)) 70 for i := range refs { 71 vms = append(vms, refs[i]) 72 } 73 74 return vms, nil 75 }