optimise vcenter collection [CI SKIP]
This commit is contained in:
@@ -150,6 +150,34 @@ func (v *Vcenter) GetAllVmReferences() ([]*object.VirtualMachine, error) {
|
||||
return results, err
|
||||
}
|
||||
|
||||
// GetAllVMsWithProps returns all VMs with the properties needed for snapshotting in a single property-collector call.
|
||||
func (v *Vcenter) GetAllVMsWithProps() ([]mo.VirtualMachine, error) {
|
||||
m := view.NewManager(v.client.Client)
|
||||
cv, err := m.CreateContainerView(v.ctx, v.client.ServiceContent.RootFolder, []string{"VirtualMachine"}, true)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create VM container view: %w", err)
|
||||
}
|
||||
defer cv.Destroy(v.ctx)
|
||||
|
||||
var vms []mo.VirtualMachine
|
||||
props := []string{
|
||||
"name",
|
||||
"parent",
|
||||
"config.uuid",
|
||||
"config.createDate",
|
||||
"config.hardware",
|
||||
"config.managedBy",
|
||||
"config.template",
|
||||
"runtime.powerState",
|
||||
"runtime.host",
|
||||
"resourcePool",
|
||||
}
|
||||
if err := cv.Retrieve(v.ctx, []string{"VirtualMachine"}, props, &vms); err != nil {
|
||||
return nil, fmt.Errorf("failed to retrieve VMs: %w", err)
|
||||
}
|
||||
return vms, nil
|
||||
}
|
||||
|
||||
func (v *Vcenter) BuildHostLookup() (map[string]HostLookup, error) {
|
||||
finder := find.NewFinder(v.client.Client, true)
|
||||
datacenters, err := finder.DatacenterList(v.ctx, "*")
|
||||
@@ -586,6 +614,27 @@ func (v *Vcenter) GetVmResourcePool(vm mo.VirtualMachine) (string, error) {
|
||||
return resourcePool, nil
|
||||
}
|
||||
|
||||
// BuildResourcePoolLookup creates a cache of resource pool MoRef -> name for fast lookups.
|
||||
func (v *Vcenter) BuildResourcePoolLookup() (map[string]string, error) {
|
||||
m := view.NewManager(v.client.Client)
|
||||
cv, err := m.CreateContainerView(v.ctx, v.client.ServiceContent.RootFolder, []string{"ResourcePool"}, true)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create resource pool view: %w", err)
|
||||
}
|
||||
defer cv.Destroy(v.ctx)
|
||||
|
||||
var pools []mo.ResourcePool
|
||||
if err := cv.Retrieve(v.ctx, []string{"ResourcePool"}, []string{"name"}, &pools); err != nil {
|
||||
return nil, fmt.Errorf("failed to retrieve resource pools: %w", err)
|
||||
}
|
||||
|
||||
lookup := make(map[string]string, len(pools))
|
||||
for _, pool := range pools {
|
||||
lookup[pool.Reference().Value] = pool.Name
|
||||
}
|
||||
return lookup, nil
|
||||
}
|
||||
|
||||
// Helper function to retrieve the full folder path for the VM
|
||||
func (v *Vcenter) GetVMFolderPath(vm mo.VirtualMachine) (string, error) {
|
||||
//finder := find.NewFinder(v.client.Client, true)
|
||||
|
||||
Reference in New Issue
Block a user