Hi
i am using c# api to add rdm ,i was able to add new disk(just regular virtual disk) but when it come to rdm
i am getting Device 0 error
this is my code
var diskSpec = new VirtualDeviceConfigSpec();
var vmConfigInfo = (VirtualMachineConfigInfo)PropertyCollectorHandler.GetDynamicProperty(vmMor, "config");
var diskfileBacking = new VirtualDiskRawDiskMappingVer1BackingInfo();
var disk = new VirtualDisk();
int tempInt;
bool IsLunNum = int.TryParse(uniqueid, out tempInt);
ManagedObjectReference computeResMOR = (ManagedObjectReference)PropertyCollectorHandler.GetDynamicProperty(GeneralMorContainer.GetHostMor(HostiP),"parent");
ManagedObjectReference BrowserMOR =(ManagedObjectReference) PropertyCollectorHandler.GetDynamicProperty(computeResMOR, "environmentBrowser");
VirtualMachineScsiDiskDeviceInfo[] arrDevices = PropertyCollectorHandler.GetScsiDeviceInfo(BrowserMOR, HostiP);
foreach (VirtualMachineScsiDiskDeviceInfo virtualMachineScsiDiskDeviceInfo in arrDevices)
{
if (!IsLunNum && virtualMachineScsiDiskDeviceInfo.disk.canonicalName.ToLower().Contains(uniqueid.ToLower()))
{
diskfileBacking.deviceName = virtualMachineScsiDiskDeviceInfo.disk.canonicalName;
}
else if (IsLunNum && virtualMachineScsiDiskDeviceInfo.lunNumber == Convert.ToInt32(uniqueid))
{
diskfileBacking.deviceName = virtualMachineScsiDiskDeviceInfo.disk.canonicalName;
}
}
if(diskfileBacking.deviceName==null)
{
Log.GetSingleLogInst().InternalLogLine(DateTime.Now,
string.Format(
"Unable to find device name for {0}", uniqueid),MsGtype.Warnning);
return null;
}
int ckey = 0;
int unitNumber = 0;
VirtualDevice[] test = vmConfigInfo.hardware.device;
for (int k = 0; k < test.Length; k++)
{
if (test[k].deviceInfo.label.Equals("SCSI controller "+scsi_id.ToString()))
{
ckey = test[k].key;
break;
}
}
if (ckey == 0)
{
Log.GetSingleLogInst().InternalLogLine(DateTime.Now,
string.Format(
"Unable to find CONTROL Key for {0} Lun.", uniqueid), MsGtype.Warnning);
return null;
}
if (scsi_unit >= 7) //there is no slot 7 when ordering the disk device
scsi_unit++;
unitNumber = scsi_unit;
diskfileBacking.fileName = datastorePath + RDMfileName + ".vmdk";
diskfileBacking.diskMode = DiskMode.persistent.ToString(); // const will be changed by demand
diskfileBacking.datastore = new ManagedObjectReference();
diskfileBacking.diskMode = DiskMode.independent_persistent.ToString();
diskfileBacking.compatibilityMode = "physicalMode";
disk.unitNumber = unitNumber;
disk.backing = diskfileBacking;
// int size = GB * sizeGB;
// disk.capacityInKB = size;
disk.key = _keyOperation; //-1 + (-1 * scsi_unit);//unique key, for set seperate operations
_keyOperation--;
disk.controllerKeySpecified = true;
disk.unitNumberSpecified = true;
disk.controllerKey = ckey;
diskSpec.operation = VirtualDeviceConfigSpecOperation.add;
diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create;
diskSpec.device = disk;
diskSpec.fileOperationSpecified = true;
diskSpec.operationSpecified = true;
return diskSpec;
can u pls help me
thx
var diskSpec = new VirtualDeviceConfigSpec();
var vmConfigInfo = (VirtualMachineConfigInfo)PropertyCollectorHandler.GetDynamicProperty(vmMor, "config");
var diskfileBacking = new VirtualDiskRawDiskMappingVer1BackingInfo();
var disk = new VirtualDisk();
int tempInt;
bool IsLunNum = int.TryParse(uniqueid, out tempInt);
ManagedObjectReference computeResMOR = (ManagedObjectReference)PropertyCollectorHandler.GetDynamicProperty(GeneralMorContainer.GetHostMor(HostiP),"parent");
ManagedObjectReference BrowserMOR =(ManagedObjectReference) PropertyCollectorHandler.GetDynamicProperty(computeResMOR, "environmentBrowser");
VirtualMachineScsiDiskDeviceInfo[] arrDevices = PropertyCollectorHandler.GetScsiDeviceInfo(BrowserMOR, HostiP);
foreach (VirtualMachineScsiDiskDeviceInfo virtualMachineScsiDiskDeviceInfo in arrDevices)
{
if (!IsLunNum && virtualMachineScsiDiskDeviceInfo.disk.canonicalName.ToLower().Contains(uniqueid.ToLower()))
{
diskfileBacking.deviceName = virtualMachineScsiDiskDeviceInfo.disk.canonicalName;
}
else if (IsLunNum && virtualMachineScsiDiskDeviceInfo.lunNumber == Convert.ToInt32(uniqueid))
{
diskfileBacking.deviceName = virtualMachineScsiDiskDeviceInfo.disk.canonicalName;
}
}
if(diskfileBacking.deviceName==null)
{
Log.GetSingleLogInst().InternalLogLine(DateTime.Now,
string.Format(
"Unable to find device name for {0}", uniqueid),MsGtype.Warnning);
return null;
}
int ckey = 0;
int unitNumber = 0;
VirtualDevice[] test = vmConfigInfo.hardware.device;
for (int k = 0; k < test.Length; k++)
{
if (test[k].deviceInfo.label.Equals("SCSI controller "+scsi_id.ToString()))
{
ckey = test[k].key;
break;
}
}
if (ckey == 0)
{
Log.GetSingleLogInst().InternalLogLine(DateTime.Now,
string.Format(
"Unable to find CONTROL Key for {0} Lun.", uniqueid), MsGtype.Warnning);
return null;
}
if (scsi_unit >= 7) //there is no slot 7 when ordering the disk device
scsi_unit++;
unitNumber = scsi_unit;
diskfileBacking.fileName = datastorePath + RDMfileName + ".vmdk";
diskfileBacking.diskMode = DiskMode.persistent.ToString(); // const will be changed by demand
diskfileBacking.datastore = new ManagedObjectReference();
diskfileBacking.diskMode = DiskMode.independent_persistent.ToString();
diskfileBacking.compatibilityMode = "physicalMode";
disk.unitNumber = unitNumber;
disk.backing = diskfileBacking;
// int size = GB * sizeGB;
// disk.capacityInKB = size;
disk.key = _keyOperation; //-1 + (-1 * scsi_unit);//unique key, for set seperate operations
_keyOperation--;
disk.controllerKeySpecified = true;
disk.unitNumberSpecified = true;
disk.controllerKey = ckey;
diskSpec.operation = VirtualDeviceConfigSpecOperation.add;
diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create;
diskSpec.device = disk;
diskSpec.fileOperationSpecified = true;
diskSpec.operationSpecified = true;
return diskSpec;