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  }