Exemple #1
0
        public VirtualDeviceConfigSpec Controller(bool Is2012)
        {
            VirtualSCSIController scsi = new VirtualSCSIController();

            if (Is2012)
            {
                scsi = new VirtualLsiLogicSASController();
            }
            else
            {
                scsi = new VirtualLsiLogicController();
            }
            VirtualDeviceConnectInfo ci = new VirtualDeviceConnectInfo();

            ci.startConnected                = false;
            scsi.key                         = 1000;
            scsi.controllerKey               = 100;
            scsi.controllerKeySpecified      = true;
            scsi.busNumber                   = 0;
            scsi.hotAddRemove                = true;
            scsi.hotAddRemoveSpecified       = true;
            scsi.scsiCtlrUnitNumber          = 7;
            scsi.scsiCtlrUnitNumberSpecified = true;
            scsi.sharedBus                   = VirtualSCSISharing.noSharing;
            scsi.unitNumber                  = 2;
            scsi.unitNumberSpecified         = true;
            scsi.connectable                 = ci;
            VirtualDeviceConfigSpec dcs = new VirtualDeviceConfigSpec();

            dcs.device             = scsi;
            dcs.operation          = VirtualDeviceConfigSpecOperation.add;
            dcs.operationSpecified = true;
            return(dcs);
        }
Exemple #2
0
        public Tuple <int, int> GetControllerPlacement(ManagedObjectReference vm)
        {
            var obj = svcUtil.GetObjectProperties(svcConn._sic.propertyCollector, vm, new string[] { "config.hardware.device" });

            VirtualDevice[] devices = (VirtualDevice[])obj[0].propSet[0].val;

            Dictionary <int, VirtualDevice> devMap = new Dictionary <int, VirtualDevice>();

            foreach (VirtualDevice device in devices)
            {
                devMap.Add(device.key, device);
            }

            foreach (VirtualDevice device in devices)
            {
                if (device is VirtualSCSIController)
                {
                    int[] slots = Enumerable.Repeat(0, 16).ToArray(); //init array with 0, has 16 places
                    slots[7] = 1;                                     //SCSI reserved number.
                    VirtualSCSIController c = (VirtualSCSIController)device;
                    foreach (var deviceKey in c.device)
                    {
                        var unitNumber = devMap[deviceKey].unitNumber;
                        slots[unitNumber] = 1;
                    }

                    for (int i = 0; i < slots.Count(); i++)
                    {
                        if (slots[i] != 1)
                        {
                            return(new Tuple <int, int>(c.key, i));
                        }
                    }
                }
            }

            throw new Exception("Could not find a free SCSI Controller slot in VM");
        }