public VirtualDeviceConfigSpec createVirtualDisk(String volName,
                                                         int diskCtlrKey,
                                                         ManagedObjectReference datastoreRef,
                                                         int diskSizeMB)
        {
            String volumeName = getVolumeName(volName);
            VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();

            diskSpec.fileOperation          = VirtualDeviceConfigSpecFileOperation.create;
            diskSpec.fileOperationSpecified = true;
            diskSpec.operation          = VirtualDeviceConfigSpecOperation.add;
            diskSpec.operationSpecified = true;

            VirtualDisk disk = new VirtualDisk();
            VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo();

            diskfileBacking.fileName = volumeName;
            diskfileBacking.diskMode = "persistent";

            disk.key                    = 0;
            disk.controllerKey          = diskCtlrKey;
            disk.unitNumber             = 0;
            disk.backing                = diskfileBacking;
            disk.capacityInKB           = diskSizeMB;
            disk.controllerKeySpecified = true;
            disk.unitNumberSpecified    = true;


            diskSpec.device = disk;

            return(diskSpec);
        }
Exemplo n.º 2
0
        private static VirtualDeviceConfigSpec GetDisk(ref int key, string path, int controllerKey, int unitnumber)
        {
            VirtualDeviceConfigSpec devicespec = new VirtualDeviceConfigSpec();

            VirtualDiskFlatVer2BackingInfo diskbacking = new VirtualDiskFlatVer2BackingInfo();

            diskbacking.fileName = path;
            diskbacking.diskMode = "persistent";

            VirtualDisk disk = new VirtualDisk();

            disk.key                        = key--;
            disk.backing                    = diskbacking;
            disk.controllerKey              = controllerKey;
            disk.controllerKeySpecified     = true;
            disk.connectable                = new VirtualDeviceConnectInfo();
            disk.connectable.connected      = true;
            disk.connectable.startConnected = true;
            disk.unitNumber                 = unitnumber;
            disk.unitNumberSpecified        = true;

            devicespec                    = new VirtualDeviceConfigSpec();
            devicespec.device             = disk;
            devicespec.operation          = VirtualDeviceConfigSpecOperation.add;
            devicespec.operationSpecified = true;

            return(devicespec);
        }
Exemplo n.º 3
0
        public VirtualDeviceConfigSpec Disk(VMWare oVMWare, string _name, string _datastore, string _size, int _unit_number, int _controller_key, string _suffix)
        {
            // Get Datastores
            ManagedObjectReference datastoreRef = null;

            PropertySpec[] psDCarray = new PropertySpec[] { new PropertySpec() };
            psDCarray[0].all          = false;
            psDCarray[0].allSpecified = true;
            psDCarray[0].pathSet      = new string[] { "datastore" };
            psDCarray[0].type         = "Datacenter";
            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet           = psDCarray;
            spec.objectSet         = new ObjectSpec[] { new ObjectSpec() };
            spec.objectSet[0].obj  = oVMWare.GetDataCenter();
            spec.objectSet[0].skip = true;
            ObjectContent[]          ocary      = oVMWare.GetService().RetrieveProperties(oVMWare.GetSic().propertyCollector, new PropertyFilterSpec[] { spec });
            ManagedObjectReference[] datastores = null;
            foreach (ObjectContent oc in ocary)
            {
                datastores = (ManagedObjectReference[])oc.propSet[0].val;
            }
            if (datastores != null)
            {
                datastoreRef = datastores[0];
            }

            // Create disk
            VirtualDisk disk = new VirtualDisk();

            disk.key                    = 2000;
            disk.controllerKey          = _controller_key;
            disk.controllerKeySpecified = true;
            disk.unitNumber             = _unit_number;
            disk.unitNumberSpecified    = true;
            VirtualDiskFlatVer2BackingInfo diskBack = new VirtualDiskFlatVer2BackingInfo();

            diskBack.diskMode                 = "persistent";
            diskBack.fileName                 = "[" + _datastore + "] " + _name.ToLower() + "/" + _name.ToLower() + _suffix + ".vmdk";
            diskBack.datastore                = datastoreRef;
            diskBack.thinProvisioned          = false;
            diskBack.thinProvisionedSpecified = true;
            diskBack.writeThrough             = false;
            diskBack.writeThroughSpecified    = true;
            disk.backing      = diskBack;
            disk.capacityInKB = long.Parse(_size);
            VirtualDeviceConfigSpec dcs = new VirtualDeviceConfigSpec();

            dcs.device                 = disk;
            dcs.fileOperation          = VirtualDeviceConfigSpecFileOperation.create;
            dcs.fileOperationSpecified = true;
            dcs.operation              = VirtualDeviceConfigSpecOperation.add;
            dcs.operationSpecified     = true;
            return(dcs);
        }
Exemplo n.º 4
0
        public List <Disk> GetDisks(P2PBackup.Common.Node vm)
        {
            //Logger.Append("HUBRN", Severity.TRIVIA, "Searching for vm with uuid '"+vm.InternalId+"' disks...");
            List <Disk> vmRawDisks = new List <Disk>();

            //try{


            string[]        props     = new string[] { "config" };
            ObjectContent[] vmObjects = GetObjectProperties("VirtualMachine", props, GetVmMoRef(vm));

            ObjectContent          oc  = null;
            ManagedObjectReference mor = null;

            DynamicProperty[] pcary = null;
            DynamicProperty   pc    = null;

            for (int oci = 0; oci < vmObjects.Length; oci++)
            {
                oc    = vmObjects[oci];
                mor   = oc.obj;
                pcary = oc.propSet;

                if (mor.type != "VirtualMachine" || pcary == null)
                {
                    continue;
                }
                //Console.WriteLine("Id : " + mor.Value); //   VM MoRef

                for (int i = 0; i < pcary.Length; i++)
                {
                    pc = pcary[i];
                    if (pc.val is VirtualMachineConfigInfo)
                    {
                        VirtualMachineConfigInfo vmci = (VirtualMachineConfigInfo)pc.val;
                        //VmConfig = vmci;

                        /*Console.WriteLine("\t Version : " + vmci.version);
                         * Console.WriteLine("\t files.vmPathName : " + vmci.files.vmPathName);
                         * // changeTrackingEnabled
                         * Console.WriteLine("\t guestId : " + vmci.guestId);
                         * Console.WriteLine("\t disk devices : ");*/
                        foreach (VirtualDevice vDev in vmci.hardware.device)
                        {
                            //Console.WriteLine("\t\t"+vDev.deviceInfo.label+" "+vDev.deviceInfo.dynamicProperty.ToString());
                            //if (vDev.backing is
                            if (vDev.backing is VirtualDiskFlatVer2BackingInfo ||
                                vDev.backing is VirtualDiskFlatVer1BackingInfo ||
                                vDev.backing is VirtualDiskSparseVer2BackingInfo ||
                                vDev.backing is VirtualDiskRawDiskMappingVer1BackingInfo ||
                                vDev.backing is VirtualDiskRawDiskVer2BackingInfo
                                )
                            {
                                Disk rawDrive = new Disk();
                                VirtualDiskFlatVer2BackingInfo vDisk = (VirtualDiskFlatVer2BackingInfo)vDev.backing;

                                //rawDrive.BlockDevice = vDisk.fileName;
                                //rawDrive.DriveType = System.IO.DriveType.Fixed;
                                //rawDrive.DriveFormat = "VMFS";
                                rawDrive.SnapshotType = SnapshotType.VADP;
                                rawDrive.Path         = vDisk.fileName;                                 //.Substring(vDisk.fileName.IndexOf("]"+1));
                                if (LogEvent != null)
                                {
                                    LogEvent(this, new LogEventArgs(0, Severity.TRIVIA, "Found disk '" + vDev.deviceInfo.label + "' with path '" + rawDrive.Path + "'"));
                                }

                                // independant_persistent disks are not part of snapshots, thus unbackupable
                                if (vDisk.diskMode == "independent_persistent" ||
                                    vDisk.dynamicType != null

                                    )
                                {
                                    if (LogEvent != null)
                                    {
                                        LogEvent(this, new LogEventArgs(0, Severity.INFO, "The disk '" + vDisk.fileName + "' won't be accessible : mode=" + vDisk.diskMode + ", dynamic=" + vDisk.dynamicType));
                                    }
                                    rawDrive.Enabled = false;
                                }
                                else if (vDev.backing is VirtualDiskRawDiskMappingVer1BackingInfo)
                                {
                                    if (((VirtualDiskRawDiskMappingVer1BackingInfo)vDev.backing).compatibilityMode == "physical")
                                    {
                                        if (LogEvent != null)
                                        {
                                            LogEvent(this, new LogEventArgs(0, Severity.INFO, "The disk '" + vDisk.fileName + "' won't be accessible since it's a physical RDM"));
                                        }
                                        rawDrive.Enabled = false;
                                    }
                                }

                                else
                                {
                                    rawDrive.Enabled = true;
                                }

                                /*Console.WriteLine("\t\t  diskMode: " + vDisk.diskMode);
                                 * Console.WriteLine("\t\t  fileName: " + vDisk.fileName);
                                 * String dataStoreName = vDisk.fileName.Substring(vDisk.fileName.IndexOf("[")+1, vDisk.fileName.LastIndexOf("]") - 1);
                                 * //Console.WriteLine("\t\t  fileName: " + vDisk.dynamicProperty);
                                 * Console.WriteLine("\t\t  dynamic: " + vDisk.dynamicType);*/
                                /*if (vDisk.dynamicProperty == null) continue;
                                 * foreach (DynamicProperty dp in vDisk.dynamicProperty){
                                 *      Console.WriteLine("\t\t* " + dp.name + " : " + dp.val);
                                 * }*/
                                vmRawDisks.Add(rawDrive);
                            }
                        }
                    }
                }                         // end for
            }

            //}
            //catch(Exception ex){
            //Logger.Append("HUBRN", Severity.ERROR, "Could not get vm disks : "+ex.ToString());
            //}

            return(vmRawDisks);
        }
Exemplo n.º 5
0
        private List <VMwareDisk> Disks()
        {
            List <VMwareDisk> disks = new List <VMwareDisk>();

            VMWare  oVMWare = new VMWare(0, dsn);
            string  name    = "WSCLV223A";
            DataSet dsGuest = oVMWare.GetGuest(name);

            if (dsGuest.Tables[0].Rows.Count > 0)
            {
                DataRow        drGuest             = dsGuest.Tables[0].Rows[0];
                int            intDatastore        = Int32.Parse(drGuest["datastoreid"].ToString());
                int            intHost             = Int32.Parse(drGuest["hostid"].ToString());
                int            intCluster          = Int32.Parse(oVMWare.GetHost(intHost, "clusterid"));
                int            intFolder           = Int32.Parse(oVMWare.GetCluster(intCluster, "folderid"));
                int            intDataCenter       = Int32.Parse(oVMWare.GetFolder(intFolder, "datacenterid"));
                string         strDataCenter       = oVMWare.GetDatacenter(intDataCenter, "name");
                int            intVirtualCenter    = Int32.Parse(oVMWare.GetDatacenter(intDataCenter, "virtualcenterid"));
                string         strVirtualCenter    = oVMWare.GetVirtualCenter(intVirtualCenter, "name");
                string         strVirtualCenterURL = oVMWare.GetVirtualCenter(intVirtualCenter, "url");
                int            intVirtualCenterEnv = Int32.Parse(oVMWare.GetVirtualCenter(intVirtualCenter, "environment"));
                string         strConnect          = oVMWare.ConnectDEBUG(strVirtualCenterURL, intVirtualCenterEnv, strDataCenter);
                VimService     _service            = oVMWare.GetService();
                ServiceContent _sic = oVMWare.GetSic();
                try
                {
                    ManagedObjectReference oVM = oVMWare.GetVM(name);
                    if (oVM != null)
                    {
                        VirtualMachineConfigInfo vminfo  = (VirtualMachineConfigInfo)oVMWare.getObjectProperty(oVM, "config");
                        VirtualDevice[]          devices = vminfo.hardware.device;

                        List <VMwareController> controllers = new List <VMwareController>();

                        foreach (VirtualDevice device in devices)
                        {
                            // Try to cast to Controller
                            try
                            {
                                VirtualController controller = (VirtualController)device;
                                VMwareController  Controller = new VMwareController();
                                Controller.busNumber = controller.busNumber;
                                Controller.key       = controller.key;
                                controllers.Add(Controller);
                            }
                            catch { }
                            // Try to cast to Disk
                            try
                            {
                                VirtualDisk disk       = (VirtualDisk)device;
                                bool        boolShared = false;
                                string      strLunID   = null;
                                try
                                {
                                    VirtualDiskFlatVer2BackingInfo backingNonShared = (VirtualDiskFlatVer2BackingInfo)disk.backing;
                                    boolShared = false;
                                    strLunID   = "";
                                }
                                catch
                                {
                                    // Not flat disk, so don't worry about it
                                }
                                if (strLunID != null)
                                {
                                    VMwareDisk Disk = new VMwareDisk();
                                    Disk.controllerKey = disk.controllerKey;
                                    Disk.label         = disk.deviceInfo.label;
                                    Disk.capacityInKB  = disk.capacityInKB;
                                    Disk.unitNumber    = disk.unitNumber;
                                    Disk.lunUuid       = strLunID;
                                    Disk.Shared        = boolShared;
                                    disks.Add(Disk);
                                }
                            }
                            catch { }
                        }

                        Storage oStorage = new Storage(0, dsn);
                        // Match up disks with controllers for bus numbers
                        foreach (VMwareDisk disk in disks)
                        {
                            disk.capacityInKB = ((disk.capacityInKB / 1024) / 1024);    // convert KB to GB
                            foreach (VMwareController controller in controllers)
                            {
                                if (disk.controllerKey == controller.key)
                                {
                                    disk.busNumber = controller.busNumber;
                                    disk.Name      = disk.capacityInKB.ToString() + " GB - SCSI(" + disk.busNumber.ToString() + ":" + disk.unitNumber.ToString() + ") " + disk.label;

                                    oStorage.AddLunDisk(0, disk.busNumber, disk.unitNumber, disk.lunUuid);
                                    break;
                                }
                            }
                        }
                    }
                }
                catch { }
                finally
                {
                    if (_service != null)
                    {
                        _service.Abort();
                        if (_service.Container != null)
                        {
                            _service.Container.Dispose();
                        }
                        try
                        {
                            _service.Logout(_sic.sessionManager);
                        }
                        catch { }
                        _service.Dispose();
                        _service = null;
                        _sic     = null;
                    }
                }
            }

            return(disks);
        }
Exemplo n.º 6
0
        public VirtualDeviceConfigSpec createVirtualDisk(String volName,
                                                    int diskCtlrKey,
                                                    ManagedObjectReference datastoreRef,
                                                    int diskSizeMB)
        {
            String volumeName = getVolumeName(volName);
            VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();

            diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create;
            diskSpec.fileOperationSpecified = true;
            diskSpec.operation = VirtualDeviceConfigSpecOperation.add;
            diskSpec.operationSpecified = true;

            VirtualDisk disk = new VirtualDisk();
            VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo();

            diskfileBacking.fileName = volumeName;
            diskfileBacking.diskMode = "persistent";

            disk.key = 0;
            disk.controllerKey = diskCtlrKey;
            disk.unitNumber = 0;
            disk.backing = diskfileBacking;
            disk.capacityInKB = diskSizeMB;
            disk.controllerKeySpecified = true;
            disk.unitNumberSpecified = true;


            diskSpec.device = disk;

            return diskSpec;
        }
Exemplo n.º 7
0
   private VirtualDeviceConfigSpec getDiskDeviceConfigSpec() {
      String ops = cb.get_option("operation");
      VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();      
      VirtualMachineConfigInfo vmConfigInfo 
         = (VirtualMachineConfigInfo)cb.getServiceUtil().GetDynamicProperty(
             _virtualMachine,"config");                           
      
      if(ops.Equals("add")) {                             
         VirtualDisk disk =  new VirtualDisk();
         VirtualDiskFlatVer2BackingInfo diskfileBacking 
            = new VirtualDiskFlatVer2BackingInfo();    
         String dsName 
            = getDataStoreName(int.Parse(cb.get_option("disksize")));         
         
         int ckey = -1;
         int unitNumber = 0;
     
         VirtualDevice [] test = vmConfigInfo.hardware.device;
         for(int k=0;k<test.Length;k++){
            if(test[k].deviceInfo.label.Equals(
               "SCSI Controller 0")){
               ckey = test[k].key;                                
            }
         }
         
             
         

         unitNumber = test.Length + 1;                
         String fileName = "["+dsName+"] "+ cb.get_option("vmname") 
                         + "/"+cb.get_option("value")+".vmdk";
         
         diskfileBacking.fileName=fileName;
         diskfileBacking.diskMode=cb.get_option("diskmode");

         disk.controllerKey = ckey;
         disk.unitNumber=unitNumber;
         disk.controllerKeySpecified = true;
         disk.unitNumberSpecified = true;
         disk.backing= diskfileBacking;
         int size = 1024 * (int.Parse(cb.get_option("disksize")));
         disk.capacityInKB= size;
         disk.key= 0;
         
         diskSpec.operation=VirtualDeviceConfigSpecOperation.add;           
         diskSpec.fileOperation=VirtualDeviceConfigSpecFileOperation.create;
         diskSpec.fileOperationSpecified = true;
         diskSpec.operationSpecified = true;
         diskSpec.device=disk;                 
      }
      else if(ops.Equals("remove")) {                             
         VirtualDisk disk =  null;
         VirtualDiskFlatVer2BackingInfo diskfileBacking 
            = new VirtualDiskFlatVer2BackingInfo();

         VirtualDevice [] test = vmConfigInfo.hardware.device;
         for(int k=0;k<test.Length;k++){
            if(test[k].deviceInfo.label.Equals(
                    cb.get_option("value"))){                             
               disk = (VirtualDisk)test[k];
            }
         }             
         if(disk != null) {
            diskSpec.operation=VirtualDeviceConfigSpecOperation.remove;
            diskSpec.operationSpecified = true;
            diskSpec.fileOperation=VirtualDeviceConfigSpecFileOperation.destroy;
            diskSpec.fileOperationSpecified = true;
            diskSpec.device=disk;                 
         }
         else {
            Console.WriteLine("No device found " + cb.get_option("value"));
            return null;
         }
      }
      return diskSpec;
   }
Exemplo n.º 8
0
        private VirtualDeviceConfigSpec getDiskDeviceConfigSpec()
        {
            String ops = cb.get_option("operation");
            VirtualDeviceConfigSpec  diskSpec = new VirtualDeviceConfigSpec();
            VirtualMachineConfigInfo vmConfigInfo
                = (VirtualMachineConfigInfo)cb.getServiceUtil().GetDynamicProperty(
                      _virtualMachine, "config");

            if (ops.Equals("add"))
            {
                VirtualDisk disk = new VirtualDisk();
                VirtualDiskFlatVer2BackingInfo diskfileBacking
                    = new VirtualDiskFlatVer2BackingInfo();
                String dsName
                    = getDataStoreName(int.Parse(cb.get_option("disksize")));

                int ckey       = -1;
                int unitNumber = 0;

                VirtualDevice [] test = vmConfigInfo.hardware.device;
                for (int k = 0; k < test.Length; k++)
                {
                    if (test[k].deviceInfo.label.Equals(
                            "SCSI Controller 0"))
                    {
                        ckey = test[k].key;
                    }
                }



                unitNumber = test.Length + 1;
                String fileName = "[" + dsName + "] " + cb.get_option("vmname")
                                  + "/" + cb.get_option("value") + ".vmdk";

                diskfileBacking.fileName = fileName;
                diskfileBacking.diskMode = cb.get_option("diskmode");

                disk.controllerKey          = ckey;
                disk.unitNumber             = unitNumber;
                disk.controllerKeySpecified = true;
                disk.unitNumberSpecified    = true;
                disk.backing = diskfileBacking;
                int size = 1024 * (int.Parse(cb.get_option("disksize")));
                disk.capacityInKB = size;
                disk.key          = 0;

                diskSpec.operation              = VirtualDeviceConfigSpecOperation.add;
                diskSpec.fileOperation          = VirtualDeviceConfigSpecFileOperation.create;
                diskSpec.fileOperationSpecified = true;
                diskSpec.operationSpecified     = true;
                diskSpec.device = disk;
            }
            else if (ops.Equals("remove"))
            {
                VirtualDisk disk = null;
                VirtualDiskFlatVer2BackingInfo diskfileBacking
                    = new VirtualDiskFlatVer2BackingInfo();

                VirtualDevice [] test = vmConfigInfo.hardware.device;
                for (int k = 0; k < test.Length; k++)
                {
                    if (test[k].deviceInfo.label.Equals(
                            cb.get_option("value")))
                    {
                        disk = (VirtualDisk)test[k];
                    }
                }
                if (disk != null)
                {
                    diskSpec.operation              = VirtualDeviceConfigSpecOperation.remove;
                    diskSpec.operationSpecified     = true;
                    diskSpec.fileOperation          = VirtualDeviceConfigSpecFileOperation.destroy;
                    diskSpec.fileOperationSpecified = true;
                    diskSpec.device = disk;
                }
                else
                {
                    Console.WriteLine("No device found " + cb.get_option("value"));
                    return(null);
                }
            }
            return(diskSpec);
        }