Exemple #1
0
        public SelectionSpec[] GetStorageTraversalSpec()
        {
            SelectionSpec ssFolders = new SelectionSpec();

            ssFolders.name = "visitFolders";

            TraversalSpec datacenterSpec = new TraversalSpec();

            datacenterSpec.name      = "dcTodf";
            datacenterSpec.type      = "Datacenter";
            datacenterSpec.path      = "datastoreFolder";
            datacenterSpec.skip      = false;
            datacenterSpec.selectSet = new SelectionSpec[] { ssFolders };

            TraversalSpec visitFolder = new TraversalSpec();

            visitFolder.type = "Folder";
            visitFolder.name = "visitFolders";
            visitFolder.path = "childEntity";
            visitFolder.skip = false;

            SelectionSpec[] ssSpecList = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            ssSpecList[0] = datacenterSpec;
            ssSpecList[1] = ssFolders;

            visitFolder.selectSet = ssSpecList;
            return(new SelectionSpec[] { visitFolder });
        }
 private PropertyFilterSpec[] createPFSForRecentTasks(
    ManagedObjectReference taskManagerRef) {      
    PropertySpec pSpec = new PropertySpec();
    pSpec.all= false;
    pSpec.type="Task";
    pSpec.pathSet=
          new String[]
         {"info.entity",
          "info.entityName",
          "info.name",
          "info.state",
          "info.cancelled",
          "info.error"};
    
    ObjectSpec oSpec = new ObjectSpec();
    oSpec.obj = taskManagerRef;
    oSpec.skip= false;
    oSpec.skipSpecified = true;
    
    TraversalSpec tSpec = new TraversalSpec();
    tSpec.type="TaskManager";
    tSpec.path="recentTask";
    tSpec.skip= false;
          
    
    oSpec.selectSet=new SelectionSpec[]{tSpec};      
    
    PropertyFilterSpec pfSpec = new PropertyFilterSpec();      
    pfSpec.propSet=new PropertySpec[]{pSpec};      
    pfSpec.objectSet=new ObjectSpec[]{oSpec};
    
    return new PropertyFilterSpec[]{pfSpec};
 }
Exemple #3
0
        /// <summary>
        /// Create TraversalSpec for Datacenter
        /// </summary>
        /// <returns>SelectionSpec[]</returns>
        private SelectionSpec[] buildTraversalSpecForDatastoreToDatacenter()
        {
            // For Folder -> Folder recursion
            SelectionSpec sspecvfolders = new SelectionSpec();

            sspecvfolders.name = "VisitFolders";

            TraversalSpec visitFolders = new TraversalSpec();

            visitFolders.type      = "Folder";
            visitFolders.path      = "parent";
            visitFolders.skip      = false;
            visitFolders.name      = "VisitFolders";
            visitFolders.selectSet = new SelectionSpec[] { sspecvfolders };

            TraversalSpec datastoreToFolder = new TraversalSpec();

            datastoreToFolder.type      = "Datastore";
            datastoreToFolder.path      = "parent";
            datastoreToFolder.skip      = false;
            datastoreToFolder.name      = "DatastoreToFolder";
            datastoreToFolder.selectSet = new SelectionSpec[] { sspecvfolders };

            SelectionSpec[] speclist = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            speclist[0] = datastoreToFolder;
            speclist[1] = visitFolders;
            return(speclist);
        }
   /**
   * Create Property Collector Filter to get names of all 
   * ScheduledTasks the ScheduledTaskManager has.
   * 
   * @return PropertyFilterSpec to get properties
   */
   private PropertyFilterSpec createTaskPropertyFilterSpec() {
      // The traversal spec traverses the "scheduledTask" property of 
      // ScheduledTaskManager to get names of ScheduledTask ManagedEntities
      // A Traversal Spec allows traversal into a ManagedObjects 
      // using a single attribute of the managedObject
      TraversalSpec scheduledTaskTraversal =  new TraversalSpec(); 
      
      scheduledTaskTraversal.type=_scheduleManager.type;
      scheduledTaskTraversal.path= "scheduledTask";
      
      // We want to get values of the scheduleTask property
      // of the scheduledTaskManager, which are the ScheduledTasks
      // so we set skip = false. 
      scheduledTaskTraversal.skip= false;
       scheduledTaskTraversal.skipSpecified = true;
      
      // no further traversal needed once we get to scheduled task list
      scheduledTaskTraversal.selectSet=new SelectionSpec[] { };
      
      scheduledTaskTraversal.name="scheduleManagerToScheduledTasks";
      
      // Setup a PropertySpec to return names of Scheduled Tasks so 
      // we can find the named ScheduleTask ManagedEntity to delete
      // Name is an attribute of ScheduledTaskInfo so 
      // the path set will contain "info.name"
      PropertySpec propSpec = new PropertySpec(); 
      propSpec.all= false;
      propSpec.allSpecified= true;
      propSpec.pathSet= new String[] { "info.name" };
      propSpec.type="ScheduledTask";
      
      // PropertySpecs are wrapped in a PropertySpec array
      // since we only have a propertySpec for the ScheduledTask,
      // the only values we will get back are names of scheduledTasks
      PropertySpec[] propSpecArray = new PropertySpec[] { propSpec };
      
      // Create an Object Spec to specify the starting or root object
      // and the SelectionSpec to traverse to each ScheduledTask in the
      // array of scheduledTasks in the ScheduleManager
      ObjectSpec objSpec = new ObjectSpec();
      objSpec.obj=_scheduleManager;
      objSpec.selectSet= new SelectionSpec[] { scheduledTaskTraversal } ;
      
      // Set skip = true so properties of ScheduledTaskManager 
      // are not returned, and only values of info.name property of 
      // each ScheduledTask is returned
      objSpec.skip = true;
      objSpec.skipSpecified= true;

      // ObjectSpecs used in PropertyFilterSpec are wrapped in an array
      ObjectSpec[] objSpecArray = new ObjectSpec[] { objSpec };
      
      // Create the PropertyFilter spec with 
      // ScheduledTaskManager as "root" object
      PropertyFilterSpec spec = new PropertyFilterSpec();
      spec.propSet = propSpecArray;
      spec.objectSet= objSpecArray;
      return spec;
   }
Exemple #5
0
        public async Task <IEnumerable <ManagedEntity> > GetVMs()
        {
            if (session == null)
            {
                throw new Exception("Not Logged");
            }

            ////////////////////////////////////////////////////////

            var dc2vmFolder = new TraversalSpec
            {
                type      = "Datacenter",
                path      = "vmFolder",
                selectSet = new SelectionSpec[] { new SelectionSpec {
                                                      name = "folderTSpec"
                                                  } }
            };

            var folderTS = new TraversalSpec
            {
                name      = "folderTSpec",
                type      = "Folder",
                path      = "childEntity",
                selectSet = new SelectionSpec[] { new SelectionSpec {
                                                      name = "folderTSpec"
                                                  }, dc2vmFolder }
            };

            var ospec = new ObjectSpec
            {
                obj       = serviceContent.rootFolder,
                skip      = false,
                selectSet = new SelectionSpec[] { folderTS }
            };

            /////////////////////////////////////////////

            var vmSp = new PropertySpec
            {
                type    = "VirtualMachine",
                all     = false,
                pathSet = new string[] { "name" }
            };

            ////////////////////////////////////////////

            var fs = new PropertyFilterSpec {
                objectSet = new ObjectSpec[] { ospec }, propSet = new PropertySpec[] { vmSp }
            };

            var vmProps = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { fs });

            return(vmProps.returnval
                   .Select(obj => new ManagedEntity {
                MoRef = obj.obj.Value, Type = obj.obj.type, Name = (string)obj.propSet[0].val
            }));
        }
        public override Dictionary <string, InventoryNode> LoadInventory()
        {
            TraversalSpec traversalSpec1 = new TraversalSpec();

            traversalSpec1.name      = "datacenterHostTraversalSpec";
            traversalSpec1.type      = "Datacenter";
            traversalSpec1.path      = "vmFolder";
            traversalSpec1.skip      = false;
            traversalSpec1.selectSet = new SelectionSpec[1]
            {
                new SelectionSpec()
            };
            traversalSpec1.selectSet[0].name = "folderTraversalSpec";
            TraversalSpec traversalSpec2 = new TraversalSpec();

            traversalSpec2.name      = "folderTraversalSpec";
            traversalSpec2.type      = "Folder";
            traversalSpec2.path      = "childEntity";
            traversalSpec2.skip      = false;
            traversalSpec2.selectSet = new SelectionSpec[2]
            {
                new SelectionSpec(),
                (SelectionSpec)traversalSpec1
            };
            traversalSpec2.selectSet[0].name = "folderTraversalSpec";
            PropertySpec[] propertySpecArray = new PropertySpec[1] {
                new PropertySpec()
            };
            propertySpecArray[0].all     = false;
            propertySpecArray[0].pathSet = new string[2]
            {
                "name",
                "parent"
            };
            propertySpecArray[0].type = "ManagedEntity";
            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();

            propertyFilterSpec.propSet   = propertySpecArray;
            propertyFilterSpec.objectSet = new ObjectSpec[1]
            {
                new ObjectSpec()
            };
            propertyFilterSpec.objectSet[0].obj       = this._vimService.RootFolder.ManagedObject;
            propertyFilterSpec.objectSet[0].skip      = false;
            propertyFilterSpec.objectSet[0].selectSet = new SelectionSpec[1]
            {
                (SelectionSpec)traversalSpec2
            };
            this.BuildInventoryNodesDictionary(this._vimService.Service.RetrieveProperties(this._vimService.PropertyCollector, new PropertyFilterSpec[1]
            {
                propertyFilterSpec
            }));
            this.SetInventoryNodeChilds();
            this.RemoveNotRequiredManagedObjects();
            return(this._vcInventoryNodes);
        }
Exemple #7
0
        private async Task <NetVimClient.ObjectContent[]> LoadReferenceTree(VimPortTypeClient client)
        {
            var plan = new TraversalSpec
            {
                name      = "FolderTraverseSpec",
                type      = "Folder",
                path      = "childEntity",
                selectSet = new SelectionSpec[] {
                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "datastore",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "Folder",
                        path      = "childEntity",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    }
                }
            };

            var props = new PropertySpec[]
            {
                new PropertySpec
                {
                    type    = "Datastore",
                    pathSet = new string[] { "name", "browser" }
                }
            };

            ObjectSpec objectspec = new ObjectSpec();

            objectspec.obj       = _sic.rootFolder;
            objectspec.selectSet = new SelectionSpec[] { plan };

            PropertyFilterSpec filter = new PropertyFilterSpec();

            filter.propSet   = props;
            filter.objectSet = new ObjectSpec[] { objectspec };

            PropertyFilterSpec[]       filters  = new PropertyFilterSpec[] { filter };
            RetrievePropertiesResponse response = await client.RetrievePropertiesAsync(_props, filters);

            return(response.returnval);
        }
Exemple #8
0
        private PropertyFilterSpec[] createPFSForRecentTasks(ManagedObjectReference taskManagerRef)
        {
            PropertySpec pSpec = new PropertySpec();

            pSpec.all     = false;
            pSpec.type    = "Task";
            pSpec.pathSet = new String[]
            {
                "info.entity",
                "info.descriptionId",
                "info.name",
                "info.state",
                "info.progress",
                "info.cancelled",
                "info.error",
                "info.key"
            };

            ObjectSpec oSpec = new ObjectSpec();

            oSpec.obj           = taskManagerRef;
            oSpec.skip          = false;
            oSpec.skipSpecified = true;

            TraversalSpec tSpec = new TraversalSpec();

            tSpec.type = "TaskManager";
            tSpec.path = "recentTask";
            tSpec.skip = false;


            oSpec.selectSet = new SelectionSpec[] { tSpec };

            PropertyFilterSpec pfSpec = new PropertyFilterSpec();

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

            return(new PropertyFilterSpec[] { pfSpec });
        }
Exemple #9
0
        public async Task <IEnumerable <ManagedEntity> > GetPools()
        {
            if (session == null)
            {
                throw new Exception("Not Logged");
            }

            ////////////////////////////////////////////////////////

            var dc2hostFolder = new TraversalSpec
            {
                type      = "Datacenter",
                path      = "hostFolder",
                selectSet = new SelectionSpec[] { new SelectionSpec {
                                                      name = "ressourcesTSpec"
                                                  } }
            };

            var cr2resourcePool = new TraversalSpec
            {
                type      = "ComputeResource",
                path      = "resourcePool",
                selectSet = new SelectionSpec[] { new SelectionSpec {
                                                      name = "ressourcesTSpec"
                                                  } }
            };

            var rp2rp = new TraversalSpec
            {
                type      = "ResourcePool",
                path      = "resourcePool",
                selectSet = new SelectionSpec[] { new SelectionSpec {
                                                      name = "ressourcesTSpec"
                                                  } }
            };

            var folderTS = new TraversalSpec
            {
                name      = "ressourcesTSpec",
                type      = "Folder",
                path      = "childEntity",
                selectSet = new SelectionSpec[] { new SelectionSpec {
                                                      name = "ressourcesTSpec"
                                                  }, dc2hostFolder, cr2resourcePool, rp2rp }
            };


            var ospec = new ObjectSpec
            {
                obj       = serviceContent.rootFolder,
                skip      = false,
                selectSet = new SelectionSpec[] { folderTS }
            };

            /////////////////////////////////////////////

            var dcSp = new PropertySpec
            {
                type    = "Datacenter",
                all     = false,
                pathSet = new string[] { "parent", "name" }
            };

            var folderSp = new PropertySpec
            {
                type    = "Folder",
                all     = false,
                pathSet = new string[] { "parent", "name" }
            };

            var computeSp = new PropertySpec
            {
                type    = "ComputeResource",
                all     = false,
                pathSet = new string[] { "parent", "name" }
            };

            var rpSp = new PropertySpec
            {
                type    = "ResourcePool",
                all     = false,
                pathSet = new string[] { "parent", "name" }
            };

            ////////////////////////////////////////////

            var fs = new PropertyFilterSpec {
                objectSet = new ObjectSpec[] { ospec }, propSet = new PropertySpec[] { dcSp, folderSp, computeSp, rpSp }
            };

            var vmProps = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { fs });

            return(vmProps.returnval
                   .Select(obj =>
                           new ManagedEntity
            {
                MoRef = obj.obj.Value,
                Type = obj.obj.type,
                Name = (string)obj.propSet.FirstOrDefault(o => o.name == "name")?.val,
                Parent = ((ManagedObjectReference)obj.propSet.FirstOrDefault(o => o.name == "parent")?.val)?.Value
            }));
        }
 ///<summary>
 ///Specifications to find all the Datacenters and
 ///retrieve their name, vmFolder and hostFolder values.
 ///</summary>
 private static ObjectContent[] getDatacenters()
 {
     // The PropertySpec object specifies what properties
     // to retrieve from what type of Managed Object
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = "Datacenter";
     pSpec.pathSet = new String[] {
       "name", "vmFolder", "hostFolder" };
     // The following TraversalSpec and SelectionSpec
     // objects create the following relationship:
     //
     // a. Folder -> childEntity
     //   b. recurse to a.
     //
     // This specifies that starting with a Folder
     // managed object, traverse through its childEntity
     // property. For each element in the childEntity
     // property, process by going back to the 'parent'
     // TraversalSpec.
     // SelectionSpec to cause Folder recursion
     SelectionSpec recurseFolders = new SelectionSpec();
     // The name of a SelectionSpec must refer to a
     // TraversalSpec with the same name value.
     recurseFolders.name = "folder2childEntity";
     // Traverse from a Folder through the 'childEntity' property
     TraversalSpec folder2childEntity = new TraversalSpec();
     // Select the Folder type managed object
     folder2childEntity.type = "Folder";
     // Traverse through the childEntity property of the Folder
     folder2childEntity.path = "childEntity";
     // Name this TraversalSpec so the SelectionSpec above
     // can refer to it
     folder2childEntity.name = recurseFolders.name;
     // Add the SelectionSpec above to this traversal so that
     // we will recurse through the tree via the childEntity
     // property
     folder2childEntity.selectSet = new SelectionSpec[] {
   recurseFolders };
     // The ObjectSpec object specifies the starting object and
     // any TraversalSpecs used to specify other objects
     // for consideration
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = _sic.rootFolder;
     // We set skip to true because we are not interested
     // in retrieving properties from the root Folder
     oSpec.skip = true;
     // Specify the TraversalSpec. This is what causes
     // other objects besides the starting object to
     // be considered part of the collection process
     oSpec.selectSet = new SelectionSpec[] { folder2childEntity };
     // The PropertyFilterSpec object is used to hold the
     // ObjectSpec and PropertySpec objects 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
     return _service.RetrieveProperties(
           _sic.propertyCollector,
           new PropertyFilterSpec[] { pfSpec });
 }
        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);
        }
 private static ObjectContent[] getHosts(ManagedObjectReference dcMoRef)
 {
     // PropertySpec specifies what properties to
     // retrieve from what type of Managed Object
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = "HostSystem";
     pSpec.pathSet = new String[] { "name", "runtime.connectionState" };
     SelectionSpec recurseFolders = new SelectionSpec();
     recurseFolders.name = "folder2childEntity";
     TraversalSpec computeResource2host = new TraversalSpec();
     computeResource2host.type = "ComputeResource";
     computeResource2host.path = "host";
     TraversalSpec folder2childEntity = new TraversalSpec();
     folder2childEntity.type = "Folder";
     folder2childEntity.path = "childEntity";
     folder2childEntity.name = recurseFolders.name;
     // Add BOTH of the specifications to this specification
     folder2childEntity.selectSet = new SelectionSpec[] { recurseFolders };
     // Traverse from a Datacenter through
     // the 'hostFolder' property
     TraversalSpec dc2hostFolder = new TraversalSpec();
     dc2hostFolder.type = "Datacenter";
     dc2hostFolder.path = "hostFolder";
     dc2hostFolder.selectSet = new SelectionSpec[] { folder2childEntity };
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = dcMoRef;
     oSpec.skip = true;
     oSpec.selectSet = new SelectionSpec[] { dc2hostFolder };
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { pSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     return _service.RetrieveProperties(
           _sic.propertyCollector,
              new PropertyFilterSpec[] { pfSpec });
 }
        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);
        }
        public static ManagedObjectReference GetCluster(string clusterName,
                                                        VimAuthenticationHelper vimConnection)
        {
            var vimPortType     = vimConnection.VimPortType;
            var serviceContent  = vimConnection.ServiceContent;
            var morefType       = "ClusterComputeResource";
            var morefProperties = new string[] { "name" };
            var objectContents  = new List <ObjectContent>();
            var containerView   = vimPortType.CreateContainerView(
                new CreateContainerViewRequest(
                    serviceContent.viewManager,
                    serviceContent.rootFolder,
                    new string[] { morefType },
                    true));

            var spec = new PropertyFilterSpec();

            spec.propSet                 = new PropertySpec[] { new PropertySpec() };
            spec.propSet[0].all          = morefProperties == null || morefProperties.Length == 0;
            spec.propSet[0].allSpecified = spec.propSet[0].all;
            spec.propSet[0].type         = morefType;
            spec.propSet[0].pathSet      = morefProperties;
            spec.objectSet               = new ObjectSpec[] { new ObjectSpec() };

            var ts = new TraversalSpec();

            ts.name = "view";
            ts.path = "view";
            ts.skip = false;
            ts.type = "ContainerView";
            spec.objectSet[0].obj       = containerView.returnval;
            spec.objectSet[0].selectSet = new SelectionSpec[] { ts };

            var result = vimPortType.RetrievePropertiesEx(
                new RetrievePropertiesExRequest(
                    serviceContent.propertyCollector,
                    new PropertyFilterSpec[] { spec },
                    new RetrieveOptions()));

            if (result != null)
            {
                var token = result.returnval.token;
                objectContents.AddRange(result.returnval.objects);
                while (!string.IsNullOrWhiteSpace(token))
                {
                    var retrieveResult = vimPortType.ContinueRetrievePropertiesEx(
                        serviceContent.propertyCollector, token);
                    if (retrieveResult != null)
                    {
                        token = retrieveResult.token;
                        objectContents.AddRange(retrieveResult.objects);
                    }
                }
            }
            foreach (var content in objectContents)
            {
                if (content.propSet[0].val.ToString() == clusterName)
                {
                    return(content.obj);
                }
            }
            throw new Exception("Could not find cluster with name '" +
                                clusterName + "'");
        }
Exemple #15
0
        private async Task LoadCache()
        {
            var plan = new TraversalSpec
            {
                name      = "FolderTraverseSpec",
                type      = "Folder",
                path      = "childEntity",
                selectSet = new SelectionSpec[] {
                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "networkFolder",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "vmFolder",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "datastore",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "Folder",
                        path      = "childEntity",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },
                }
            };

            var props = new PropertySpec[]
            {
                new PropertySpec
                {
                    type    = "DistributedVirtualSwitch",
                    pathSet = new string[] { "name", "uuid", "config.uplinkPortgroup" }
                },

                new PropertySpec
                {
                    type    = "DistributedVirtualPortgroup",
                    pathSet = new string[] { "name", "host", "config.distributedVirtualSwitch" }
                },

                new PropertySpec
                {
                    type    = "Network",
                    pathSet = new string[] { "name", "host" }
                },

                new PropertySpec
                {
                    type    = "VirtualMachine",
                    pathSet = new string[] { "name", "config.uuid", "summary.runtime.powerState", "guest.net" }
                },

                new PropertySpec
                {
                    type    = "Datastore",
                    pathSet = new string[] { "name", "browser" }
                }
            };

            ObjectSpec objectspec = new ObjectSpec();

            objectspec.obj       = _sic.rootFolder;
            objectspec.selectSet = new SelectionSpec[] { plan };

            PropertyFilterSpec filter = new PropertyFilterSpec();

            filter.propSet   = props;
            filter.objectSet = new ObjectSpec[] { objectspec };

            PropertyFilterSpec[] filters = new PropertyFilterSpec[] { filter };

            _logger.LogInformation($"Starting RetrieveProperties at {DateTime.UtcNow}");
            RetrievePropertiesResponse response = await _client.RetrievePropertiesAsync(_props, filters);

            _logger.LogInformation($"Finished RetrieveProperties at {DateTime.UtcNow}");

            _logger.LogInformation($"Starting LoadMachineCache at {DateTime.UtcNow}");
            await LoadMachineCache(response.returnval.FindType("VirtualMachine"));

            _logger.LogInformation($"Finished LoadMachineCache at {DateTime.UtcNow}");

            _logger.LogInformation($"Starting LoadNetworkCache at {DateTime.UtcNow}");
            LoadNetworkCache(
                response.returnval.FindType("DistributedVirtualSwitch"),
                response.returnval.Where(o => o.obj.type.EndsWith("Network") || o.obj.type.EndsWith("DistributedVirtualPortgroup")).ToArray());
            _logger.LogInformation($"Finished LoadNetworkCache at {DateTime.UtcNow}");

            _logger.LogInformation($"Starting LoadDatastoreCache at {DateTime.UtcNow}");
            LoadDatastoreCache(response.returnval.FindType("Datastore"));
            _logger.LogInformation($"Finished LoadDatastoreCache at {DateTime.UtcNow}");
        }
Exemple #16
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);
        }
        public IReadOnlyCollection <string> GetVirtualMachineNames()
        {
            EnsureConnected();

            ServiceContent         serviceContent    = _connection.ServiceContent;
            ManagedObjectReference viewManager       = serviceContent.viewManager;
            ManagedObjectReference propertyCollector = serviceContent.propertyCollector;

            ManagedObjectReference containerView = _connection.Service.CreateContainerView(viewManager,
                                                                                           serviceContent.rootFolder, new[] { "VirtualMachine" }, true);

            TraversalSpec traversalSpec = new TraversalSpec()
            {
                name = "traverseEntities",
                type = "ContainerView",
                path = "view",
                skip = false
            };

            ObjectSpec objectSpec = new ObjectSpec
            {
                obj  = containerView,
                skip = true
            };

            objectSpec.selectSet = new SelectionSpec[] { traversalSpec };

            PropertySpec propertySpec = new PropertySpec()
            {
                type    = "VirtualMachine",
                pathSet = new [] { "name" }
            };

            PropertyFilterSpec filter = new PropertyFilterSpec()
            {
                objectSet = new[] { objectSpec },
                propSet   = new[] { propertySpec }
            };

            RetrieveOptions retrieveOptions = new RetrieveOptions();
            RetrieveResult  properties      = _connection.Service.RetrievePropertiesEx(propertyCollector, new[] { filter },
                                                                                       retrieveOptions);


            var virtualMachineNames = new List <string>();

            if (properties != null)
            {
                foreach (ObjectContent objectContent in properties.objects)
                {
                    DynamicProperty[] dynamicProperties = objectContent.propSet;
                    if (dynamicProperties != null)
                    {
                        foreach (DynamicProperty dynamicProperty in dynamicProperties)
                        {
                            string virtualMachineName = (string)dynamicProperty.val;
                            string path = dynamicProperty.name;
                            virtualMachineNames.Add(virtualMachineName);
                        }
                    }
                }
            }

            return(virtualMachineNames);
        }
 static ObjectContent[] getVMInfo(ManagedObjectReference vmMoRef)
 {
     // This spec selects VirtualMachine information
     PropertySpec vmPropSpec = new PropertySpec();
     vmPropSpec.type = "VirtualMachine";
     vmPropSpec.pathSet = new String[]{"name","config.guestFullName","summary.quickStats.overallCpuUsage","summary.quickStats.hostMemoryUsage","summary.quickStats.guestMemoryUsage"};
     PropertySpec hostPropSpec = new PropertySpec();
     hostPropSpec.type = "HostSystem";
     hostPropSpec.pathSet = new String[] { "name", "summary.quickStats.overallCpuUsage", "summary.quickStats.overallMemoryUsage", };
     TraversalSpec hostTraversalSpec = new TraversalSpec();
     hostTraversalSpec.type = "VirtualMachine";
     hostTraversalSpec.path = "runtime.host";
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = vmMoRef;
     oSpec.selectSet = new SelectionSpec[]{hostTraversalSpec};
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[]{vmPropSpec,hostPropSpec};
     pfSpec.objectSet = new ObjectSpec[]{oSpec};
     return _service.RetrieveProperties(_sic.propertyCollector,new PropertyFilterSpec[]{pfSpec});
 }
Exemple #19
0
        /// <summary>
        /// Get Container contents for all childEntities accessible from rootFolder
        /// </summary>
        public void GetContainerContents()
        {
            // 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";

            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet                = propspecary;
            spec.objectSet              = new ObjectSpec[] { new ObjectSpec() };
            spec.objectSet[0].obj       = _rootFolder;
            spec.objectSet[0].skip      = false;
            spec.objectSet[0].selectSet = selectionSpecs;

            // Recursively get all ManagedEntity ManagedObjectReferences
            // and the "name" property for all ManagedEntities retrieved
            ObjectContent[] ocary =
                _service.RetrieveProperties(
                    _propCol, new PropertyFilterSpec[] { spec }
                    );

            // If we get contents back. print them out.
            if (ocary != null)
            {
                ObjectContent          oc    = null;
                ManagedObjectReference mor   = null;
                DynamicProperty[]      pcary = null;
                DynamicProperty        pc    = null;
                for (int oci = 0; oci < ocary.Length; oci++)
                {
                    oc    = ocary[oci];
                    mor   = oc.obj;
                    pcary = oc.propSet;

                    Console.WriteLine("Object Type : " + mor.type);
                    Console.WriteLine("Reference Value : " + mor.Value);

                    if (pcary != null)
                    {
                        for (int pci = 0; pci < pcary.Length; pci++)
                        {
                            pc = pcary[pci];
                            Console.WriteLine("   Property Name : " + pc.name);
                            if (pc != null)
                            {
                                if (!pc.val.GetType().IsArray)
                                {
                                    Console.WriteLine("   Property Value : " + pc.val);
                                }
                                else
                                {
                                    Array ipcary = (Array)pc.val;
                                    Console.WriteLine("Val : " + pc.val);
                                    for (int ii = 0; ii < ipcary.Length; ii++)
                                    {
                                        object oval = ipcary.GetValue(ii);
                                        if (oval.GetType().Name.IndexOf("ManagedObjectReference") >= 0)
                                        {
                                            ManagedObjectReference imor = (ManagedObjectReference)oval;

                                            Console.WriteLine("Inner Object Type : " + imor.type);
                                            Console.WriteLine("Inner Reference Value : " + imor.Value);
                                        }
                                        else
                                        {
                                            Console.WriteLine("Inner Property Value : " + oval);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("No Managed Entities retrieved!");
            }
        }
 ///<summary>
 /// Specifications to find all Networks in a Datacenter,
 /// list all VMs on each Network,
 /// list all Hosts on each Network
 ///</summary>
 private static ObjectContent[] getNetworkInfo(
     ManagedObjectReference dcMoRef)
 {
     // PropertySpec specifies what properties to
     // retrieve from what type of Managed Object
     // This spec selects the Network name
     PropertySpec networkPropSpec = new PropertySpec();
     networkPropSpec.type = "Network";
     networkPropSpec.pathSet = new String[] { "name" };
     // This spec selects HostSystem information
     PropertySpec hostPropSpec = new PropertySpec();
     hostPropSpec.type = "HostSystem";
     hostPropSpec.pathSet = new String[] { "network", "name",
         "summary.hardware", "runtime.connectionState",
         "summary.overallStatus", "summary.quickStats" };
     // This spec selects VirtualMachine information
     PropertySpec vmPropSpec = new PropertySpec();
     vmPropSpec.type = "VirtualMachine";
     vmPropSpec.pathSet = new String[] { "network", "name",
         "runtime.host", "runtime.powerState",
         "summary.overallStatus", "summary.quickStats" };
     // The following TraversalSpec and SelectionSpec
     // objects create the following relationship:
     //
     // a. Datacenter -> network
     //   b. Network -> host
     //   c. Network -> vm
     // b. Traverse from a Network through the 'host' property
     TraversalSpec network2host = new TraversalSpec();
     network2host.type = "Network";
     network2host.path = "host";
     // c. Traverse from a Network through the 'vm' property
     TraversalSpec network2vm = new TraversalSpec();
     network2vm.type = "Network";
     network2vm.path = "vm";
     // a. Traverse from a Datacenter through
     // the 'network' property
     TraversalSpec dc2network = new TraversalSpec();
     dc2network.type = "Datacenter";
     dc2network.path = "network";
     dc2network.selectSet = new SelectionSpec[] {
         // Add b. traversal
         network2host,
         // Add c. traversal
         network2vm };
     // ObjectSpec specifies the starting object and
     // any TraversalSpecs used to specify other objects
     // for consideration
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = dcMoRef;
     oSpec.skip = true;
     oSpec.selectSet = new SelectionSpec[] { dc2network };
     // PropertyFilterSpec is used to hold the ObjectSpec and
     // PropertySpec for the call
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { networkPropSpec,
         hostPropSpec, vmPropSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     // RetrieveProperties() returns the properties
     // selected from the PropertyFilterSpec
     return _service.RetrieveProperties(
             _sic.propertyCollector,
             new PropertyFilterSpec[] { pfSpec });
 }
 private static ObjectContent[] getVMInfo(ManagedObjectReference vmMoRef)
 {
     // This spec selects VirtualMachine information
     PropertySpec vmPropSpec = new PropertySpec();
     vmPropSpec.type = "VirtualMachine";
     vmPropSpec.pathSet = new String[] {
       "name",
       "config.guestFullName",
       "config.hardware.memoryMB",
       "config.hardware.numCPU",
       "guest.toolsStatus",
       "guestHeartbeatStatus",
       "guest.ipAddress",
       "guest.hostName",
       "runtime.powerState",
       "summary.quickStats.overallCpuUsage",
       "summary.quickStats.hostMemoryUsage",
       "summary.quickStats.guestMemoryUsage", };
     PropertySpec hostPropSpec = new PropertySpec();
     hostPropSpec.type = "HostSystem";
     hostPropSpec.pathSet = new String[] { "name" };
     PropertySpec taskPropSpec = new PropertySpec();
     taskPropSpec.type = "Task";
     taskPropSpec.pathSet = new String[] { "info.name", "info.completeTime" };
     PropertySpec datastorePropSpec = new PropertySpec();
     datastorePropSpec.type = "Datastore";
     datastorePropSpec.pathSet = new String[] { "info" };
     PropertySpec networkPropSpec = new PropertySpec();
     networkPropSpec.type = "Network";
     networkPropSpec.pathSet = new String[] { "name" };
     TraversalSpec hostTraversalSpec = new TraversalSpec();
     hostTraversalSpec.type = "VirtualMachine";
     hostTraversalSpec.path = "runtime.host";
     TraversalSpec taskTravesalSpec = new TraversalSpec();
     taskTravesalSpec.type = "VirtualMachine";
     taskTravesalSpec.path = "recentTask";
     TraversalSpec datastoreTraversalSpec = new TraversalSpec();
     datastoreTraversalSpec.type = "VirtualMachine";
     datastoreTraversalSpec.path = "datastore";
     TraversalSpec networkTraversalSpec = new TraversalSpec();
     networkTraversalSpec.type = "VirtualMachine";
     networkTraversalSpec.path = "network";
     // ObjectSpec specifies the starting object and
     // any TraversalSpecs used to specify other objects
     // for consideration
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = vmMoRef;
     // Add the TraversalSpec objects to the ObjectSpec
     // This specifies what additional object we want to
     // consider during the process.
     oSpec.selectSet = new SelectionSpec[] {
     hostTraversalSpec,
     taskTravesalSpec,
     datastoreTraversalSpec,
     networkTraversalSpec };
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     // Add the PropertySpec objects to the PropertyFilterSpec
     // This specifies what data we want to collect while
     // processing the found objects from the ObjectSpec
     pfSpec.propSet = new PropertySpec[] {
     vmPropSpec,
     hostPropSpec,
     taskPropSpec,
     datastorePropSpec,
     networkPropSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     return _service.RetrieveProperties(
        _sic.propertyCollector,
        new PropertyFilterSpec[] { pfSpec });
 }
Exemple #22
0
        private async Task <ObjectContent[]> LoadReferenceTree(VimPortTypeClient client)
        {
            var plan = new TraversalSpec
            {
                name      = "FolderTraverseSpec",
                type      = "Folder",
                path      = "childEntity",
                selectSet = new SelectionSpec[] {
                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "hostFolder",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "networkFolder",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "ComputeResource",
                        path      = "resourcePool",
                        selectSet = new SelectionSpec[]
                        {
                            new TraversalSpec
                            {
                                type = "ResourcePool",
                                path = "resourcePool"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type = "ComputeResource",
                        path = "host"
                    },

                    new TraversalSpec()
                    {
                        type = "Folder",
                        path = "childEntity"
                    }
                }
            };

            var props = new PropertySpec[]
            {
                new PropertySpec
                {
                    type    = "Datacenter",
                    pathSet = new string[] { "name", "parent", "vmFolder" }
                },

                new PropertySpec
                {
                    type    = "ComputeResource",
                    pathSet = new string[] { "name", "parent", "resourcePool", "host" }
                },

                new PropertySpec
                {
                    type    = "HostSystem",
                    pathSet = new string[] { "configManager" }
                },

                new PropertySpec
                {
                    type    = "ResourcePool",
                    pathSet = new string[] { "name", "parent", "resourcePool" }
                },

                new PropertySpec
                {
                    type    = "DistributedVirtualSwitch",
                    pathSet = new string[] { "name", "parent", "uuid" }
                },

                new PropertySpec
                {
                    type    = "DistributedVirtualPortgroup",
                    pathSet = new string[] { "name", "parent", "config" }
                }
            };

            ObjectSpec objectspec = new ObjectSpec();

            objectspec.obj       = _sic.rootFolder;
            objectspec.selectSet = new SelectionSpec[] { plan };

            PropertyFilterSpec filter = new PropertyFilterSpec();

            filter.propSet   = props;
            filter.objectSet = new ObjectSpec[] { objectspec };

            PropertyFilterSpec[]       filters  = new PropertyFilterSpec[] { filter };
            RetrievePropertiesResponse response = await client.RetrievePropertiesAsync(_props, filters);

            return(response.returnval);
        }
Exemple #23
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;
        }
Exemple #24
0
        public static PropertyFilterSpec[] InitFilter(ManagedObjectReference rootMOR)
        {
            var plan = new TraversalSpec
            {
                name      = "FolderTraverseSpec",
                type      = "Folder",
                path      = "childEntity",
                selectSet = new SelectionSpec[] {
                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "hostFolder",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "Datacenter",
                        path      = "networkFolder",
                        selectSet = new SelectionSpec[] {
                            new SelectionSpec {
                                name = "FolderTraverseSpec"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type      = "ComputeResource",
                        path      = "resourcePool",
                        selectSet = new SelectionSpec[]
                        {
                            new TraversalSpec
                            {
                                type = "ResourcePool",
                                path = "resourcePool"
                            }
                        }
                    },

                    new TraversalSpec()
                    {
                        type = "ComputeResource",
                        path = "host"
                    }
                }
            };

            var props = new PropertySpec[]
            {
                new PropertySpec
                {
                    type    = "Datacenter",
                    pathSet = new string[] { "name", "parent", "vmFolder" }
                },

                new PropertySpec
                {
                    type    = "ComputeResource",
                    pathSet = new string[] { "name", "parent", "resourcePool", "host" }
                },

                new PropertySpec
                {
                    type    = "HostSystem",
                    pathSet = new string[] { "configManager" }
                },

                new PropertySpec
                {
                    type    = "ResourcePool",
                    pathSet = new string[] { "name", "parent", "resourcePool" }
                },

                new PropertySpec
                {
                    type    = "DistributedVirtualSwitch",
                    pathSet = new string[] { "name", "parent", "uuid" }
                },

                new PropertySpec
                {
                    type    = "DistributedVirtualPortgroup",
                    pathSet = new string[] { "name", "parent", "config" }
                }
            };

            ObjectSpec objectspec = new ObjectSpec();

            objectspec.obj       = rootMOR;
            objectspec.selectSet = new SelectionSpec[] { plan };

            PropertyFilterSpec filter = new PropertyFilterSpec();

            filter.propSet   = props;
            filter.objectSet = new ObjectSpec[] { objectspec };

            return(new PropertyFilterSpec[] { filter });
        }
        /// <summary>
        /// Return MOR 
        /// </summary>
        /// <param name="folder">ManagedObjectReference</param>
        /// <param name="type">string</param>
        /// <param name="name">string</param>
        /// <returns>ManagedObjectReference</returns>
        public ManagedObjectReference GetMOREFsInFolderByType(ManagedObjectReference folder, string type,
                                                             string name)
        {

            String propName = "name";
            string[] type1 = new string[2];
            type1[0] = type;
            ManagedObjectReference viewManager = cb._connection._sic.viewManager;
            ManagedObjectReference containerView =
                  cb._connection._service.CreateContainerView(viewManager, folder,
                        type1, true);

            PropertySpec propertySpec = new PropertySpec();
            propertySpec.all = false;
            propertySpec.type = type;
            propertySpec.pathSet = new string[] { propName };

            TraversalSpec ts = new TraversalSpec();
            ts.name = "view";
            ts.path = "view";
            ts.skip = false;
            ts.type = "ContainerView";

            // Now create Object Spec
            ObjectSpec objectSpec = new ObjectSpec();
            objectSpec.obj = containerView;
            objectSpec.skip = true;
            objectSpec.selectSet = new SelectionSpec[] { ts };

            // Create PropertyFilterSpec using the PropertySpec and ObjectPec
            // created above.
            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
            propertyFilterSpec.propSet = new PropertySpec[] { propertySpec };
            propertyFilterSpec.objectSet = new ObjectSpec[] { objectSpec };

            PropertyFilterSpec[] filterspec = new PropertyFilterSpec[3];
            filterspec[0] = propertyFilterSpec;

            ObjectContent[] ocary =
            cb._svcUtil.retrievePropertiesEx(cb._connection._sic.propertyCollector,
                  filterspec);
            if (ocary == null || ocary.Length == 0)
            {
                return null;
            }

            ObjectContent oc = null;
            ManagedObjectReference mor = null;
            DynamicProperty[] propary = null;
            string propval = null;
            bool found = false;
            for (int oci = 0; oci < ocary.Length && !found; oci++)
            {
                oc = ocary[oci];
                mor = oc.obj;
                propary = oc.propSet;

                if ((type == null) || (type != null && cb._svcUtil.typeIsA(type, mor.type)))
                {
                    if (propary.Length > 0)
                    {
                        propval = (string)propary[0].val;
                    }

                    found = propval != null && name.Equals(propval);
                    propval = null;
                }
            }

            if (!found)
            {
                mor = null;
            }

            return mor;
        }
Exemple #26
0
        private StringBuilder getEsxDatastoreInfo()
        {
            // 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;

            pspec.pathSet = new string[] { "datastore" };

            // 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 });

            // Print out the 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.val.GetType() == typeof(VimApi.ManagedObjectReference[]))
                        {
                            ManagedObjectReference[] dsList = (ManagedObjectReference[])pc.val;
                            ManagedObjectReference   dsRef  = null;
                            for (int j = 0; j < dsList.Length; j++)
                            {
                                dsRef = dsList[j];
                                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,>");
                            }
                        }
                    }
                }
            }

            return(sb);
        }
Exemple #27
0
        public PropertyFilterSpec[] NetworkSearchFilter()
        {
            PropertySpec        prop;
            List <PropertySpec> props = new List <PropertySpec>();

            TraversalSpec        trav = new TraversalSpec();
            List <SelectionSpec> list = new List <SelectionSpec>();

            SelectionSpec        sel       = new SelectionSpec();
            List <SelectionSpec> selectset = new List <SelectionSpec>();

            ObjectSpec         objectspec = new ObjectSpec();
            PropertyFilterSpec filter     = new PropertyFilterSpec();

            trav.name = "DatacenterTraversalSpec";
            trav.type = "Datacenter";
            trav.path = "networkFolder";

            sel.name = "FolderTraversalSpec";
            selectset.Add(sel);
            trav.selectSet = selectset.ToArray();
            list.Add(trav);

            trav      = new TraversalSpec();
            trav.name = "FolderTraversalSpec";
            trav.type = "Folder";
            trav.path = "childEntity";
            selectset.Clear();
            sel      = new SelectionSpec();
            sel.name = "DatacenterTraversalSpec";
            selectset.Add(sel);
            trav.selectSet = selectset.ToArray();
            list.Add(trav);

            prop         = new PropertySpec();
            prop.type    = "Datacenter";
            prop.pathSet = new string[] { "networkFolder", "name" };
            props.Add(prop);

            prop         = new PropertySpec();
            prop.type    = "Folder";
            prop.pathSet = new string[] { "childEntity", "name" };
            props.Add(prop);

            prop         = new PropertySpec();
            prop.type    = "VmwareDistributedVirtualSwitch";
            prop.pathSet = new string[] { "portgroup", "name", "parent", "uuid" };
            props.Add(prop);

            prop         = new PropertySpec();
            prop.type    = "DistributedVirtualPortgroup";
            prop.pathSet = new string[] { "name", "key" };
            props.Add(prop);

            objectspec           = new ObjectSpec();
            objectspec.obj       = _sic.rootFolder;
            objectspec.selectSet = list.ToArray();

            filter           = new PropertyFilterSpec();
            filter.propSet   = props.ToArray();
            filter.objectSet = new ObjectSpec[] { objectspec };
            PropertyFilterSpec[] _dvNetworkSearchFilters = new PropertyFilterSpec[] { filter };
            return(_dvNetworkSearchFilters);
        }
        /**
         * This method creates a SelectionSpec[] to traverses the entire
         * inventory tree starting at a Folder
         * @return The SelectionSpec[]
         */
        public SelectionSpec[] buildFullTraversal()
        {
            // Recurse through all ResourcePools

            TraversalSpec rpToVm = new TraversalSpec();

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

            // Recurse through all ResourcePools

            TraversalSpec rpToRp = new TraversalSpec();

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

            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.skipSpecified     = true;
            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;
            crToH.skipSpecified = true;

            // 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.skipSpecified     = true;
            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.skipSpecified     = true;
            HToVm.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            HToVm.selectSet[0].name = "visitFolders";

            //Traversal spec from Dataceneter to Network

            TraversalSpec dctonw = new TraversalSpec();

            dctonw.name              = "dctonw";
            dctonw.type              = "Datacenter";
            dctonw.path              = "networkFolder";
            dctonw.skip              = false;
            dctonw.skipSpecified     = true;
            dctonw.selectSet         = new SelectionSpec[] { new SelectionSpec() };
            dctonw.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.skipSpecified     = true;
            visitFolders.selectSet         = new SelectionSpec[] { 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";
            visitFolders.selectSet[7].name = "dctonw";
            return(new SelectionSpec[] { visitFolders, dcToVmf, dctonw, dcToHf, crToH, crToRp, rpToRp, HToVm, rpToVm });
        }
      /// <summary>
      /// Get Container contents for all childEntities accessible from rootFolder
      /// </summary>
      public void GetContainerContents() {
         // 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";

         PropertyFilterSpec spec = new PropertyFilterSpec();
         spec.propSet = propspecary;
         spec.objectSet = new ObjectSpec[] { new ObjectSpec() };
         spec.objectSet[0].obj = _rootFolder;
         spec.objectSet[0].skip = false;
         spec.objectSet[0].selectSet =  selectionSpecs;

         // Recursively get all ManagedEntity ManagedObjectReferences 
         // and the "name" property for all ManagedEntities retrieved
         ObjectContent[] ocary = 
            _service.RetrieveProperties(
               _propCol, new PropertyFilterSpec[] { spec }
            );

         // If we get contents back. print them out.
         if (ocary != null) {
            ObjectContent oc = null;
            ManagedObjectReference mor = null;
            DynamicProperty[] pcary = null;
            DynamicProperty pc = null;
            for (int oci = 0; oci < ocary.Length; oci++) {
               oc = ocary[oci];
               mor = oc.obj;
               pcary = oc.propSet;

               Console.WriteLine("Object Type : " + mor.type);
               Console.WriteLine("Reference Value : " + mor.Value);

               if (pcary != null) {
                  for (int pci = 0; pci < pcary.Length; pci++) {
                     pc = pcary[pci];
                     Console.WriteLine("   Property Name : " + pc.name);
                     if (pc != null) {
                        if (!pc.val.GetType().IsArray) {
                           Console.WriteLine("   Property Value : " + pc.val);
                        } 
                        else {
                           Array ipcary = (Array)pc.val;
                           Console.WriteLine("Val : " + pc.val);
                           for (int ii = 0; ii < ipcary.Length; ii++) {
                              object oval = ipcary.GetValue(ii);
                              if (oval.GetType().Name.IndexOf("ManagedObjectReference") >= 0) {
                                 ManagedObjectReference imor = (ManagedObjectReference)oval;

                                 Console.WriteLine("Inner Object Type : " + imor.type);
                                 Console.WriteLine("Inner Reference Value : " + imor.Value);
                              } 
                              else {
                                 Console.WriteLine("Inner Property Value : " + oval);
                              }
                           }
                        }
                     }
                  }
               }
            }
         } 
         else {
            Console.WriteLine("No Managed Entities retrieved!");
         }
      }
        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);
        }
Exemple #31
0
        /// <summary>
        /// Return MOR
        /// </summary>
        /// <param name="folder">ManagedObjectReference</param>
        /// <param name="type">string</param>
        /// <param name="name">string</param>
        /// <returns>ManagedObjectReference</returns>
        public ManagedObjectReference GetMOREFsInFolderByType(ManagedObjectReference folder, string type,
                                                              string name)
        {
            String propName = "name";

            string[] type1 = new string[2];
            type1[0] = type;
            ManagedObjectReference viewManager   = cb._connection._sic.viewManager;
            ManagedObjectReference containerView =
                cb._connection._service.CreateContainerView(viewManager, folder,
                                                            type1, true);

            PropertySpec propertySpec = new PropertySpec();

            propertySpec.all     = false;
            propertySpec.type    = type;
            propertySpec.pathSet = new string[] { propName };

            TraversalSpec ts = new TraversalSpec();

            ts.name = "view";
            ts.path = "view";
            ts.skip = false;
            ts.type = "ContainerView";

            // Now create Object Spec
            ObjectSpec objectSpec = new ObjectSpec();

            objectSpec.obj       = containerView;
            objectSpec.skip      = true;
            objectSpec.selectSet = new SelectionSpec[] { ts };

            // Create PropertyFilterSpec using the PropertySpec and ObjectPec
            // created above.
            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();

            propertyFilterSpec.propSet   = new PropertySpec[] { propertySpec };
            propertyFilterSpec.objectSet = new ObjectSpec[] { objectSpec };

            PropertyFilterSpec[] filterspec = new PropertyFilterSpec[3];
            filterspec[0] = propertyFilterSpec;

            ObjectContent[] ocary =
                cb._svcUtil.retrievePropertiesEx(cb._connection._sic.propertyCollector,
                                                 filterspec);
            if (ocary == null || ocary.Length == 0)
            {
                return(null);
            }

            ObjectContent          oc  = null;
            ManagedObjectReference mor = null;

            DynamicProperty[] propary = null;
            string            propval = null;
            bool found = false;

            for (int oci = 0; oci < ocary.Length && !found; oci++)
            {
                oc      = ocary[oci];
                mor     = oc.obj;
                propary = oc.propSet;

                if ((type == null) || (type != null && cb._svcUtil.typeIsA(type, mor.type)))
                {
                    if (propary.Length > 0)
                    {
                        propval = (string)propary[0].val;
                    }

                    found   = propval != null && name.Equals(propval);
                    propval = null;
                }
            }

            if (!found)
            {
                mor = null;
            }

            return(mor);
        }
 private ObjectContent[] queryContainerView(ManagedObjectReference containerRoot, string morefType, string[] morefProperies)
 {
     List<ObjectContent> objectList = new List<ObjectContent>();
     var containerView = _connection.Service.CreateContainerView(_connection.ServiceContent.viewManager, containerRoot, new string[] { morefType }, true);
     PropertyFilterSpec spec = new PropertyFilterSpec();
     spec.propSet = new PropertySpec[] { new PropertySpec() };
     spec.propSet[0].all = morefProperies == null || morefProperies.Length == 0;
     spec.propSet[0].allSpecified = spec.propSet[0].all;
     spec.propSet[0].type = morefType;
     spec.propSet[0].pathSet = morefProperies;
     spec.objectSet = new ObjectSpec[] { new ObjectSpec() };
     TraversalSpec ts = new TraversalSpec();
     ts.name = "view";
     ts.path = "view";
     ts.skip = false;
     ts.type = "ContainerView";
     spec.objectSet[0].obj = containerView;
     spec.objectSet[0].selectSet = new SelectionSpec[] { ts };
     return retrievePropertiesEx(_connection.PropCol, new PropertyFilterSpec[] { spec }, null);
 }
 ///<summary>
 /// Specifications to find all the VMs in a Datacenter and
 /// retrieve their name and runtime.powerState values.
 ///</summary>
 private static ObjectContent[] getVMs(ManagedObjectReference dcMoRef)
 {
     // The PropertySpec object specifies what properties
     // retrieve from what type of Managed Object
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = "VirtualMachine";
     pSpec.pathSet = new String[] { "name", "runtime.powerState" };
     SelectionSpec recurseFolders = new SelectionSpec();
     recurseFolders.name = "folder2childEntity";
     TraversalSpec folder2childEntity = new TraversalSpec();
     folder2childEntity.type = "Folder";
     folder2childEntity.path = "childEntity";
     folder2childEntity.name = recurseFolders.name;
     folder2childEntity.selectSet =
        new SelectionSpec[] { recurseFolders };
     // Traverse from a Datacenter through the 'vmFolder' property
     TraversalSpec dc2vmFolder = new TraversalSpec();
     dc2vmFolder.type = "Datacenter";
     dc2vmFolder.path = "vmFolder";
     dc2vmFolder.selectSet =
        new SelectionSpec[] { folder2childEntity };
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = dcMoRef;
     oSpec.skip = true;
     oSpec.selectSet = new SelectionSpec[] { dc2vmFolder };
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { pSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     return _service.RetrieveProperties(_sic.propertyCollector,
           new PropertyFilterSpec[] { pfSpec });
 }
        /// <summary>
        /// Create TraversalSpec for Datacenter
        /// </summary>
        /// <returns>SelectionSpec[]</returns>
        private SelectionSpec[] buildTraversalSpecForDatastoreToDatacenter()
        {
            // For Folder -> Folder recursion
            SelectionSpec sspecvfolders = new SelectionSpec();
            sspecvfolders.name = "VisitFolders";

            TraversalSpec visitFolders = new TraversalSpec();
            visitFolders.type = "Folder";
            visitFolders.path = "parent";
            visitFolders.skip = false;
            visitFolders.name = "VisitFolders";
            visitFolders.selectSet = new SelectionSpec[] { sspecvfolders };

            TraversalSpec datastoreToFolder = new TraversalSpec();
            datastoreToFolder.type = "Datastore";
            datastoreToFolder.path = "parent";
            datastoreToFolder.skip = false;
            datastoreToFolder.name = "DatastoreToFolder";
            datastoreToFolder.selectSet = new SelectionSpec[] { sspecvfolders };

            SelectionSpec[] speclist = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            speclist[0] = datastoreToFolder;
            speclist[1] = visitFolders;
            return speclist;
        }
        /**
            * This method creates a SelectionSpec[] to traverses the entire
            * inventory tree starting at a Folder
            * @return The SelectionSpec[]
            */
        public SelectionSpec[] buildFullTraversal()
        {
            // Recurse through all ResourcePools

            TraversalSpec rpToVm = new TraversalSpec();
            rpToVm.name = "rpToVm";
            rpToVm.type = "ResourcePool";
            rpToVm.path = "vm";
            rpToVm.skip = false;
            rpToVm.skipSpecified = true;

            // Recurse through all ResourcePools

            TraversalSpec rpToRp = new TraversalSpec();
            rpToRp.name = "rpToRp";
            rpToRp.type = "ResourcePool";
            rpToRp.path = "resourcePool";
            rpToRp.skip = false;
            rpToRp.skipSpecified = true;

            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.skipSpecified = true;
            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;
            crToH.skipSpecified = true;

            // 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.skipSpecified = true;
            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.skipSpecified = true;
            HToVm.selectSet = new SelectionSpec[] { new SelectionSpec() };
            HToVm.selectSet[0].name = "visitFolders";

            //Traversal spec from Dataceneter to Network

            TraversalSpec dctonw = new TraversalSpec();
            dctonw.name = "dctonw";
            dctonw.type = "Datacenter";
            dctonw.path = "networkFolder";
            dctonw.skip = false;
            dctonw.skipSpecified = true;
            dctonw.selectSet = new SelectionSpec[] { new SelectionSpec() };
            dctonw.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.skipSpecified = true;
            visitFolders.selectSet = new SelectionSpec[] { 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";
            visitFolders.selectSet[7].name = "dctonw";
            return new SelectionSpec[] { visitFolders, dcToVmf, dctonw, dcToHf, crToH, crToRp, rpToRp, HToVm, rpToVm };


        }
Exemple #36
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);
        }
        public SelectionSpec[] GetStorageTraversalSpec()
        {
            SelectionSpec ssFolders = new SelectionSpec();
            ssFolders.name = "visitFolders";

            TraversalSpec datacenterSpec = new TraversalSpec();
            datacenterSpec.name = "dcTodf";
            datacenterSpec.type = "Datacenter";
            datacenterSpec.path = "datastoreFolder";
            datacenterSpec.skip = false;
            datacenterSpec.selectSet = new SelectionSpec[] { ssFolders };

            TraversalSpec visitFolder = new TraversalSpec();
            visitFolder.type = "Folder";
            visitFolder.name = "visitFolders";
            visitFolder.path = "childEntity";
            visitFolder.skip = false;

            SelectionSpec[] ssSpecList = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
            ssSpecList[0] = datacenterSpec;
            ssSpecList[1] = ssFolders;

            visitFolder.selectSet = ssSpecList;
            return (new SelectionSpec[] { visitFolder });
        }
        /**
         * Create Property Collector Filter to get names of all
         * ScheduledTasks the ScheduledTaskManager has.
         *
         * @return PropertyFilterSpec to get properties
         */
        private PropertyFilterSpec createTaskPropertyFilterSpec()
        {
            // The traversal spec traverses the "scheduledTask" property of
            // ScheduledTaskManager to get names of ScheduledTask ManagedEntities
            // A Traversal Spec allows traversal into a ManagedObjects
            // using a single attribute of the managedObject
            TraversalSpec scheduledTaskTraversal = new TraversalSpec();

            scheduledTaskTraversal.type = _scheduleManager.type;
            scheduledTaskTraversal.path = "scheduledTask";

            // We want to get values of the scheduleTask property
            // of the scheduledTaskManager, which are the ScheduledTasks
            // so we set skip = false.
            scheduledTaskTraversal.skip          = false;
            scheduledTaskTraversal.skipSpecified = true;

            // no further traversal needed once we get to scheduled task list
            scheduledTaskTraversal.selectSet = new SelectionSpec[] { };

            scheduledTaskTraversal.name = "scheduleManagerToScheduledTasks";

            // Setup a PropertySpec to return names of Scheduled Tasks so
            // we can find the named ScheduleTask ManagedEntity to delete
            // Name is an attribute of ScheduledTaskInfo so
            // the path set will contain "info.name"
            PropertySpec propSpec = new PropertySpec();

            propSpec.all          = false;
            propSpec.allSpecified = true;
            propSpec.pathSet      = new String[] { "info.name" };
            propSpec.type         = "ScheduledTask";

            // PropertySpecs are wrapped in a PropertySpec array
            // since we only have a propertySpec for the ScheduledTask,
            // the only values we will get back are names of scheduledTasks
            PropertySpec[] propSpecArray = new PropertySpec[] { propSpec };

            // Create an Object Spec to specify the starting or root object
            // and the SelectionSpec to traverse to each ScheduledTask in the
            // array of scheduledTasks in the ScheduleManager
            ObjectSpec objSpec = new ObjectSpec();

            objSpec.obj       = _scheduleManager;
            objSpec.selectSet = new SelectionSpec[] { scheduledTaskTraversal };

            // Set skip = true so properties of ScheduledTaskManager
            // are not returned, and only values of info.name property of
            // each ScheduledTask is returned
            objSpec.skip          = true;
            objSpec.skipSpecified = true;

            // ObjectSpecs used in PropertyFilterSpec are wrapped in an array
            ObjectSpec[] objSpecArray = new ObjectSpec[] { objSpec };

            // Create the PropertyFilter spec with
            // ScheduledTaskManager as "root" object
            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet   = propSpecArray;
            spec.objectSet = objSpecArray;
            return(spec);
        }
Exemple #39
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);
        }