func virtualMachineProperties(ctx context.Context, vm *object.VirtualMachine, keys []string) (*mo.VirtualMachine, error) {
	logger.Printf("[DEBUG] Fetching properties for VM %q", vm.Name())
	var props mo.VirtualMachine
	if err := vm.Properties(ctx, vm.Reference(), keys, &props); err != nil {
		return nil, err
	}
	return &props, nil
}
func virtualMachineProperties(ctx context.Context, vm *object.VirtualMachine, keys []string) (*mo.VirtualMachine, error) {
	logger.Printf("[DEBUG] Fetching properties for VM %q", vm.Name())
	var props mo.VirtualMachine
	if err := vm.Properties(ctx, vm.Reference(), keys, &props); err != nil {
		return nil, err
	}
	return &props, nil
}
// virtualMachineProperties is a convenience method that wraps fetching the
// VirtualMachine MO from its higher-level object.
//
// It takes a list of property keys to fetch. Keeping the property set small
// can sometimes result in significant performance improvements.