コード例 #1
0
        /// <summary>
        /// Retrieves a set of vSphere managed objects using the specified <see cref="VSphereSelectionSpec" /> set and <see cref="VSpherePropertySpec" /> set.
        /// </summary>
        /// <param name="startingObject">The <see cref="VSphereManagedObject" /> from which the query should start.</param>
        /// <param name="selectionSpecs">The collection of <see cref="VSphereSelectionSpec" /> that specifies which objects will be queried.</param>
        /// <param name="propertySpecs">The collection of <see cref="VSpherePropertySpec" /> that specifies which object properties will be retrieved.</param>
        /// <returns>A collection of <see cref="VSphereManagedObject" />.</returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="startingObject" /> is null.
        /// <para>or</para>
        /// <paramref name="selectionSpecs" /> is null.
        /// <para>or</para>
        /// <paramref name="propertySpecs" /> is null.
        /// </exception>
        public IEnumerable <VSphereManagedObject> RetrieveObjects(VSphereManagedObject startingObject, IEnumerable <VSphereSelectionSpec> selectionSpecs, IEnumerable <VSpherePropertySpec> propertySpecs)
        {
            if (startingObject == null)
            {
                throw new ArgumentNullException(nameof(startingObject));
            }

            if (selectionSpecs == null)
            {
                throw new ArgumentNullException(nameof(selectionSpecs));
            }

            if (propertySpecs == null)
            {
                throw new ArgumentNullException(nameof(propertySpecs));
            }

            ObjectSpec objectSpec = new ObjectSpec
            {
                obj       = startingObject.ManagedObjectReference,
                selectSet = selectionSpecs.Select(n => n.SelectionSpec).ToArray()
            };

            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec
            {
                objectSet = new[] { objectSpec },
                propSet   = propertySpecs.Select(n => n.PropertySpec).ToArray()
            };

            var result = _vimService.RetrieveProperties(_serviceContent.propertyCollector, new[] { propertyFilterSpec });

            return(result.Select(n => new VSphereManagedObject(n)));
        }
コード例 #2
0
        /*
         * getProperties --
         *
         * Retrieves the specified set of properties for the given managed object
         * reference into an array of result objects (returned in the same oder
         * as the property list).
         */
        public static Object[] getProperties(ManagedObjectReference moRef, String[] properties)
        {
            // PropertySpec specifies what properties to
            // retrieve and from type of Managed Object
            PropertySpec pSpec = new PropertySpec();

            pSpec.type    = moRef.type;
            pSpec.pathSet = properties;

            // ObjectSpec specifies the starting object and
            // any TraversalSpecs used to specify other objects
            // for consideration
            ObjectSpec oSpec = new ObjectSpec();

            oSpec.obj = moRef;

            // PropertyFilterSpec is used to hold the ObjectSpec and
            // PropertySpec for the call
            PropertyFilterSpec pfSpec = new PropertyFilterSpec();

            pfSpec.propSet   = new PropertySpec[] { pSpec };
            pfSpec.objectSet = new ObjectSpec[] { oSpec };

            // retrieveProperties() returns the properties
            // selected from the PropertyFilterSpec


            ObjectContent[] ocs = new ObjectContent[20];
            ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec });

            // Return value, one object for each property specified
            Object[] ret = new Object[properties.Length];

            if (ocs != null)
            {
                for (int i = 0; i < ocs.Length; ++i)
                {
                    ObjectContent     oc  = ocs[i];
                    DynamicProperty[] dps = oc.propSet;
                    if (dps != null)
                    {
                        for (int j = 0; j < dps.Length; ++j)
                        {
                            DynamicProperty dp = dps[j];
                            // find property path index
                            for (int p = 0; p < ret.Length; ++p)
                            {
                                if (properties[p].Equals(dp.name))
                                {
                                    ret[p] = dp.val;
                                }
                            }
                        }
                    }
                }
            }
            return(ret);
        }
コード例 #3
0
        public ManagedObjectReference GetVMs(string _name, ManagedObjectReference[] vmList, bool first)
        {
            ManagedObjectReference vmRef = null;

            for (int ii = 0; ii < vmList.Length; ii++)
            {
                if (boolVMFound == true)
                {
                    break;
                }
                if (vmList[ii].type == "VirtualMachine")
                {
                    //Object[] vmProps = oVMware.getProperties(vmList[ii], new String[] { "name", "config.name", "config.template" });
                    //if (((String)vmProps[0]).ToUpper() == _name.ToUpper())
                    //if (oVMware.getObjectProperty(vmList[ii], "name").ToString().ToUpper() == _name.ToUpper())
                    PropertySpec pSpec = new PropertySpec();
                    pSpec.type    = vmList[ii].type;
                    pSpec.pathSet = new String[] { "name" };
                    ObjectSpec oSpec = new ObjectSpec();
                    oSpec.obj = vmList[ii];
                    PropertyFilterSpec pfSpec = new PropertyFilterSpec();
                    pfSpec.propSet   = new PropertySpec[] { pSpec };
                    pfSpec.objectSet = new ObjectSpec[] { oSpec };

                    VimService      _service = oVMware.GetService();
                    ServiceContent  _sic     = oVMware.GetSic();
                    ObjectContent[] ocs      = new ObjectContent[20];
                    ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec });
                    string strName = "";
                    if (ocs.Length == 1 && ocs[0].propSet.Length == 1)
                    {
                        strName = ocs[0].propSet[0].val.ToString();
                    }
                    if (strName.ToUpper() == _name.ToUpper())
                    {
                        boolVMFound = true;
                        vmRef       = vmList[ii];
                        //UpdateGuestVIM(_name, vmRef.Value);
                        break;
                    }
                }
                //else if (vmList[ii].type == "Folder")
                //{
                //    if (chkGroups.Checked || (String.IsNullOrEmpty(txtGroup.Text) == false && oVMware.getObjectProperty(vmList[ii], "name").ToString().ToUpper() == txtGroup.Text.ToUpper()))
                //    {
                //        vmRef = GetVMs(_name, (ManagedObjectReference[])oVMware.getObjectProperty(vmList[ii], "childEntity"), false);
                //        if (boolVMFound == true)
                //            break;
                //    }
                //}
            }
            return(vmRef);
        }
コード例 #4
0
        public Object getProperties(ManagedObjectReference moRef, String propertyName)
        {
            PropertySpec pSpec = new PropertySpec();

            pSpec.type    = moRef.type;
            pSpec.pathSet = new String[] { propertyName };

            ObjectSpec oSpec = new ObjectSpec();

            oSpec.obj = moRef;

            PropertyFilterSpec pfSpec = new PropertyFilterSpec();

            pfSpec.propSet   = new PropertySpec[] { pSpec };
            pfSpec.objectSet = new ObjectSpec[] { oSpec };
            ObjectContent[] ocs = new ObjectContent[20];

            VimService     _service = oVMware.GetService();
            ServiceContent _sic     = oVMware.GetSic();

            ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec });

            Object ret = new Object();

            for (int ii = 0; ocs != null && ii < ocs.Length; ++ii)
            {
                ObjectContent     oc  = ocs[ii];
                DynamicProperty[] dps = oc.propSet;
                for (int jj = 0; dps != null && jj < dps.Length; ++jj)
                {
                    DynamicProperty dp = dps[jj];
                    if (propertyName.Equals(dp.name))
                    {
                        ret = dp.val;
                        break;
                    }
                }
                if (ret != null)
                {
                    break;
                }
            }
            return(ret);
        }
コード例 #5
0
        private Object[] getProperties(VimService service,
                                       ManagedObjectReference moRef,
                                       String[] properties)
        {
            PropertySpec pSpec = new PropertySpec();

            pSpec.type    = moRef.type;
            pSpec.pathSet = properties;
            ObjectSpec oSpec = new ObjectSpec();

            oSpec.obj = moRef;
            PropertyFilterSpec pfSpec = new PropertyFilterSpec();

            pfSpec.propSet   = (new PropertySpec[] { pSpec });
            pfSpec.objectSet = (new ObjectSpec[] { oSpec });
            ObjectContent[] ocs
                = service.RetrieveProperties(sic.propertyCollector,
                                             new PropertyFilterSpec[] { pfSpec });
            Object[] ret = new Object[properties.Length];
            if (ocs != null)
            {
                for (int i = 0; i < ocs.Length; ++i)
                {
                    ObjectContent     oc  = ocs[i];
                    DynamicProperty[] dps = oc.propSet;
                    if (dps != null)
                    {
                        for (int j = 0; j < dps.Length; ++j)
                        {
                            DynamicProperty dp = dps[j];
                            for (int p = 0; p < ret.Length; ++p)
                            {
                                if (properties[p].Equals(dp.name))
                                {
                                    ret[p] = dp.val;
                                }
                            }
                        }
                    }
                }
            }
            return(ret);
        }
コード例 #6
0
        private ObjectContent[] GetObjectProperties(string objectType, string[] properties, ManagedObjectReference o)
        {
            // Create a Filter Spec to Retrieve Contents for...
            TraversalSpec rpToVm = new TraversalSpec();

            rpToVm.name = "rpToVm";
            rpToVm.type = "ResourcePool";
            rpToVm.path = "vm";
            rpToVm.skip = false;

            // Recurse through all ResourcePools
            TraversalSpec rpToRp = new TraversalSpec();

            rpToRp.name = "rpToRp";
            rpToRp.type = "ResourcePool";
            rpToRp.path = "resourcePool";
            rpToRp.skip = false;

            rpToRp.selectSet         = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            rpToRp.selectSet[0].name = "rpToRp";
            rpToRp.selectSet[1].name = "rpToVm";

            // Traversal through ResourcePool branch
            TraversalSpec crToRp = new TraversalSpec();

            crToRp.name              = "crToRp";
            crToRp.type              = "ComputeResource";
            crToRp.path              = "resourcePool";
            crToRp.skip              = false;
            crToRp.selectSet         = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            crToRp.selectSet[0].name = "rpToRp";
            crToRp.selectSet[1].name = "rpToVm";

            // Traversal through host branch
            TraversalSpec crToH = new TraversalSpec();

            crToH.name = "crToH";
            crToH.type = "ComputeResource";
            crToH.path = "host";
            crToH.skip = false;

            // Traversal through hostFolder branch
            TraversalSpec dcToHf = new TraversalSpec();

            dcToHf.name              = "dcToHf";
            dcToHf.type              = "Datacenter";
            dcToHf.path              = "hostFolder";
            dcToHf.skip              = false;
            dcToHf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToHf.selectSet[0].name = "visitFolders";

            // Traversal through vmFolder branch
            TraversalSpec dcToVmf = new TraversalSpec();

            dcToVmf.name              = "dcToVmf";
            dcToVmf.type              = "Datacenter";
            dcToVmf.path              = "vmFolder";
            dcToVmf.skip              = false;
            dcToVmf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToVmf.selectSet[0].name = "visitFolders";

            // Recurse through all Hosts
            TraversalSpec HToVm = new TraversalSpec();

            HToVm.name              = "HToVm";
            HToVm.type              = "HostSystem";
            HToVm.path              = "vm";
            HToVm.skip              = false;
            HToVm.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            HToVm.selectSet[0].name = "visitFolders";

            // Recurse thriugh the folders
            TraversalSpec visitFolders = new TraversalSpec();

            visitFolders.name              = "visitFolders";
            visitFolders.type              = "Folder";
            visitFolders.path              = "childEntity";
            visitFolders.skip              = false;
            visitFolders.selectSet         = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec() };
            visitFolders.selectSet[0].name = "visitFolders";
            visitFolders.selectSet[1].name = "dcToHf";
            visitFolders.selectSet[2].name = "dcToVmf";
            visitFolders.selectSet[3].name = "crToH";
            visitFolders.selectSet[4].name = "crToRp";
            visitFolders.selectSet[5].name = "HToVm";
            visitFolders.selectSet[6].name = "rpToVm";
            SelectionSpec[] selectionSpecs = new SelectionSpec[] { visitFolders, dcToVmf, dcToHf, crToH, crToRp, rpToRp, HToVm, rpToVm };

            PropertySpec[] propspecary = new PropertySpec[] { new PropertySpec() };
            propspecary[0].all          = false;
            propspecary[0].allSpecified = true;
            //propspecary[0].pathSet = new string[] { "name" };
            // propspecary[0].type = "ManagedEntity";
            propspecary[0].pathSet = properties;
            propspecary[0].type    = objectType;

            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet   = propspecary;
            spec.objectSet = new ObjectSpec[] { new ObjectSpec() };
            if (o == null)
            {
                spec.objectSet[0].obj = rootF;
            }
            else
            {
                spec.objectSet[0].obj = o;
            }
            spec.objectSet[0].skip      = false;
            spec.objectSet[0].selectSet = selectionSpecs;


            ObjectContent[] content = null;
            //try{
            content = service.RetrieveProperties(propertiesCollector, new PropertyFilterSpec[] { spec });
            //}
            //catch(Exception e){
            //Logger.Append("HUBRN", Severity.ERROR, "Error retrieving Vmware properties : "+e.ToString());
            //}
            return(content);
        }
コード例 #7
0
ファイル: Basics.cs プロジェクト: Nikolay-Krasan/DegreeWork
 private Object[] getProperties(VimService service,
                           ManagedObjectReference moRef,
                           String[] properties)
 {
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = moRef.type;
     pSpec.pathSet = properties;
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = moRef;
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = (new PropertySpec[] { pSpec });
     pfSpec.objectSet = (new ObjectSpec[] { oSpec });
     ObjectContent[] ocs
        = service.RetrieveProperties(sic.propertyCollector,
                                     new PropertyFilterSpec[] { pfSpec });
     Object[] ret = new Object[properties.Length];
     if (ocs != null)
     {
         for (int i = 0; i < ocs.Length; ++i)
         {
             ObjectContent oc = ocs[i];
             DynamicProperty[] dps = oc.propSet;
             if (dps != null)
             {
                 for (int j = 0; j < dps.Length; ++j)
                 {
                     DynamicProperty dp = dps[j];
                     for (int p = 0; p < ret.Length; ++p)
                     {
                         if (properties[p].Equals(dp.name))
                         {
                             ret[p] = dp.val;
                         }
                     }
                 }
             }
         }
     }
     return ret;
 }
コード例 #8
0
        public object Collect(string url, string username, string password, string EntityType)
        {
            if (_service != null)
            {
                Disconnect();
            }

            ArrayList   ObjectList = new ArrayList();
            XmlDocument xmldoc     = new XmlDocument();

            xmldoc.Load("Inventory.xml");



            _service                 = new VimService();
            _service.Url             = url;
            _svcRef                  = new ManagedObjectReference();
            _svcRef.type             = "ServiceInstance";
            _svcRef.Value            = "ServiceInstance";
            _service.CookieContainer = new System.Net.CookieContainer();
            _sic        = _service.RetrieveServiceContent(_svcRef);
            _propCol    = _sic.propertyCollector;
            _rootFolder = _sic.rootFolder;

            if ((_sic.sessionManager != null))
            {
                _service.Login(_sic.sessionManager, username, password, null);
            }

            TraversalSpec rpToRp = new TraversalSpec();

            rpToRp.type              = "ResourcePool";
            rpToRp.path              = "resourcePool";
            rpToRp.skip              = false;
            rpToRp.name              = "rpToRp";
            rpToRp.selectSet         = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            rpToRp.selectSet[0].name = "rpToRp";
            rpToRp.selectSet[1].name = "rpToVm";

            TraversalSpec rpToVm = new TraversalSpec();

            rpToVm.type      = "ResourcePool";
            rpToVm.path      = "vm";
            rpToVm.skip      = false;
            rpToVm.name      = "rpToVm";
            rpToVm.selectSet = new SelectionSpec[] { };

            TraversalSpec crToRp = new TraversalSpec();

            crToRp.type              = "ComputeResource";
            crToRp.path              = "resourcePool";
            crToRp.skip              = false;
            crToRp.name              = "crToRp";
            crToRp.selectSet         = new SelectionSpec[] { rpToRp, new SelectionSpec() };
            crToRp.selectSet[1].name = "rpToVm";

            TraversalSpec crToH = new TraversalSpec();

            crToH.type      = "ComputeResource";
            crToH.path      = "host";
            crToH.skip      = false;
            crToH.name      = "crToH";
            crToH.selectSet = new SelectionSpec[] { };

            TraversalSpec dcToHf = new TraversalSpec();

            dcToHf.type              = "Datacenter";
            dcToHf.path              = "hostFolder";
            dcToHf.skip              = false;
            dcToHf.name              = "dcToHf";
            dcToHf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToHf.selectSet[0].name = "visitFolders";

            TraversalSpec dcToVmf = new TraversalSpec();

            dcToVmf.type              = "Datacenter";
            dcToVmf.path              = "vmFolder";
            dcToVmf.skip              = false;
            dcToVmf.name              = "dcToVmf";
            dcToVmf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToVmf.selectSet[0].name = "visitFolders";

            TraversalSpec HToVm = new TraversalSpec();

            HToVm.type              = "HostSystem";
            HToVm.path              = "vm";
            HToVm.skip              = false;
            HToVm.name              = "HToVm";
            HToVm.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            HToVm.selectSet[0].name = "visitFolders";

            TraversalSpec visitFolders = new TraversalSpec();

            visitFolders.type              = "Folder";
            visitFolders.path              = "childEntity";
            visitFolders.skip              = false;
            visitFolders.name              = "visitFolders";
            visitFolders.selectSet         = new SelectionSpec[] { new SelectionSpec(), dcToHf, crToH, crToRp, rpToVm };
            visitFolders.selectSet[0].name = "visitFolders";

            TraversalSpec tSpec = default(TraversalSpec);

            tSpec = visitFolders;
            PropertySpec[] propSpecArray = null;
            propSpecArray                 = new PropertySpec[] { new PropertySpec() };
            propSpecArray[0].type         = EntityType;
            propSpecArray[0].all          = true;
            propSpecArray[0].allSpecified = true;

            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet                = propSpecArray;
            spec.objectSet              = new ObjectSpec[] { new ObjectSpec() };
            spec.objectSet[0].obj       = _sic.rootFolder;
            spec.objectSet[0].skip      = false;
            spec.objectSet[0].selectSet = new SelectionSpec[] { tSpec };

            ObjectContent[] ocary = _service.RetrieveProperties(_propCol, new PropertyFilterSpec[] { spec });

            if (ocary != null)
            {
                ObjectContent          oc    = null;
                ManagedObjectReference mor   = null;
                DynamicProperty[]      pcary = null;
                DynamicProperty        pc    = null;

                for (Int32 oci = 0; oci <= ocary.Length - 1; oci++)
                {
                    oc  = ocary[oci];
                    mor = oc.obj;
                    string moref = mor.Value.ToString();
                    pcary = oc.propSet;
                    //string vmname ="";
                    for (Int32 propi = 0; propi <= pcary.Length - 1; propi++)
                    {
                        pc = pcary[propi];


                        if ((pc.name.Equals("guest")))
                        {
                            if (((VimyyApi.GuestInfo)(pc.val)).disk != null)
                            {
                                int          diskcount = ((VimyyApi.GuestInfo)(pc.val)).disk.Length;
                                XmlElement   xmlvdisk  = xmldoc.CreateElement(null, "Vdisk", null);
                                XmlNode      xmlnode3  = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                                XmlAttribute newAtt    = xmldoc.CreateAttribute("diskcount");
                                newAtt.Value = diskcount.ToString();
                                xmlvdisk.Attributes.Append(newAtt);
                                xmlnode3.AppendChild(xmlvdisk);

                                for (Int32 guestcount = 0; guestcount <= diskcount - 1; guestcount++)
                                {
                                    long capacity = (((VimyyApi.GuestInfo)(pc.val)).disk[guestcount].capacity);
                                    //capacity = capacity / bytes;
                                    long freespace = (((VimyyApi.GuestInfo)(pc.val)).disk[guestcount].freeSpace);
                                    //freespace = freespace / bytes;
                                    string diskpath = (((VimyyApi.GuestInfo)(pc.val)).disk[guestcount].diskPath);

                                    XmlElement xmldisk = xmldoc.CreateElement(null, "Disk", null);
                                    xmlnode3     = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                                    newAtt       = xmldoc.CreateAttribute("ID");
                                    newAtt.Value = guestcount.ToString();
                                    xmldisk.Attributes.Append(newAtt);
                                    newAtt       = xmldoc.CreateAttribute("Path");
                                    newAtt.Value = diskpath;
                                    xmldisk.Attributes.Append(newAtt);
                                    newAtt       = xmldoc.CreateAttribute("Capacity");
                                    newAtt.Value = capacity.ToString();
                                    xmldisk.Attributes.Append(newAtt);
                                    newAtt       = xmldoc.CreateAttribute("Freespace");
                                    newAtt.Value = freespace.ToString();
                                    xmldisk.Attributes.Append(newAtt);


                                    xmlnode3.AppendChild(xmldisk);
                                }
                                XmlNode    xmlnode4      = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                                XmlElement xmlguestState = xmldoc.CreateElement(null, "GuestState", null);
                                xmlguestState.InnerText = ((VimyyApi.GuestInfo)(pc.val)).toolsStatus.ToString();
                                xmlnode4.AppendChild(xmlguestState);

                                XmlNode    xmlnode5       = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                                XmlElement xmlguestFamily = xmldoc.CreateElement(null, "GuestFamily", null);
                                xmlguestFamily.InnerText = ((VimyyApi.GuestInfo)(pc.val)).guestFamily;
                                xmlnode5.AppendChild(xmlguestFamily);

                                XmlNode    xmlnode6    = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                                XmlElement xmlhostname = xmldoc.CreateElement(null, "FQDN", null);
                                xmlhostname.InnerText = ((VimyyApi.GuestInfo)(pc.val)).hostName;
                                xmlnode6.AppendChild(xmlhostname);

                                XmlNode    xmlnode7 = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                                XmlElement xmlIP    = xmldoc.CreateElement(null, "IPaddress", null);
                                xmlIP.InnerText = ((VimyyApi.GuestInfo)(pc.val)).ipAddress;
                                xmlnode3.AppendChild(xmlIP);
                            }
                        }
                        if ((pc.name.Equals("name")))
                        {
                            string name = (pc.val.ToString());

                            XmlNode    xmlnode3  = xmldoc.SelectSingleNode("//VM[@moref='" + moref + "']");
                            XmlElement xmlvmname = xmldoc.CreateElement(null, "VMName", null);
                            xmlvmname.InnerText = name;
                            xmlnode3.AppendChild(xmlvmname);
                        }
                    }
                }
            }
            else
            {
                //("No Managed Entities retrieved!");
            }
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();

            xmlWriterSettings.Indent       = true;
            xmlWriterSettings.NewLineChars = Environment.NewLine + Environment.NewLine;
            XmlWriter xmlwrite = XmlWriter.Create("Inventory.xml", xmlWriterSettings);

            xmldoc.Save(xmlwrite);
            xmlwrite.Close();

            return(ObjectList);

            //return ObjectList;
        }
コード例 #9
0
        private StringBuilder getEsxHostInfo()
        {
            // I name my tspecs so that they are self-explanatory.  'dc2hf' stands for 'Datacenter to Host Folder'
            TraversalSpec dc2hf = new TraversalSpec();

            dc2hf.type = "Datacenter";

            dc2hf.path = "hostFolder";

            dc2hf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dc2hf.selectSet[0].name = "traverseChild";

            TraversalSpec cr2host = new TraversalSpec();

            cr2host.type = "ComputeResource";
            cr2host.path = "host";

            TraversalSpec f2c = new TraversalSpec();

            f2c.type = "Folder";

            f2c.name = "traverseChild";

            f2c.path = "childEntity";

            f2c.selectSet = new SelectionSpec[] { new SelectionSpec(), dc2hf, cr2host };

            f2c.selectSet[0].name = f2c.name;

            // This is the Object Specification used in this search.
            ObjectSpec ospec = new ObjectSpec();

            // We're starting this search with the service instance's rootFolder.
            ospec.obj = vim_svc_content.rootFolder;

            // Add the top-level tspec (the Folder-2-childEntity) to the ospec.
            ospec.selectSet = new SelectionSpec[] { f2c };

            // This is the Property Specification use in this search.
            PropertySpec pspec = new PropertySpec();

            pspec.type = "HostSystem";

            // Do not collect all properties about this object.
            ///pspec.all = true;

            // Collect only the name property from this object.
            ///pspec.pathSet = new string[] { "name", "hardware.memorySize" };
            // above only gives memorysize
            // pspec.pathSet = new string[] { "name"};

            pspec.pathSet = new string[] { "name",
                                           "hardware.memorySize",
                                           "hardware.systemInfo.model",
                                           "hardware.systemInfo.uuid",
                                           "hardware.systemInfo.vendor",
                                           //"hardware.biosInfo.biosVersion",  //Since VI API 2.5
                                           //"hardware.biosInfo.releaseDate",  //Since VI API 2.5
                                           "hardware.cpuPkg",

                                           "summary.hardware.memorySize",
                                           "summary.hardware.model",
                                           "summary.hardware.uuid",
                                           "summary.hardware.vendor",
                                           "summary.hardware.cpuMhz",
                                           "summary.hardware.cpuModel",
                                           "summary.hardware.numCpuCores",
                                           "summary.hardware.numCpuPkgs",
                                           "summary.hardware.numCpuThreads",

                                           "config.storageDevice.scsiLun",
                                           "config.network.pnic",

                                           "config.product.fullName",
                                           "config.product.version",
                                           "config.service.service[\"vmware-vpxa\"].running",
                                           "runtime.bootTime",
                                           "datastore",
                                           "vm" };

            // Build the PropertyFilterSpec and set its PropertySpecficiation (propSet)
            // and ObjectSpecification (objectset) attributes to pspec and ospec respectively.
            PropertyFilterSpec pfspec = new PropertyFilterSpec();

            pfspec.propSet   = new PropertySpec[] { pspec };
            pfspec.objectSet = new ObjectSpec[] { ospec };

            // Retrieve the property values from the VI3 SDk web service.
            ObjectContent[] occoll = vim_svc.RetrieveProperties(
                vim_svc_content.propertyCollector, new PropertyFilterSpec[] { pfspec });


            // go through results of the property retrieval if there were any.

            StringBuilder sb = new StringBuilder();

            if (occoll != null)
            {
                DynamicProperty pc = null;
                foreach (ObjectContent oc in occoll)
                {
                    sb.Append("<BDNA_ESX>");
                    //StringBuilder VM_Info = new StringBuilder("<VM>");
                    StringBuilder     VM_Info = new StringBuilder();
                    DynamicProperty[] pcary   = null;
                    pcary = oc.propSet;
                    for (int i = 0; i < pcary.Length; i++)
                    {
                        pc = pcary[i];

                        if (pc.val.GetType() == typeof(VimApi.ManagedObjectReference[]))
                        {
                            ManagedObjectReference[] dsList = (ManagedObjectReference[])pc.val;
                            ManagedObjectReference   dsRef  = null;

                            for (int j = 0; j < dsList.Length; j++)
                            {
                                dsRef = dsList[j];

                                if (dsRef.type.Equals("VirtualMachine"))
                                {
                                    //Console.WriteLine("Mnged object type is: VM");
                                    //sb.Append("<VM>");
                                    StringBuilder VM_Info2 = getESXVMsData(dsRef);
                                    VM_Info.Append(VM_Info2).Append("<VM>");
                                    //sb.Append(VM_Info);
                                }
                                else
                                {
                                    //Managed object type is a datastore
                                    Object[] dsProps = getProperties(dsRef, new String[] { "summary.capacity",
                                                                                           "summary.freeSpace",
                                                                                           "summary.name",
                                                                                           "summary.type",
                                                                                           "summary.url" });

                                    /* Put sb append under if logic so that it would not give any error if due to any reason all mentioned properties not get collected */
                                    for (int c = 0; c < dsProps.Length; c++)
                                    {
                                        if (c == 0)
                                        {
                                            sb.Append("Datastore.capacity")
                                            .Append("<BDNA,1>")
                                            .Append(Convert.ToString(dsProps[0]))
                                            .Append("<BDNA,2>");
                                        }
                                        else if (c == 1)
                                        {
                                            sb.Append("Datastore.freeSpace")
                                            .Append("<BDNA,1>")
                                            .Append(Convert.ToString(dsProps[1]))
                                            .Append("<BDNA,2>");
                                        }
                                        else if (c == 2)
                                        {
                                            sb.Append("Datastore.name")
                                            .Append("<BDNA,1>")
                                            .Append(((String)dsProps[2]))
                                            .Append("<BDNA,2>");
                                        }
                                        else if (c == 3)
                                        {
                                            sb.Append("Datastore.type")
                                            .Append("<BDNA,1>")
                                            .Append(((String)dsProps[3]))
                                            .Append("<BDNA,2>");
                                        }
                                        else if (c == 4)
                                        {
                                            sb.Append("Datastore.url")
                                            .Append("<BDNA,1>")
                                            .Append(((String)dsProps[4]));
                                        }
                                    }
                                    sb.Append("<BDNA,>");
                                }
                            }
                        }
                        else if (pc != null && pc.val.GetType().IsArray)
                        {
                            //if (pc != null && pc.val.GetType().IsArray) {

                            /*
                             * OUTPUT:
                             * pc type is: XmlNode[]
                             * pc type is2:
                             * pc type is3: System.Xml.XmlNode[]
                             *
                             * CODE:
                             * Console.WriteLine("pc type is: {0}", pc.val.GetType().Name);
                             * Console.WriteLine("pc type is2: {0}", pc.val.GetType().ReflectedType );
                             * Console.WriteLine("pc type is3: {0}", pc.val.GetType().ToString());
                             * Console.WriteLine("pc type is4: {0}, {1}, {2},{3}", pc.val.GetType().UnderlyingSystemType,
                             *  pc.val.GetType().TypeInitializer, pc.val.GetType().TypeHandle,
                             *  pc.val.GetType().MakeArrayType()
                             *  );
                             */

                            if (pc.val.GetType() == typeof(VimApi.PhysicalNic[]))
                            {
                                // PhysicalNic:
                                //PhysicalNic[] host_phyNic_info = (PhysicalNic[])oc.propSet[0].val;
                                PhysicalNic[] host_phyNic_info = (PhysicalNic[])pc.val;
                                foreach (PhysicalNic host_phyNic in host_phyNic_info)
                                {
                                    /* VI API 2.0 */

                                    sb.Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".device")
                                    .Append("<BDNA,1>")
                                    .Append(host_phyNic.device)

                                    .Append("<BDNA,>");

                                    /* VI API 2.5  */

                                    /*
                                     * sb.Append(oc.propSet[i].name).Append(".mac")
                                     * .Append("<BDNA,1>")
                                     * .Append(host_phyNic.mac)
                                     *
                                     * .Append("<BDNA,2>")
                                     * .Append(oc.propSet[i].name).Append(".device")
                                     * .Append("<BDNA,1>")
                                     * .Append(host_phyNic.device)
                                     *
                                     * .Append("<BDNA,>");
                                     */
                                }
                            }

                            if (pc.val.GetType() == typeof(VimApi.ScsiLun[]))
                            {
                                //ScsiLun:
                                //ScsiLun[] host_storage_info = (ScsiLun[])oc.propSet[1].val;
                                ScsiLun[] host_storage_info = (ScsiLun[])pc.val;
                                foreach (ScsiLun host_stroage in host_storage_info)
                                {
                                    if (host_stroage.deviceType.Equals("disk"))
                                    {
                                        sb.Append(oc.propSet[i].name).Append(".HostScsiDisk.capacity.block")
                                        .Append("<BDNA,1>")
                                        .Append(((HostScsiDisk)host_stroage).capacity.block)

                                        .Append("<BDNA,2>")
                                        .Append(oc.propSet[i].name).Append(".HostScsiDisk.capacity.blockSize")
                                        .Append("<BDNA,1>")
                                        .Append(((HostScsiDisk)host_stroage).capacity.blockSize)

                                        .Append("<BDNA,2>");
                                    }

                                    sb.Append(oc.propSet[i].name).Append(".canonicalName")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.canonicalName)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".deviceName")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.deviceName)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".deviceType")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.deviceType)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".model")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.model)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".serialNumber")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.serialNumber)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".vendor")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.vendor)

                                    .Append("<BDNA,>");
                                }
                            }

                            if (pc.val.GetType() == typeof(VimApi.HostCpuPackage[]))
                            {
                                HostCpuPackage[] host_cpuPkg_info = (HostCpuPackage[])pc.val;
                                foreach (HostCpuPackage host_cpuPkg in host_cpuPkg_info)
                                {
                                    sb.Append(oc.propSet[i].name).Append(".description")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.description)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".hz")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.hz)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".index")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.index)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".threadId_NumberOfThread")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.threadId.Length)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".vendor")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.vendor)

                                    .Append("<BDNA,>");
                                }
                            }
                        }
                        else
                        {
                            ///Property = oc.propSet[i].name and PropertyValue = oc.propSet[i].val
                            /// [Note: Property and their value are seperated by <BDNA,1> delimiter ]
                            sb.Append(oc.propSet[i].name)
                            .Append("<BDNA,1>")
                            .Append(oc.propSet[i].val)
                            .Append("<BDNA,>");
                        }
                    }
                    // Append VMs data for a ESX host:
                    sb.Append("<VMS>").Append(VM_Info).Append("</VMS>");
                }
            }
            sb.Remove(0, 10);
            return(sb);
        }
コード例 #10
0
        public object Collect(string url, string username, string password, string EntityType)
        {
            if (_service != null)
            {
                Disconnect();
            }

            ArrayList ObjectList = new ArrayList();
            ArrayList HostList   = new ArrayList();

            XmlDocument xmldoc = new XmlDocument();

            xmldoc.Load("Inventory.xml");

            _service                 = new VimService();
            _service.Url             = url;
            _svcRef                  = new ManagedObjectReference();
            _svcRef.type             = "ServiceInstance";
            _svcRef.Value            = "ServiceInstance";
            _service.CookieContainer = new System.Net.CookieContainer();
            _sic        = _service.RetrieveServiceContent(_svcRef);
            _propCol    = _sic.propertyCollector;
            _rootFolder = _sic.rootFolder;

            if ((_sic.sessionManager != null))
            {
                _service.Login(_sic.sessionManager, username, password, null);
            }

            TraversalSpec rpToRp = new TraversalSpec();

            rpToRp.type              = "ResourcePool";
            rpToRp.path              = "resourcePool";
            rpToRp.skip              = false;
            rpToRp.name              = "rpToRp";
            rpToRp.selectSet         = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            rpToRp.selectSet[0].name = "rpToRp";
            rpToRp.selectSet[1].name = "rpToVm";

            TraversalSpec rpToVm = new TraversalSpec();

            rpToVm.type      = "ResourcePool";
            rpToVm.path      = "vm";
            rpToVm.skip      = false;
            rpToVm.name      = "rpToVm";
            rpToVm.selectSet = new SelectionSpec[] { };

            TraversalSpec crToRp = new TraversalSpec();

            crToRp.type              = "ComputeResource";
            crToRp.path              = "resourcePool";
            crToRp.skip              = false;
            crToRp.name              = "crToRp";
            crToRp.selectSet         = new SelectionSpec[] { rpToRp, new SelectionSpec() };
            crToRp.selectSet[1].name = "rpToVm";

            TraversalSpec crToH = new TraversalSpec();

            crToH.type      = "ComputeResource";
            crToH.path      = "host";
            crToH.skip      = false;
            crToH.name      = "crToH";
            crToH.selectSet = new SelectionSpec[] { };

            TraversalSpec dcToHf = new TraversalSpec();

            dcToHf.type              = "Datacenter";
            dcToHf.path              = "hostFolder";
            dcToHf.skip              = false;
            dcToHf.name              = "dcToHf";
            dcToHf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToHf.selectSet[0].name = "visitFolders";

            TraversalSpec dcToVmf = new TraversalSpec();

            dcToVmf.type              = "Datacenter";
            dcToVmf.path              = "vmFolder";
            dcToVmf.skip              = false;
            dcToVmf.name              = "dcToVmf";
            dcToVmf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToVmf.selectSet[0].name = "visitFolders";

            TraversalSpec HToVm = new TraversalSpec();

            HToVm.type              = "HostSystem";
            HToVm.path              = "vm";
            HToVm.skip              = false;
            HToVm.name              = "HToVm";
            HToVm.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            HToVm.selectSet[0].name = "visitFolders";

            TraversalSpec visitFolders = new TraversalSpec();

            visitFolders.type              = "Folder";
            visitFolders.path              = "childEntity";
            visitFolders.skip              = false;
            visitFolders.name              = "visitFolders";
            visitFolders.selectSet         = new SelectionSpec[] { new SelectionSpec(), dcToHf, crToH, crToRp, rpToVm };
            visitFolders.selectSet[0].name = "visitFolders";

            TraversalSpec tSpec = default(TraversalSpec);

            tSpec = visitFolders;
            PropertySpec[] propSpecArray = null;
            propSpecArray                 = new PropertySpec[] { new PropertySpec() };
            propSpecArray[0].type         = EntityType;
            propSpecArray[0].all          = true;
            propSpecArray[0].allSpecified = true;

            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet                = propSpecArray;
            spec.objectSet              = new ObjectSpec[] { new ObjectSpec() };
            spec.objectSet[0].obj       = _sic.rootFolder;
            spec.objectSet[0].skip      = false;
            spec.objectSet[0].selectSet = new SelectionSpec[] { tSpec };

            ObjectContent[] ocary    = _service.RetrieveProperties(_propCol, new PropertyFilterSpec[] { spec });
            string          clusname = "";
            string          moref    = "";

            if (ocary != null)
            {
                ObjectContent          oc    = null;
                ManagedObjectReference mor   = null;
                DynamicProperty[]      pcary = null;
                DynamicProperty        pc    = null;

                for (Int32 oci = 0; oci <= ocary.Length - 1; oci++)
                {
                    oc    = ocary[oci];
                    mor   = oc.obj;
                    pcary = oc.propSet;

                    string domain      = mor.Value.ToString();
                    string shortdomain = domain.Substring(0, 8);
                    if (shortdomain == "domain-c")
                    {
                        for (Int32 propi = 0; propi <= pcary.Length - 1; propi++)
                        {
                            pc = pcary[propi];

                            moref = mor.Value;
                            if ((pc.name.Equals("host")))
                            {
                                try
                                {
                                    for (Int32 hc = 0; hc >= 0;)
                                    {
                                        HostList.Add(((VimyyApi.ManagedObjectReference[])(pc.val))[hc].Value);
                                        hc++;
                                    }
                                }
                                catch
                                {
                                }
                            }
                            if ((pc.name.Equals("name")))
                            {
                                clusname = pc.val.ToString();
                                XmlNode    xmlnode3    = xmldoc.SelectSingleNode("//Cluster[@moref='" + moref + "']");
                                XmlElement xmlclusname = xmldoc.CreateElement(null, "ClusterName", null);
                                xmlclusname.InnerText = clusname;
                                xmlnode3.AppendChild(xmlclusname);

                                XmlNode    xmlnode4     = xmldoc.SelectSingleNode("//Cluster[@moref='" + moref + "']");
                                XmlElement xmlhostcount = xmldoc.CreateElement(null, "HostCount", null);
                                xmlhostcount.InnerText = HostList.Count.ToString();
                                xmlnode4.AppendChild(xmlhostcount);

                                /*
                                 * for (Int32 i = 0; i <= HostList.Count -1; )
                                 * {
                                 *  XmlElement xmlclushost = xmldoc.CreateElement(null, "Host", null);
                                 *  newAtt = xmldoc.CreateAttribute("moref");
                                 *  newAtt.Value = (string)HostList[i];
                                 *  xmlclushost.Attributes.Append(newAtt);
                                 *  xmlnode3.AppendChild(xmlclushost);
                                 *  i++;
                                 *
                                 * }
                                 */
                                HostList.Clear();
                            }
                            if ((pc.name.Equals("parent")))
                            {
                                string parent = ((VimyyApi.ManagedObjectReference)(pc.val)).Value;
                            }
                        }
                    }
                }
            }
            else
            {
                //("No Managed Entities retrieved!");
            }

            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();

            xmlWriterSettings.Indent       = true;
            xmlWriterSettings.NewLineChars = Environment.NewLine + Environment.NewLine;
            XmlWriter xmlwrite = XmlWriter.Create("Inventory.xml", xmlWriterSettings);

            xmldoc.Save(xmlwrite);
            xmlwrite.Close();
            return(ObjectList);
        }
コード例 #11
0
        private StringBuilder getEsxHostInfo()
        {
            // I name my tspecs so that they are self-explanatory.  'dc2hf' stands for 'Datacenter to Host Folder'
            TraversalSpec dc2hf = new TraversalSpec();

            dc2hf.type = "Datacenter";

            dc2hf.path = "hostFolder";

            dc2hf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dc2hf.selectSet[0].name = "traverseChild";

            TraversalSpec cr2host = new TraversalSpec();

            cr2host.type = "ComputeResource";
            cr2host.path = "host";

            TraversalSpec f2c = new TraversalSpec();

            f2c.type = "Folder";

            f2c.name = "traverseChild";

            f2c.path = "childEntity";

            f2c.selectSet = new SelectionSpec[] { new SelectionSpec(), dc2hf, cr2host };

            f2c.selectSet[0].name = f2c.name;

            // This is the Object Specification used in this search.
            ObjectSpec ospec = new ObjectSpec();

            // We're starting this search with the service instance's rootFolder.
            ospec.obj = vim_svc_content.rootFolder;

            // Add the top-level tspec (the Folder-2-childEntity) to the ospec.
            ospec.selectSet = new SelectionSpec[] { f2c };

            // This is the Property Specification use in this search.
            PropertySpec pspec = new PropertySpec();

            pspec.type = "HostSystem";

            // Do not collect all properties about this object.
            ///pspec.all = true;

            // Collect only the name property from this object.
            ///pspec.pathSet = new string[] { "name", "hardware.memorySize" };
            // above only gives memorysize
            // pspec.pathSet = new string[] { "name"};

            pspec.pathSet = new string[] { "name",
                                           "hardware.memorySize",
                                           "hardware.systemInfo.model",
                                           "hardware.systemInfo.uuid",
                                           "hardware.systemInfo.vendor",
                                           //"hardware.biosInfo.biosVersion",  //Since VI API 2.5
                                           //"hardware.biosInfo.releaseDate",  //Since VI API 2.5
                                           "hardware.cpuPkg",

                                           "summary.hardware.memorySize",
                                           "summary.hardware.model",
                                           "summary.hardware.uuid",
                                           "summary.hardware.vendor",
                                           "summary.hardware.cpuMhz",
                                           "summary.hardware.cpuModel",
                                           "summary.hardware.numCpuCores",
                                           "summary.hardware.numCpuPkgs",
                                           "summary.hardware.numCpuThreads",

                                           "config.storageDevice.scsiLun",
                                           "config.network.pnic",

                                           //"config.product.fullName",
                                           //"config.product.version",
                                           "config.service.service[\"vmware-vpxa\"].running",
                                           "runtime.bootTime" };

            // Build the PropertyFilterSpec and set its PropertySpecficiation (propSet)
            // and ObjectSpecification (objectset) attributes to pspec and ospec respectively.
            PropertyFilterSpec pfspec = new PropertyFilterSpec();

            pfspec.propSet   = new PropertySpec[] { pspec };
            pfspec.objectSet = new ObjectSpec[] { ospec };

            // Retrieve the property values from the VI3 SDk web service.
            ObjectContent[] occoll = vim_svc.RetrieveProperties(
                vim_svc_content.propertyCollector, new PropertyFilterSpec[] { pfspec });


            // go through results of the property retrieval if there were any.

            StringBuilder sb = new StringBuilder();

            if (occoll != null)
            {
                DynamicProperty pc = null;
                foreach (ObjectContent oc in occoll)
                {
                    DynamicProperty[] pcary = null;
                    pcary = oc.propSet;
                    for (int i = 0; i < pcary.Length; i++)
                    {
                        pc = pcary[i];

                        if (pc != null && pc.val.GetType().IsArray)
                        {
                            if (pc.val.GetType() == typeof(VimApi.PhysicalNic[]))
                            {
                                // PhysicalNic:
                                //PhysicalNic[] host_phyNic_info = (PhysicalNic[])oc.propSet[0].val;
                                PhysicalNic[] host_phyNic_info = (PhysicalNic[])pc.val;
                                foreach (PhysicalNic host_phyNic in host_phyNic_info)
                                {
                                    /* VI API 2.0 */

                                    sb.Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".device")
                                    .Append("<BDNA,1>")
                                    .Append(host_phyNic.device)

                                    .Append("<BDNA,>");

                                    /* VI API 2.5  */

                                    /*
                                     * sb.Append(oc.propSet[i].name).Append(".mac")
                                     * .Append("<BDNA,1>")
                                     * .Append(host_phyNic.mac)
                                     *
                                     * .Append("<BDNA,2>")
                                     * .Append(oc.propSet[i].name).Append(".device")
                                     * .Append("<BDNA,1>")
                                     * .Append(host_phyNic.device)
                                     *
                                     * .Append("<BDNA,>");
                                     */
                                }
                            }

                            if (pc.val.GetType() == typeof(VimApi.ScsiLun[]))
                            {
                                //ScsiLun:
                                //ScsiLun[] host_storage_info = (ScsiLun[])oc.propSet[1].val;
                                ScsiLun[] host_storage_info = (ScsiLun[])pc.val;
                                foreach (ScsiLun host_stroage in host_storage_info)
                                {
                                    if (host_stroage.deviceType.Equals("disk"))
                                    {
                                        sb.Append(oc.propSet[i].name).Append(".HostScsiDisk.capacity.block")
                                        .Append("<BDNA,1>")
                                        .Append(((HostScsiDisk)host_stroage).capacity.block)

                                        .Append("<BDNA,2>")
                                        .Append(oc.propSet[i].name).Append(".HostScsiDisk.capacity.blockSize")
                                        .Append("<BDNA,1>")
                                        .Append(((HostScsiDisk)host_stroage).capacity.blockSize)

                                        .Append("<BDNA,2>");
                                    }

                                    sb.Append(oc.propSet[i].name).Append(".canonicalName")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.canonicalName)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".deviceName")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.deviceName)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".deviceType")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.deviceType)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".model")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.model)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".serialNumber")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.serialNumber)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".vendor")
                                    .Append("<BDNA,1>")
                                    .Append(host_stroage.vendor)

                                    .Append("<BDNA,>");
                                }
                            }

                            if (pc.val.GetType() == typeof(VimApi.HostCpuPackage[]))
                            {
                                HostCpuPackage[] host_cpuPkg_info = (HostCpuPackage[])pc.val;
                                foreach (HostCpuPackage host_cpuPkg in host_cpuPkg_info)
                                {
                                    sb.Append(oc.propSet[i].name).Append(".description")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.description)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".hz")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.hz)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".index")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.index)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".threadId_NumberOfThread")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.threadId.Length)

                                    .Append("<BDNA,2>")
                                    .Append(oc.propSet[i].name).Append(".vendor")
                                    .Append("<BDNA,1>")
                                    .Append(host_cpuPkg.vendor)

                                    .Append("<BDNA,>");
                                }
                            }
                        }
                        else
                        {
                            ///Property = oc.propSet[i].name and PropertyValue = oc.propSet[i].val
                            /// [Note: Property and their value are seperated by <BDNA,1> delimiter ]
                            sb.Append(oc.propSet[i].name)
                            .Append("<BDNA,1>")
                            .Append(oc.propSet[i].val)
                            .Append("<BDNA,>");
                        }
                    }
                }
            }

            return(sb);
        }
コード例 #12
0
        private StringBuilder getESXVMsData()
        {
            // I name my tspecs so that they are self-explanatory.  'dc2vmf' stands for 'Datacenter to vm Folder'
            TraversalSpec dc2vmf = new TraversalSpec();

            dc2vmf.type = "Datacenter";

            dc2vmf.path = "vmFolder";

            dc2vmf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dc2vmf.selectSet[0].name = "traverseChild";

            TraversalSpec f2c = new TraversalSpec();

            f2c.type = "Folder";

            f2c.name = "traverseChild";

            f2c.path = "childEntity";

            f2c.selectSet = new SelectionSpec[] { new SelectionSpec(),
                                                  dc2vmf };

            f2c.selectSet[0].name = f2c.name;

            // This is the Object Specification used in this search.
            ObjectSpec ospec = new ObjectSpec();

            // We're starting this search with the service instance's rootFolder.
            ospec.obj = vim_svc_content.rootFolder;

            // Add the top-level tspec (the Folder-2-childEntity) to the ospec.
            ospec.selectSet = new SelectionSpec[] { f2c };

            // This is the Property Specification use in this search.
            PropertySpec pspec = new PropertySpec();

            ////pspec.type = "HostSystem";
            pspec.type = "VirtualMachine";

            // Do not collect all properties about this object, only few selected properties.
            ///pspec.all = true;

            pspec.pathSet = new string[] { "name",
                                           "summary.config.guestFullName",
                                           "summary.config.guestId",
                                           "summary.config.memorySizeMB",
                                           "summary.config.numCpu",
                                           "summary.config.numVirtualDisks",
                                           "summary.config.uuid",
                                           "summary.config.vmPathName",
                                           "summary.runtime.powerState",

                                           "guest.hostName",
                                           "guest.ipAddress",
                                           "guest.toolsStatus",
                                           "guest.toolsVersion",
                                           "guest.net",
                                           "config.hardware.device" };


            // Build the PropertyFilterSpec and set its PropertySpecficiation (propSet)
            // and ObjectSpecification (objectset) attributes to pspec and ospec respectively.
            PropertyFilterSpec pfspec = new PropertyFilterSpec();

            pfspec.propSet   = new PropertySpec[] { pspec };
            pfspec.objectSet = new ObjectSpec[] { ospec };

            // Retrieve the property values from the VI3 SDk web service.
            ObjectContent[] occoll = vim_svc.RetrieveProperties(
                vim_svc_content.propertyCollector, new PropertyFilterSpec[] { pfspec });

            // go through results of the property retrieval if there were any.

            StringBuilder sb = new StringBuilder();

            if (occoll != null)
            {
                DynamicProperty pc = null;
                foreach (ObjectContent oc in occoll)
                {
                    DynamicProperty[] pcary = null;
                    pcary = oc.propSet;
                    sb.Append("<BDNA_ESX_VM>");
                    for (int i = 0; i < pcary.Length; i++)
                    {
                        pc = pcary[i];

                        if (pc != null && pc.val.GetType().IsArray)
                        {
                            if (pc.val.GetType() == typeof(VimApi.GuestNicInfo[]))
                            {
                                /* commented macaddress from guest.net (available only if VMware Tools running on VM), instead use macaddress from config.hardware.device
                                 *
                                 * GuestNicInfo[] guestNics = (GuestNicInfo[])pc.val;
                                 * foreach (GuestNicInfo nics in guestNics) {
                                 *  //sb.Append(oc.propSet[i].name).Append(".macAddress")  // OR
                                 *  sb.Append(pc.name).Append(".macAddress")
                                 *    .Append("<BDNA,1>")
                                 *    .Append(nics.macAddress)
                                 *
                                 *    .Append("<BDNA,2>")
                                 *
                                 *    .Append(pc.name).Append(".ipAddress")
                                 *    .Append("<BDNA,1>");
                                 *  //.Append(nics.ipAddress) // this gives System.String[]
                                 *  int c = 0;
                                 *  foreach (String ip in nics.ipAddress) {
                                 *      if (c > 0) {
                                 *          sb.Append(",").Append(ip);
                                 *      } else {
                                 *          sb.Append(ip);
                                 *          c++;
                                 *      }
                                 *  }
                                 *  sb.Append("<BDNA,>");
                                 * }
                                 */
                            }
                            else if (pc.val.GetType() == typeof(VimApi.VirtualDevice[]))
                            {
                                VirtualDevice[] vd = (VirtualDevice[])pc.val;
                                foreach (VirtualDevice dev in vd)
                                {
                                    if (dev.GetType().BaseType == typeof(VimApi.VirtualEthernetCard))
                                    {
                                        sb.Append(pc.name).Append(".macAddress")
                                        .Append("<BDNA,1>")
                                        .Append(((VirtualEthernetCard)dev).macAddress)

                                        .Append("<BDNA,2>")

                                        .Append(pc.name).Append(".addressType")
                                        .Append("<BDNA,1>")
                                        .Append(((VirtualEthernetCard)dev).addressType);
                                        sb.Append("<BDNA,>");
                                    }
                                }
                            }
                        }
                        else
                        {
                            sb.Append(oc.propSet[i].name)
                            .Append("<BDNA,1>")
                            .Append(oc.propSet[i].val)
                            .Append("<BDNA,>");
                        }
                    }
                }
            }

            return(sb);
        }
コード例 #13
0
        public object Collect(string vcentername, string url, string username, string password)
        {
            if (_service != null)
            {
                Disconnect();
            }

            //###################setup xml file################

            XmlDocument xmldoc  = new XmlDocument();
            XmlNode     xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");

            xmldoc.AppendChild(xmlnode);
            //add root element
            XmlElement xmlroot = xmldoc.CreateElement("", vcentername, "");

            xmldoc.AppendChild(xmlroot);

            //###################################################

            ArrayList ObjectList = new ArrayList();

            _service                 = new VimService();
            _service.Url             = url;
            _svcRef                  = new ManagedObjectReference();
            _svcRef.type             = "ServiceInstance";
            _svcRef.Value            = "ServiceInstance";
            _service.CookieContainer = new System.Net.CookieContainer();
            _sic = _service.RetrieveServiceContent(_svcRef);

            _propCol    = _sic.propertyCollector;
            _rootFolder = _sic.rootFolder;

            if ((_sic.sessionManager != null))
            {
                _service.Login(_sic.sessionManager, username, password, null);
            }

            TraversalSpec rpToRp = new TraversalSpec();

            rpToRp.type              = "ResourcePool";
            rpToRp.path              = "resourcePool";
            rpToRp.skip              = false;
            rpToRp.name              = "rpToRp";
            rpToRp.selectSet         = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            rpToRp.selectSet[0].name = "rpToRp";
            rpToRp.selectSet[1].name = "rpToVm";

            TraversalSpec rpToVm = new TraversalSpec();

            rpToVm.type      = "ResourcePool";
            rpToVm.path      = "vm";
            rpToVm.skip      = false;
            rpToVm.name      = "rpToVm";
            rpToVm.selectSet = new SelectionSpec[] { };

            TraversalSpec crToRp = new TraversalSpec();

            crToRp.type              = "ComputeResource";
            crToRp.path              = "resourcePool";
            crToRp.skip              = false;
            crToRp.name              = "crToRp";
            crToRp.selectSet         = new SelectionSpec[] { rpToRp, new SelectionSpec() };
            crToRp.selectSet[1].name = "rpToVm";

            TraversalSpec crToH = new TraversalSpec();

            crToH.type      = "ComputeResource";
            crToH.path      = "host";
            crToH.skip      = false;
            crToH.name      = "crToH";
            crToH.selectSet = new SelectionSpec[] { };

            TraversalSpec dcToHf = new TraversalSpec();

            dcToHf.type              = "Datacenter";
            dcToHf.path              = "hostFolder";
            dcToHf.skip              = false;
            dcToHf.name              = "dcToHf";
            dcToHf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToHf.selectSet[0].name = "visitFolders";

            TraversalSpec dcToVmf = new TraversalSpec();

            dcToVmf.type              = "Datacenter";
            dcToVmf.path              = "vmFolder";
            dcToVmf.skip              = false;
            dcToVmf.name              = "dcToVmf";
            dcToVmf.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dcToVmf.selectSet[0].name = "visitFolders";

            TraversalSpec HToVm = new TraversalSpec();

            HToVm.type              = "HostSystem";
            HToVm.path              = "vm";
            HToVm.skip              = false;
            HToVm.name              = "HToVm";
            HToVm.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            HToVm.selectSet[0].name = "visitFolders";

            TraversalSpec visitFolders = new TraversalSpec();

            visitFolders.type              = "Folder";
            visitFolders.path              = "childEntity";
            visitFolders.skip              = false;
            visitFolders.name              = "visitFolders";
            visitFolders.selectSet         = new SelectionSpec[] { new SelectionSpec(), dcToHf, crToH, crToRp, rpToVm };
            visitFolders.selectSet[0].name = "visitFolders";

            TraversalSpec tSpec = default(TraversalSpec);

            tSpec = visitFolders;
            PropertySpec[] propSpecArray = null;
            propSpecArray                 = new PropertySpec[] { new PropertySpec() };
            propSpecArray[0].type         = "Datacenter";
            propSpecArray[0].all          = true;
            propSpecArray[0].allSpecified = true;

            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet                = propSpecArray;
            spec.objectSet              = new ObjectSpec[] { new ObjectSpec() };
            spec.objectSet[0].obj       = _sic.rootFolder;
            spec.objectSet[0].skip      = false;
            spec.objectSet[0].selectSet = new SelectionSpec[] { tSpec };

            ObjectContent[] ocary = _service.RetrieveProperties(_propCol, new PropertyFilterSpec[] { spec });

            if (ocary != null)
            {
                ObjectContent          oc    = null;
                ManagedObjectReference mor   = null;
                DynamicProperty[]      pcary = null;
                DynamicProperty        pc    = null;


                for (Int32 oci = 0; oci <= ocary.Length - 1; oci++)
                {
                    oc    = ocary[oci];
                    mor   = oc.obj;
                    moref = mor.Value.ToString();
                    pcary = oc.propSet;
                    //string vmname ="";
                    for (Int32 propi = 0; propi <= pcary.Length - 1; propi++)
                    {
                        pc = pcary[propi];



                        if ((pc.name.Equals("hostFolder")))
                        {
                            XmlElement xmldcmoref = xmldoc.CreateElement("", "Datacenter", "");

                            XmlAttribute newAtt = xmldoc.CreateAttribute("moref");
                            newAtt.Value = moref;
                            xmldcmoref.Attributes.Append(newAtt);
                            xmldoc.ChildNodes.Item(1).AppendChild(xmldcmoref);

                            folder = ((VimyyApi.ManagedObjectReference)(pc.val)).Value;
                            XmlElement xmlfolder = xmldoc.CreateElement(null, "Folder", null);
                            XmlNode    xmlnode3  = xmldoc.SelectSingleNode("//Datacenter[@moref='" + moref + "']");

                            newAtt       = xmldoc.CreateAttribute("moref");
                            newAtt.Value = folder;
                            xmlfolder.Attributes.Append(newAtt);

                            xmlnode3.AppendChild(xmlfolder);
                        }


                        if ((pc.name.Equals("name")))
                        {
                            name = (pc.val.ToString());

                            XmlElement xmldcname = xmldoc.CreateElement(null, "DCname", null);
                            XmlNode    xmlnode3  = xmldoc.SelectSingleNode("//Datacenter[@moref='" + moref + "']");

                            XmlAttribute newAtt = xmldoc.CreateAttribute("DCname");
                            newAtt.Value = name;
                            xmldcname.Attributes.Append(newAtt);

                            xmlnode3.AppendChild(xmldcname);
                        }
                    }
                }
            }
            else
            {
                //("No Managed Entities retrieved!");
            }
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();

            xmlWriterSettings.Indent       = true;
            xmlWriterSettings.NewLineChars = Environment.NewLine + Environment.NewLine;
            XmlWriter xmlwrite = XmlWriter.Create("Inventory.xml", xmlWriterSettings);

            xmldoc.Save(xmlwrite);
            xmlwrite.Close();

            return(ObjectList);
        }
コード例 #14
0
        private void removePluginWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                string hostName = vhostname;
                //#########################setup plugin in a xml file###################


                XmlDocument xmldoc  = new XmlDocument();
                XmlNode     xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
                xmldoc.AppendChild(xmlnode);
                //add root element
                XmlElement xmlroot = xmldoc.CreateElement("root");
                xmldoc.AppendChild(xmlroot);

                //######################################################################


                _service2                 = new VimService();
                _service2.Url             = vurl;
                _svcRef2                  = new ManagedObjectReference();
                _svcRef2.type             = "ServiceInstance";
                _svcRef2.Value            = "ServiceInstance";
                _service2.CookieContainer = new System.Net.CookieContainer();
                CreateServiceRef2("ServiceInstance");
                _sic2        = _service2.RetrieveServiceContent(_svcRef2);
                _propCol2    = _sic2.propertyCollector;
                _rootFolder2 = _sic2.rootFolder;



                String userName = vusername;
                String password = vpassword;



                if (_sic2.sessionManager != null)
                {
                    _service2.Login(_sic2.sessionManager, userName, password, null);
                    ManagedObjectReference extMOREF = _sic2.extensionManager;



                    PropertyFilterSpec spec = new PropertyFilterSpec();

                    spec.propSet                 = new PropertySpec[] { new PropertySpec() };
                    spec.propSet[0].all          = false;
                    spec.propSet[0].allSpecified = spec.propSet[0].all;
                    spec.propSet[0].type         = extMOREF.type;
                    spec.propSet[0].pathSet      = new string[] { "extensionList" };
                    spec.objectSet               = new ObjectSpec[] { new ObjectSpec() };
                    spec.objectSet[0].obj        = extMOREF;
                    spec.objectSet[0].skip       = false;



                    ObjectContent[] ocary = _service2.RetrieveProperties(_sic2.propertyCollector, new PropertyFilterSpec[] { spec });



                    ArrayList ObjectList = new ArrayList();


                    if (ocary != null)
                    {
                        ObjectContent          oc    = null;
                        ManagedObjectReference mor   = null;
                        DynamicProperty[]      pcary = null;
                        DynamicProperty        pc    = null;


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

                            for (int propi = 0; propi <= pcary.Length - 1; propi++)
                            {
                                pc = pcary[propi];
                                if ((pc.name.Equals("extensionList")))
                                {
                                    try
                                    {
                                        for (int pci = 0; ; pci++)
                                        {
                                            ObjectList.Add(((VimApi.Extension[])(pc.val))[pci].key);
                                        }
                                    }
                                    catch
                                    {
                                        //
                                    }
                                    string leftcharObjL;
                                    for (int olc = 0; olc < ObjectList.Count; olc++)
                                    {
                                        leftcharObjL = ObjectList[olc].ToString();
                                        if (leftcharObjL.StartsWith("com.virtualizeplanet."))
                                        {
                                            leftcharObjL = leftcharObjL.Remove(0, 21);
                                            //comboBox2.Items.Add(leftcharObjL);
                                            //comboBox2.SelectedIndex = 0;

                                            XmlElement xmldcmoref = xmldoc.CreateElement("", "PluginList", "");

                                            XmlAttribute newAtt = xmldoc.CreateAttribute("Position");
                                            newAtt.Value = leftcharObjL;
                                            xmldcmoref.Attributes.Append(newAtt);
                                            xmldoc.ChildNodes.Item(1).AppendChild(xmldcmoref);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
                xmlWriterSettings.Indent       = true;
                xmlWriterSettings.NewLineChars = Environment.NewLine + Environment.NewLine;
                XmlWriter xmlwrite = XmlWriter.Create("plugin.xml", xmlWriterSettings);
                xmldoc.Save(xmlwrite);
                xmlwrite.Close();
                removePluginWorker.CancelAsync();
            }

            catch
            {
                MessageBox.Show("Something maybe wrong with your settings");
            }
        }