Quantcast
Channel: VMware Communities: Message List - vSphere Management SDK
Viewing all articles
Browse latest Browse all 2052

Add RDM device 0 error

$
0
0

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;

Viewing all articles
Browse latest Browse all 2052

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>