Hello,
I'm trying to add a disk to a VM using SDRS. Here's my piece of code:
my ($vm, $sp, $controllerKey, $unit, $disksize) = @_
my $disk_backing_info =
VirtualDiskFlatVer2BackingInfo->new(diskMode => 'persistent', fileName => "");
my $disk_spec = VirtualDisk->new(backing => $disk_backing_info,
controllerKey => $controllerKey,
key => $unit,
unitNumber => $unit,
capacityInKB => $disksize);
my $disk_vm_dev_conf_spec = VirtualDeviceConfigSpec->new(device => $disk_spec,
fileOperation => VirtualDeviceConfigSpecFileOperation->new('create'),
operation => VirtualDeviceConfigSpecOperation->new('add'));
my $storageMgr = Vim::get_view(mo_ref => Vim::get_service_content()->storageResourceManager);
my $podSpec = StorageDrsPodSelectionSpec->new(storagePod => $sp->{mo_ref});
my $configSpec = VirtualMachineConfigSpec->new(deviceChange => [$disk_vm_dev_conf_spec]);
my $storageSpec = StoragePlacementSpec->new(type => 'reconfigure', podSelectionSpec => $podSpec, vm => $vm->{mo_ref}, configSpec => $configSpec);
get_logger->debug("got storageSpec: ".Dumper($storageSpec));
my $result = $storageMgr->RecommendDatastores(storageSpec => $storageSpec);
In my logfile, dumping the $storageSpec leads to this output:
2017/04/06 13:21:52 [DEBUG] XXX::YYY::VMDisks::create_disk_on_storagepod:359 - got storageSpec: $VAR1 = bless( {
'vm' => bless( {
'value' => 'vm-236336',
'type' => 'VirtualMachine'
}, 'ManagedObjectReference' ),
'configSpec' => bless( {
'deviceChange' => [
bless( {
'fileOperation' => bless( {
'val' => 'create'
}, 'VirtualDeviceConfigSpecFileOperation' ),
'operation' => bless( {
'val' => 'add'
}, 'VirtualDeviceConfigSpecOperation' ),
'device' => bless( {
'capacityInKB' => 139264,
'backing' => bless( {
'fileName' => '',
'diskMode' => 'persistent'
}, 'VirtualDiskFlatVer2BackingInfo' ),
'unitNumber' => 4,
'controllerKey' => '1000',
'key' => 4
}, 'VirtualDisk' )
}, 'VirtualDeviceConfigSpec' )
]
}, 'VirtualMachineConfigSpec' ),
'podSelectionSpec' => bless( {
'storagePod' => bless( {
'value' => 'group-p201254',
'type' => 'StoragePod'
}, 'ManagedObjectReference' )
}, 'StorageDrsPodSelectionSpec' ),
'type' => 'reconfigure'
}, 'StoragePlacementSpec' );
Right after that, calling RecommendDatastores throws this error:
2017/04/06 13:21:52 [ERROR] XXX::Mojo::Webvm::__ANON__:310 -
SOAP Fault:
-----------
Fault string: A specified parameter was not correct.
StoragePlacementSpec.podSelectionSpec.storagePod
Fault detail: InvalidArgumentFault
I don't get what's wrong here and I've tried many different ways of passing the storagePod mo_ref without any success so far. Years ago, the very same problem has been posted here Add VMDK to VM using SDRS recommendation without getting any response.
VMWare SDK for Perl is 6.5.0 (but also tried with 6.0.0 before).
Could anyone give me any hint how to call RecommendDatastores correctly?
Regards, Andreas
Have you got it working?