private VirtualDeviceConfigSpec getCDDeviceConfigSpec()
        {
            String ops = cb.get_option("operation");
            VirtualDeviceConfigSpec  cdSpec = new VirtualDeviceConfigSpec();
            VirtualMachineConfigInfo vmConfigInfo
                = (VirtualMachineConfigInfo)cb.getServiceUtil().GetDynamicProperty(
                      _virtualMachine, "config");

            if (ops.Equals("add"))
            {
                cdSpec.operation          = VirtualDeviceConfigSpecOperation.add;
                cdSpec.operationSpecified = true;
                VirtualCdrom cdrom = new VirtualCdrom();

                VirtualCdromIsoBackingInfo cdDeviceBacking
                    = new  VirtualCdromIsoBackingInfo();
                DatastoreSummary dsum = getDataStoreSummary();
                cdDeviceBacking.datastore = dsum.datastore;
                cdDeviceBacking.fileName  = "[" + dsum.name + "] " + cb.get_option("value") + ".iso";

                VirtualDevice vd = getIDEController();
                cdrom.backing                = cdDeviceBacking;
                cdrom.controllerKey          = vd.key;
                cdrom.controllerKeySpecified = true;
                cdrom.unitNumber             = -1;
                cdrom.unitNumberSpecified    = true;
                cdrom.key = -100;

                cdSpec.device = cdrom;

                return(cdSpec);
            }
            else
            {
                VirtualCdrom     cdRemove = null;
                VirtualDevice [] test     = vmConfigInfo.hardware.device;
                cdSpec.operation          = VirtualDeviceConfigSpecOperation.remove;
                cdSpec.operationSpecified = true;
                for (int k = 0; k < test.Length; k++)
                {
                    if (test[k].deviceInfo.label.Equals(
                            cb.get_option("value")))
                    {
                        cdRemove = (VirtualCdrom)test[k];
                    }
                }
                if (cdRemove != null)
                {
                    cdSpec.device = cdRemove;
                }
                else
                {
                    Console.WriteLine("No device available " + cb.get_option("value"));
                    return(null);
                }
            }
            return(cdSpec);
        }
        /// <summary>
        /// Does the custom validation.
        /// </summary>
        /// <returns>Returns the boolean type true or false.</returns>
        private Boolean customValidation()
        {
            Boolean validate       = false;
            String  datacenterName = getDataCenter();
            String  datastoreName  = getDataStore();

            if (datacenterName.Length != 0 && datacenterName != null &&
                datastoreName.Length != 0 && datastoreName != null)
            {
                ManagedObjectReference dcmor
                    = cb.getServiceUtil().GetDecendentMoRef(null, "Datacenter", datacenterName);
                if (dcmor != null)
                {
                    ManagedObjectReference [] datastores
                        = (ManagedObjectReference [])
                          cb.getServiceUtil().GetDynamicProperty(dcmor, "datastore");
                    if (datastores.Length != 0)
                    {
                        for (int i = 0; i < datastores.Length; i++)
                        {
                            DatastoreSummary dsSummary
                                = (DatastoreSummary)
                                  cb.getServiceUtil().GetDynamicProperty(datastores[i],
                                                                         "summary");
                            if (dsSummary.name.Equals(datastoreName))
                            {
                                i        = datastores.Length + 1;
                                validate = true;
                            }
                        }
                        if (!validate)
                        {
                            Console.WriteLine("Specified Datastore is not"
                                              + " found in specified Datacenter");
                        }
                        return(validate);
                    }
                    else
                    {
                        Console.WriteLine("No Datastore found in specified Datacenter");
                        return(validate);
                    }
                }
                else
                {
                    Console.WriteLine("Specified Datacenter Not Found");
                    return(validate);
                }
            }
            return(validate);
        }
        private String getDataStoreName(int size)
        {
            String dsName = null;

            ManagedObjectReference [] datastores
                = (ManagedObjectReference [])cb.getServiceUtil().GetDynamicProperty(
                      _virtualMachine, "datastore");
            for (int i = 0; i < datastores.Length; i++)
            {
                DatastoreSummary ds
                    = (DatastoreSummary)cb.getServiceUtil().GetDynamicProperty(datastores[i],
                                                                               "summary");
                if (ds.freeSpace > size)
                {
                    dsName = ds.name;
                    i      = datastores.Length + 1;
                }
            }
            return(dsName);
        }
        private DatastoreSummary getDataStoreSummary()
        {
            DatastoreSummary          dsSum = null;
            VirtualMachineRuntimeInfo vmRuntimeInfo
                = (VirtualMachineRuntimeInfo)cb.getServiceUtil().GetDynamicProperty(
                      _virtualMachine, "runtime");
            ManagedObjectReference envBrowser
                = (ManagedObjectReference)cb.getServiceUtil().GetDynamicProperty(
                      _virtualMachine, "environmentBrowser");
            ManagedObjectReference hmor = vmRuntimeInfo.host;

            if (hmor != null)
            {
                ConfigTarget configTarget
                    = cb.getConnection()._service.QueryConfigTarget(envBrowser, null);
                if (configTarget.datastore != null)
                {
                    for (int i = 0; i < configTarget.datastore.Length; i++)
                    {
                        VirtualMachineDatastoreInfo vdsInfo   = configTarget.datastore[i];
                        DatastoreSummary            dsSummary = vdsInfo.datastore;
                        if (dsSummary.accessible)
                        {
                            dsSum = dsSummary;
                            break;
                        }
                    }
                }
                return(dsSum);
            }
            else
            {
                Console.WriteLine("No Datastore found");
                return(null);
            }
        }
Beispiel #5
0
        public VirtualMachineConfigSpec createVmConfigSpec(String vmName,

                                                           String datastoreName,

                                                           int diskSizeMB,

                                                           ManagedObjectReference computeResMor,

                                                           ManagedObjectReference hostMor)

        {
            ConfigTarget configTarget = getConfigTargetForHost(computeResMor, hostMor);

            VirtualDevice[] defaultDevices = getDefaultDevices(computeResMor, hostMor);

            VirtualMachineConfigSpec configSpec = new VirtualMachineConfigSpec();



            String networkName = null;

            if (configTarget.network != null)

            {
                for (int i = 0; i < configTarget.network.Length; i++)

                {
                    VirtualMachineNetworkInfo netInfo = configTarget.network[i];

                    NetworkSummary netSummary = netInfo.network;

                    if (netSummary.accessible)

                    {
                        networkName = netSummary.name;

                        break;
                    }
                }
            }

            ManagedObjectReference datastoreRef = null;

            if (datastoreName != null)

            {
                Boolean flag = false;

                for (int i = 0; i < configTarget.datastore.Length; i++)

                {
                    VirtualMachineDatastoreInfo vdsInfo = configTarget.datastore[i];

                    DatastoreSummary dsSummary = vdsInfo.datastore;

                    if (dsSummary.name.Equals(datastoreName))

                    {
                        flag = true;

                        if (dsSummary.accessible)

                        {
                            datastoreName = dsSummary.name;

                            datastoreRef = dsSummary.datastore;
                        }

                        else

                        {
                            throw new Exception("Specified Datastore is not accessible");
                        }

                        break;
                    }
                }

                if (!flag)

                {
                    throw new Exception("Specified Datastore is not Found");
                }
            }

            else

            {
                Boolean flag = false;

                for (int i = 0; i < configTarget.datastore.Length; i++)

                {
                    VirtualMachineDatastoreInfo vdsInfo = configTarget.datastore[i];

                    DatastoreSummary dsSummary = vdsInfo.datastore;

                    if (dsSummary.accessible)

                    {
                        datastoreName = dsSummary.name;

                        datastoreRef = dsSummary.datastore;

                        flag = true;

                        break;
                    }
                }

                if (!flag)

                {
                    throw new Exception("No Datastore found on host");
                }
            }

            String datastoreVolume = getVolumeName(datastoreName);

            VirtualMachineFileInfo vmfi = new VirtualMachineFileInfo();

            vmfi.vmPathName = datastoreVolume;

            configSpec.files = vmfi;

            // Add a scsi controller

            int diskCtlrKey = 1;

            VirtualDeviceConfigSpec scsiCtrlSpec = new VirtualDeviceConfigSpec();

            scsiCtrlSpec.operation = VirtualDeviceConfigSpecOperation.add;

            scsiCtrlSpec.operationSpecified = true;

            VirtualLsiLogicController scsiCtrl = new VirtualLsiLogicController();

            scsiCtrl.busNumber = 0;

            scsiCtrlSpec.device = scsiCtrl;

            scsiCtrl.key = diskCtlrKey;

            scsiCtrl.sharedBus = VirtualSCSISharing.noSharing;

            String ctlrType = scsiCtrl.GetType().Name;



            // Find the IDE controller

            VirtualDevice ideCtlr = null;

            for (int di = 0; di < defaultDevices.Length; di++)

            {
                if (defaultDevices[di].GetType().Name.Equals("VirtualIDEController"))

                {
                    ideCtlr = defaultDevices[di];

                    break;
                }
            }



            // Add a floppy

            VirtualDeviceConfigSpec floppySpec = new VirtualDeviceConfigSpec();

            floppySpec.operation = VirtualDeviceConfigSpecOperation.add;

            floppySpec.operationSpecified = true;

            VirtualFloppy floppy = new VirtualFloppy();

            VirtualFloppyDeviceBackingInfo flpBacking = new VirtualFloppyDeviceBackingInfo();

            flpBacking.deviceName = "/dev/fd0";

            floppy.backing = flpBacking;

            floppy.key = 3;

            floppySpec.device = floppy;



            // Add a cdrom based on a physical device

            VirtualDeviceConfigSpec cdSpec = null;



            if (ideCtlr != null)

            {
                cdSpec = new VirtualDeviceConfigSpec();

                cdSpec.operation = VirtualDeviceConfigSpecOperation.add;

                cdSpec.operationSpecified = true;

                VirtualCdrom cdrom = new VirtualCdrom();

                VirtualCdromIsoBackingInfo cdDeviceBacking = new VirtualCdromIsoBackingInfo();

                cdDeviceBacking.datastore = datastoreRef;

                cdDeviceBacking.fileName = datastoreVolume + "testcd.iso";

                cdrom.backing = cdDeviceBacking;

                cdrom.key = 20;

                cdrom.controllerKey = ideCtlr.key;

                cdrom.controllerKeySpecified = true;

                cdrom.unitNumberSpecified = true;

                cdrom.unitNumber = 0;

                cdSpec.device = cdrom;
            }



            // Create a new disk - file based - for the vm

            VirtualDeviceConfigSpec diskSpec = null;

            diskSpec = createVirtualDisk(datastoreName, diskCtlrKey, datastoreRef, diskSizeMB);



            // Add a NIC. the network Name must be set as the device name to create the NIC.

            VirtualDeviceConfigSpec nicSpec = new VirtualDeviceConfigSpec();

            if (networkName != null)

            {
                nicSpec.operation = VirtualDeviceConfigSpecOperation.add;

                nicSpec.operationSpecified = true;

                VirtualEthernetCard nic = new VirtualPCNet32();

                VirtualEthernetCardNetworkBackingInfo nicBacking = new VirtualEthernetCardNetworkBackingInfo();

                nicBacking.deviceName = networkName;

                nic.addressType = "generated";

                nic.backing = nicBacking;

                nic.key = 4;

                nicSpec.device = nic;
            }



            var deviceConfigSpec = new List <VirtualDeviceConfigSpec>();

            deviceConfigSpec.Add(scsiCtrlSpec);

            deviceConfigSpec.Add(floppySpec);

            deviceConfigSpec.Add(diskSpec);

            deviceConfigSpec.Add(nicSpec);



            if (ideCtlr != null)

            {
                deviceConfigSpec.Add(cdSpec);
            }



            configSpec.deviceChange = deviceConfigSpec.ToArray();

            return(configSpec);
        }
Beispiel #6
0
        public void GetVirtualDiskFilesForHost()
        {
            try
            {
                _service = ecb.getConnection().Service;
                _sic     = ecb.getConnection().ServiceContent;

                ArrayList supportedVersions = VersionUtil.getSupportedVersions(ecb.get_option("url"));
                ManagedObjectReference hmor = _service.FindByIp(ecb.getConnection().ServiceContent.searchIndex, null, ecb.get_option("hostip"), false);
                if (hmor == null)
                {
                    Console.WriteLine("Unable to find host with IP : " + ecb.get_option("hostip") + " in Inventory");
                }
                else
                {
                    if (VersionUtil.isApiVersionSupported(supportedVersions, "2.5"))
                    {
                        Object[] datastores = getProperties(hmor, new String[] { "datastore" });
                        Console.WriteLine("Searching The Datastores");
                        ManagedObjectReference[] dstoreArr = datastores[0] as ManagedObjectReference[];
                        foreach (ManagedObjectReference dstore in dstoreArr)
                        {
                            ManagedObjectReference dsBrowser =
                                ecb.getServiceUtil().GetMoRefProp(dstore, "browser");
                            ObjectContent[]  objary = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, dstore, new String[] { "summary" });
                            DatastoreSummary ds     = objary[0].propSet[0].val as DatastoreSummary;
                            String           dsName = ds.name;
                            Console.WriteLine("");
                            Console.WriteLine("Searching The Datastore " + dsName);
                            VmDiskFileQueryFilter vdiskFilter = new VmDiskFileQueryFilter();
                            String[] type = { "VirtualIDEController" };
                            vdiskFilter.controllerType = type;
                            Boolean flag = VersionUtil.isApiVersionSupported(supportedVersions, "4.0");
                            if (flag)
                            {
                                vdiskFilter.thin = true;
                            }
                            VmDiskFileQuery fQuery = new VmDiskFileQuery();
                            fQuery.filter = vdiskFilter;

                            HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec();

                            FileQuery[] arr = { fQuery };
                            searchSpec.query = arr;
                            //searchSpec.setMatchPattern(matchPattern);

                            ManagedObjectReference taskmor = _service.SearchDatastoreSubFolders_Task(dsBrowser, "[" + dsName + "]", searchSpec);

                            object[] result = ecb.getServiceUtil().WaitForValues(taskmor, new string[] { "info.state", "info.result" },
                                                                                 new string[] { "state" }, // info has a property - state for state of the task
                                                                                 new object[][] { new object[] { TaskInfoState.success, TaskInfoState.error } }
                                                                                 );

                            // Wait till the task completes.
                            if (result[0].Equals(TaskInfoState.success))
                            {
                                ObjectContent[] objTaskInfo = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, taskmor, new String[] { "info" });
                                TaskInfo        tInfo       = (TaskInfo)objTaskInfo[0].propSet[0].val;;
                                HostDatastoreBrowserSearchResults[] searchResult = (HostDatastoreBrowserSearchResults[])tInfo.result;

                                int len = searchResult.Length;
                                for (int j = 0; j < len; j++)
                                {
                                    HostDatastoreBrowserSearchResults sres
                                        = searchResult[j];
                                    FileInfo[] fileArray = sres.file;
                                    if (fileArray != null)
                                    {
                                        for (int z = 0; z < fileArray.Length; z++)
                                        {
                                            Console.WriteLine("Virtual Disks Files " + fileArray[z].path);
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine("No Thin-provisioned Virtual Disks Files found");
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine("SearchDatastoreSubFolders Task couldn't be completed successfully");
                            }
                        }
                    }
                    else
                    {
                        Object[] datastores = getProperties(hmor, new String[] { "datastore" });
                        Console.WriteLine("Searching The Datastores");
                        ManagedObjectReference[] dstoreArr = datastores[0] as ManagedObjectReference[];
                        foreach (ManagedObjectReference dstore in dstoreArr)
                        {
                            ManagedObjectReference dsBrowser = (ManagedObjectReference)
                                                               ecb.getServiceUtil().GetMoRefProp(dstore, "browser");
                            ObjectContent[]  objary = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, dstore, new String[] { "summary" });
                            DatastoreSummary ds     = objary[0].propSet[0].val as DatastoreSummary;

                            String dsName = ds.name;
                            Console.WriteLine("");
                            Console.WriteLine("Searching The Datastore " + dsName);
                            HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec();
                            ManagedObjectReference         taskmor    = _service.SearchDatastoreSubFolders_Task(dsBrowser, "[" + dsName + "]", searchSpec);
                            object[] result = ecb.getServiceUtil().WaitForValues(taskmor, new string[] { "info.state", "info.result" },
                                                                                 new string[] { "state" }, // info has a property - state for state of the task
                                                                                 new object[][] { new object[] { TaskInfoState.success, TaskInfoState.error } }
                                                                                 );
                            // Wait till the task completes.
                            if (result[0].Equals(TaskInfoState.success))
                            {
                                ObjectContent[] objTaskInfo = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, taskmor, new String[] { "info" });
                                TaskInfo        tInfo       = (TaskInfo)objTaskInfo[0].propSet[0].val;;
                                HostDatastoreBrowserSearchResults[] searchResult = (HostDatastoreBrowserSearchResults[])tInfo.result;
                                int len = searchResult.Length;
                                for (int j = 0; j < len; j++)
                                {
                                    HostDatastoreBrowserSearchResults sres
                                        = searchResult[j];
                                    FileInfo[] fileArray = sres.file;
                                    for (int z = 0; z < fileArray.Length; z++)
                                    {
                                        Console.WriteLine("Virtual Disks Files " + fileArray[z].path);
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine("SearchDatastoreSubFolders Task couldn't be completed successfully");
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ecb.log.LogLine("VirtualDiskFiles : Failed Connect");
                throw e;
            }
            finally
            {
                ecb.log.LogLine("Ended VirtualDiskFiles");
                ecb.log.Close();
            }
        }