/// <summary> /// Retrieves a set of vSphere managed objects using the specified <see cref="VSphereSelectionSpec" /> set and <see cref="VSpherePropertySpec" /> set. /// </summary> /// <param name="startingObject">The <see cref="VSphereManagedObject" /> from which the query should start.</param> /// <param name="selectionSpecs">The collection of <see cref="VSphereSelectionSpec" /> that specifies which objects will be queried.</param> /// <param name="propertySpecs">The collection of <see cref="VSpherePropertySpec" /> that specifies which object properties will be retrieved.</param> /// <returns>A collection of <see cref="VSphereManagedObject" />.</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="startingObject" /> is null. /// <para>or</para> /// <paramref name="selectionSpecs" /> is null. /// <para>or</para> /// <paramref name="propertySpecs" /> is null. /// </exception> public IEnumerable <VSphereManagedObject> RetrieveObjects(VSphereManagedObject startingObject, IEnumerable <VSphereSelectionSpec> selectionSpecs, IEnumerable <VSpherePropertySpec> propertySpecs) { if (startingObject == null) { throw new ArgumentNullException(nameof(startingObject)); } if (selectionSpecs == null) { throw new ArgumentNullException(nameof(selectionSpecs)); } if (propertySpecs == null) { throw new ArgumentNullException(nameof(propertySpecs)); } ObjectSpec objectSpec = new ObjectSpec { obj = startingObject.ManagedObjectReference, selectSet = selectionSpecs.Select(n => n.SelectionSpec).ToArray() }; PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec { objectSet = new[] { objectSpec }, propSet = propertySpecs.Select(n => n.PropertySpec).ToArray() }; var result = _vimService.RetrieveProperties(_serviceContent.propertyCollector, new[] { propertyFilterSpec }); return(result.Select(n => new VSphereManagedObject(n))); }
/* * getProperties -- * * Retrieves the specified set of properties for the given managed object * reference into an array of result objects (returned in the same oder * as the property list). */ public static Object[] getProperties(ManagedObjectReference moRef, String[] properties) { // PropertySpec specifies what properties to // retrieve and from type of Managed Object PropertySpec pSpec = new PropertySpec(); pSpec.type = moRef.type; pSpec.pathSet = properties; // ObjectSpec specifies the starting object and // any TraversalSpecs used to specify other objects // for consideration ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = moRef; // PropertyFilterSpec is used to hold the ObjectSpec and // PropertySpec for the call PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = new PropertySpec[] { pSpec }; pfSpec.objectSet = new ObjectSpec[] { oSpec }; // retrieveProperties() returns the properties // selected from the PropertyFilterSpec ObjectContent[] ocs = new ObjectContent[20]; ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec }); // Return value, one object for each property specified Object[] ret = new Object[properties.Length]; if (ocs != null) { for (int i = 0; i < ocs.Length; ++i) { ObjectContent oc = ocs[i]; DynamicProperty[] dps = oc.propSet; if (dps != null) { for (int j = 0; j < dps.Length; ++j) { DynamicProperty dp = dps[j]; // find property path index for (int p = 0; p < ret.Length; ++p) { if (properties[p].Equals(dp.name)) { ret[p] = dp.val; } } } } } } return(ret); }
public ManagedObjectReference GetVMs(string _name, ManagedObjectReference[] vmList, bool first) { ManagedObjectReference vmRef = null; for (int ii = 0; ii < vmList.Length; ii++) { if (boolVMFound == true) { break; } if (vmList[ii].type == "VirtualMachine") { //Object[] vmProps = oVMware.getProperties(vmList[ii], new String[] { "name", "config.name", "config.template" }); //if (((String)vmProps[0]).ToUpper() == _name.ToUpper()) //if (oVMware.getObjectProperty(vmList[ii], "name").ToString().ToUpper() == _name.ToUpper()) PropertySpec pSpec = new PropertySpec(); pSpec.type = vmList[ii].type; pSpec.pathSet = new String[] { "name" }; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = vmList[ii]; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = new PropertySpec[] { pSpec }; pfSpec.objectSet = new ObjectSpec[] { oSpec }; VimService _service = oVMware.GetService(); ServiceContent _sic = oVMware.GetSic(); ObjectContent[] ocs = new ObjectContent[20]; ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec }); string strName = ""; if (ocs.Length == 1 && ocs[0].propSet.Length == 1) { strName = ocs[0].propSet[0].val.ToString(); } if (strName.ToUpper() == _name.ToUpper()) { boolVMFound = true; vmRef = vmList[ii]; //UpdateGuestVIM(_name, vmRef.Value); break; } } //else if (vmList[ii].type == "Folder") //{ // if (chkGroups.Checked || (String.IsNullOrEmpty(txtGroup.Text) == false && oVMware.getObjectProperty(vmList[ii], "name").ToString().ToUpper() == txtGroup.Text.ToUpper())) // { // vmRef = GetVMs(_name, (ManagedObjectReference[])oVMware.getObjectProperty(vmList[ii], "childEntity"), false); // if (boolVMFound == true) // break; // } //} } return(vmRef); }
public Object getProperties(ManagedObjectReference moRef, String propertyName) { PropertySpec pSpec = new PropertySpec(); pSpec.type = moRef.type; pSpec.pathSet = new String[] { propertyName }; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = moRef; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = new PropertySpec[] { pSpec }; pfSpec.objectSet = new ObjectSpec[] { oSpec }; ObjectContent[] ocs = new ObjectContent[20]; VimService _service = oVMware.GetService(); ServiceContent _sic = oVMware.GetSic(); ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec }); Object ret = new Object(); for (int ii = 0; ocs != null && ii < ocs.Length; ++ii) { ObjectContent oc = ocs[ii]; DynamicProperty[] dps = oc.propSet; for (int jj = 0; dps != null && jj < dps.Length; ++jj) { DynamicProperty dp = dps[jj]; if (propertyName.Equals(dp.name)) { ret = dp.val; break; } } if (ret != null) { break; } } return(ret); }
private Object[] getProperties(VimService service, ManagedObjectReference moRef, String[] properties) { PropertySpec pSpec = new PropertySpec(); pSpec.type = moRef.type; pSpec.pathSet = properties; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = moRef; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = (new PropertySpec[] { pSpec }); pfSpec.objectSet = (new ObjectSpec[] { oSpec }); ObjectContent[] ocs = service.RetrieveProperties(sic.propertyCollector, new PropertyFilterSpec[] { pfSpec }); Object[] ret = new Object[properties.Length]; if (ocs != null) { for (int i = 0; i < ocs.Length; ++i) { ObjectContent oc = ocs[i]; DynamicProperty[] dps = oc.propSet; if (dps != null) { for (int j = 0; j < dps.Length; ++j) { DynamicProperty dp = dps[j]; for (int p = 0; p < ret.Length; ++p) { if (properties[p].Equals(dp.name)) { ret[p] = dp.val; } } } } } } return(ret); }
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); }
private Object[] getProperties(VimService service, ManagedObjectReference moRef, String[] properties) { PropertySpec pSpec = new PropertySpec(); pSpec.type = moRef.type; pSpec.pathSet = properties; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = moRef; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = (new PropertySpec[] { pSpec }); pfSpec.objectSet = (new ObjectSpec[] { oSpec }); ObjectContent[] ocs = service.RetrieveProperties(sic.propertyCollector, new PropertyFilterSpec[] { pfSpec }); Object[] ret = new Object[properties.Length]; if (ocs != null) { for (int i = 0; i < ocs.Length; ++i) { ObjectContent oc = ocs[i]; DynamicProperty[] dps = oc.propSet; if (dps != null) { for (int j = 0; j < dps.Length; ++j) { DynamicProperty dp = dps[j]; for (int p = 0; p < ret.Length; ++p) { if (properties[p].Equals(dp.name)) { ret[p] = dp.val; } } } } } } return ret; }
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; }
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); }
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); }
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); }
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); }
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); }
private void removePluginWorker_DoWork(object sender, DoWorkEventArgs e) { try { string hostName = vhostname; //#########################setup plugin in a xml file################### XmlDocument xmldoc = new XmlDocument(); XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); xmldoc.AppendChild(xmlnode); //add root element XmlElement xmlroot = xmldoc.CreateElement("root"); xmldoc.AppendChild(xmlroot); //###################################################################### _service2 = new VimService(); _service2.Url = vurl; _svcRef2 = new ManagedObjectReference(); _svcRef2.type = "ServiceInstance"; _svcRef2.Value = "ServiceInstance"; _service2.CookieContainer = new System.Net.CookieContainer(); CreateServiceRef2("ServiceInstance"); _sic2 = _service2.RetrieveServiceContent(_svcRef2); _propCol2 = _sic2.propertyCollector; _rootFolder2 = _sic2.rootFolder; String userName = vusername; String password = vpassword; if (_sic2.sessionManager != null) { _service2.Login(_sic2.sessionManager, userName, password, null); ManagedObjectReference extMOREF = _sic2.extensionManager; PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = new PropertySpec[] { new PropertySpec() }; spec.propSet[0].all = false; spec.propSet[0].allSpecified = spec.propSet[0].all; spec.propSet[0].type = extMOREF.type; spec.propSet[0].pathSet = new string[] { "extensionList" }; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = extMOREF; spec.objectSet[0].skip = false; ObjectContent[] ocary = _service2.RetrieveProperties(_sic2.propertyCollector, new PropertyFilterSpec[] { spec }); ArrayList ObjectList = new ArrayList(); if (ocary != null) { ObjectContent oc = null; ManagedObjectReference mor = null; DynamicProperty[] pcary = null; DynamicProperty pc = null; for (int oci = 0; oci <= ocary.Length - 1; oci++) { oc = ocary[oci]; mor = oc.obj; pcary = oc.propSet; for (int propi = 0; propi <= pcary.Length - 1; propi++) { pc = pcary[propi]; if ((pc.name.Equals("extensionList"))) { try { for (int pci = 0; ; pci++) { ObjectList.Add(((VimApi.Extension[])(pc.val))[pci].key); } } catch { // } string leftcharObjL; for (int olc = 0; olc < ObjectList.Count; olc++) { leftcharObjL = ObjectList[olc].ToString(); if (leftcharObjL.StartsWith("com.virtualizeplanet.")) { leftcharObjL = leftcharObjL.Remove(0, 21); //comboBox2.Items.Add(leftcharObjL); //comboBox2.SelectedIndex = 0; XmlElement xmldcmoref = xmldoc.CreateElement("", "PluginList", ""); XmlAttribute newAtt = xmldoc.CreateAttribute("Position"); newAtt.Value = leftcharObjL; xmldcmoref.Attributes.Append(newAtt); xmldoc.ChildNodes.Item(1).AppendChild(xmldcmoref); } } } } } } } XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.Indent = true; xmlWriterSettings.NewLineChars = Environment.NewLine + Environment.NewLine; XmlWriter xmlwrite = XmlWriter.Create("plugin.xml", xmlWriterSettings); xmldoc.Save(xmlwrite); xmlwrite.Close(); removePluginWorker.CancelAsync(); } catch { MessageBox.Show("Something maybe wrong with your settings"); } }