Hi Mac, For creating RDM we need to do the following: Create the VirtualDeviceConfigSpec and set its properties. Create VirtualMachineConfigSpec object and set the VirtualDeviceCo...
See more...
Hi Mac, For creating RDM we need to do the following: Create the VirtualDeviceConfigSpec and set its properties. Create VirtualMachineConfigSpec object and set the VirtualDeviceConfigSpec to the device change property of VirtualMachineConfigSpec object. 3. Call the ReconfigVM_Task. If I follow the process 1 specified below getting the error “Incompatible device backing specified for device 0 “ as it is unable to create the vmdk file with the path specified in backingInfo->fileName. If I specify backingInfo->fileName=”[datastorename]” then it is creating Virtual Disk with unknown size which is not RDM. But if I follow the process 2 , first create vmdk file and then specify this file in backingInfo->fileName, its working fine. But the problem is it works only in case of ESXServer not Virtual Center because for creating VirtualDisk_Task, it takes VirtualDiskManager as Parameter which is not set in case of Virtual Center. So we are unable to understand why it is failing to create the RDM in process 1. I am also enclosing the link where the guy is able to create RDM using Process 1. Link : We came to know how to set the values for the following properties also backingInfo->lunUuid vdCfgSpec->device->unitNumber vdCfgSpec->device->controllerKey I also tried setting the below property in process 1 but no use vdCfgSpec ->fileOperation = VirtualDeviceConfigSpecFileOperation::create; vdCfgSpec ->fileOperationSpecified = true; I am still working on this, but if you find any solution on process 1, please let me know. Thanks & Regards Neela 1.Process to create a RDM (Error : Incompatible device backing specified for device 0) ================== /// Create VirtualDeviceConfigSpec object and set its properties VimApi::VirtualDeviceConfigSpec^ vdCfgSpec = gcnew VimApi::VirtualDeviceConfigSpec(); vdCfgSpec->operation = VirtualDeviceConfigSpecOperation::add; vdCfgSpec->operationSpecified = true; vdCfgSpec->device = gcnew VirtualDisk(); VirtualDiskRawDiskMappingVer1BackingInfo^ backingInfo = gcnew VirtualDiskRawDiskMappingVer1BackingInfo(); backingInfo->compatibilityMode = "physicalMode"; /// Need to be changed to the canonical name backingInfo->deviceName = "vmhba1:1:17:0"; //p_VDisk->; backingInfo->diskMode = "independent_persistent"; backingInfo->lunUuid = 01002d00003030303032374443303030374d61676e6974; // uuid we can get from the Host backingInfo->fileName = "[Primary] vm.vmdk"; // Note: set any *Specified values to true vdCfgSpec->device->backing = backingInfo; vdCfgSpec->device->connectable = gcnew VirtualDeviceConnectInfo(); vdCfgSpec->device->connectable->allowGuestControl = true; vdCfgSpec->device->connectable->connected = true; vdCfgSpec->device->connectable->startConnected = true; vdCfgSpec->device->controllerKey = 1000;//vdary[iSCSIControllerIndex].key; // you may have one already, or have to create one in this same spec. vdCfgSpec->device->controllerKeySpecified = true; vdCfgSpec->device->key = -1; // all devices can be -1, but. all SCSI controllers must have unique -ve values vdCfgSpec->device->unitNumber = 3; // next device # in SCSI chain... vdCfgSpec[0].device.unitNumberSpecified = true; vdCfgSpec->device->unitNumberSpecified = true; VimApi::Description^ deviceInfo = gcnew VimApi::Description(); deviceInfo->label = "HardDisk123"; deviceInfo->summary = ""; vdCfgSpec->device->deviceInfo = deviceInfo; /// Create the Virtual Machine managed object VimApi::ManagedObjectReference ^vm = gcnew VimApi::ManagedObjectReference(); vm->type = "VirtualMachine"; Morpheus::Model::VMW_ModelObjectId^ VMobj = safe_cast<Morpheus::Model::VMW_ModelObjectId^> (this->ObjectId); vm->Value = VMobj->MOB->Value; // Create the VirtualMachineConfigSpec object VimApi::VirtualMachineConfigSpec^ virtualMacConfigSpec = gcnew VimApi::VirtualMachineConfigSpec(); virtualMacConfigSpec->deviceChange = gcnew array<VimApi::VirtualDeviceConfigSpec^> ; m_pVimSvc->ReconfigVM_Task(vm,virtualMacConfigSpec); 2. Process to create a RDM by creating the vmdk file first and then creating RDM (But works only with ESXServer not Virtual Center) ================================================================================================ // Create the VirtualDiskManager MO VimApi::ManagedObjectReference ^virtualDiskManager = gcnew VimApi::ManagedObjectReference(); virtualDiskManager->type = "VirtualDiskManager"; virtualDiskManager->Value = "ha-vdiskmanager"; /// create a DeviceBackedVirtualDiskSpec ob VimApi::DeviceBackedVirtualDiskSpec^ virtualDiskSpec = gcnew VimApi::DeviceBackedVirtualDiskSpec(); virtualDiskSpec->diskType = "rdm"; virtualDiskSpec->adapterType = "lsiLogic"; virtualDiskSpec->device = p_VDisk->VMWDevicepath; pVim->CreateVirtualDisk_Task(virtualDiskManager,"[Primary] vm.vmdk",nullptr,virtualDiskSpec); /// Create VirtualDeviceConfigSpec object and set its properties VimApi::VirtualDeviceConfigSpec^ vdCfgSpec = gcnew VimApi::VirtualDeviceConfigSpec(); vdCfgSpec->operation = VirtualDeviceConfigSpecOperation::add; vdCfgSpec->operationSpecified = true; vdCfgSpec->device = gcnew VirtualDisk(); VirtualDiskRawDiskMappingVer1BackingInfo^ backingInfo = gcnew VirtualDiskRawDiskMappingVer1BackingInfo(); backingInfo->compatibilityMode = "physicalMode"; /// Need to be changed to the canonical name backingInfo->deviceName = "vmhba1:1:17:0"; //p_VDisk->; backingInfo->diskMode = "independent_persistent"; backingInfo->lunUuid = 01002d00003030303032374443303030374d61676e6974; // uuid we can get from the Host backingInfo->fileName = "[Primary] vm.vmdk"; // Note: set any *Specified values to true vdCfgSpec->device->backing = backingInfo; vdCfgSpec->device->connectable = gcnew VirtualDeviceConnectInfo(); vdCfgSpec->device->connectable->allowGuestControl = true; vdCfgSpec->device->connectable->connected = true; vdCfgSpec->device->connectable->startConnected = true; vdCfgSpec->device->controllerKey = 1000;//vdary[iSCSIControllerIndex].key; // you may have one already, or have to create one in this same spec. vdCfgSpec->device->controllerKeySpecified = true; vdCfgSpec->device->key = -1; // all devices can be -1, but. all SCSI controllers must have unique -ve values vdCfgSpec->device->unitNumber = 3; // next device # in SCSI chain... vdCfgSpec[0].device.unitNumberSpecified = true; vdCfgSpec->device->unitNumberSpecified = true; VimApi::Description^ deviceInfo = gcnew VimApi::Description(); deviceInfo->label = "HardDisk123"; deviceInfo->summary = ""; vdCfgSpec->device->deviceInfo = deviceInfo; /// Create the Virtual Machine managed object VimApi::ManagedObjectReference ^vm = gcnew VimApi::ManagedObjectReference(); vm->type = "VirtualMachine"; Morpheus::Model::VMW_ModelObjectId^ VMobj = safe_cast<Morpheus::Model::VMW_ModelObjectId^> (this->ObjectId); vm->Value = VMobj->MOB->Value; // Create the VirtualMachineConfigSpec object VimApi::VirtualMachineConfigSpec^ virtualMacConfigSpec = gcnew VimApi::VirtualMachineConfigSpec(); virtualMacConfigSpec->deviceChange = gcnew array<VimApi::VirtualDeviceConfigSpec^> ; m_pVimSvc->ReconfigVM_Task(vm,virtualMacConfigSpec); Regards Neela