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