void Watch(PropertyManager PM, String path) { ManagedObjectReference vm = cb.getConnection().Service.FindByInventoryPath( cb.getConnection().ServiceContent.searchIndex, path); if (vm == null) { System.Console.WriteLine("Virtual Machine located at path: " + path + " not found."); return; } // Create a FilterSpec PropertySpec pSpec = new PropertySpec(); pSpec.type = vm.type; pSpec.pathSet = new String[] { "guest", "summary.quickStats", "summary.runtime.powerState" }; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = vm; oSpec.skip = false; oSpec.skipSpecified = true; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = new PropertySpec[] { pSpec }; pfSpec.objectSet = new ObjectSpec[] { oSpec }; Console.WriteLine("Updates being displayed...Press Ctrl-Break to exit"); PM.Register(pfSpec, false, new PropertyFilterUpdateHandler(DisplayUpdates)); while (true) { System.Threading.Thread.Sleep(100); } }
private PropertyFilterSpec createEventFilterSpec() { // Set up a PropertySpec to use the latestPage attribute // of the EventHistoryCollector PropertySpec propSpec = new PropertySpec(); propSpec.all=false; propSpec.allSpecified = true; propSpec.pathSet =new String[] { "latestPage" }; propSpec.type = _eventHistoryCollector.type; // PropertySpecs are wrapped in a PropertySpec array PropertySpec[] propSpecAry = new PropertySpec[] { propSpec }; // Set up an ObjectSpec with the above PropertySpec for the // EventHistoryCollector we just created // as the Root or Starting Object to get Attributes for. ObjectSpec objSpec = new ObjectSpec(); objSpec.obj =_eventHistoryCollector; objSpec.skip = false; objSpec.skipSpecified = true; // Get Event objects in "latestPage" from "EventHistoryCollector" // and no "traversl" further, so, no SelectionSpec is specified objSpec.selectSet=new SelectionSpec[] { }; // ObjectSpecs are wrapped in an ObjectSpec array ObjectSpec[] objSpecAry = new ObjectSpec[] { objSpec }; PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet=propSpecAry; spec.objectSet=objSpecAry; return spec; }
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> /// Retrieve contents for a single object based on the property collector /// registered with the service. /// </summary> /// <param name="collector">Property collector registered with service</param> /// <param name="mobj">Managed Object Reference to get contents for</param> /// <param name="properties">names of properties of object to retrieve</param> /// <returns>retrieved object contents</returns> public ObjectContent[] GetObjectProperties( ManagedObjectReference collector, ManagedObjectReference mobj, string[] properties ) { if (mobj == null) { return(null); } ManagedObjectReference usecoll = collector; if (usecoll == null) { usecoll = _connection.PropertyCollector; } PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = new PropertySpec[] { new PropertySpec() }; spec.propSet[0].all = properties == null || properties.Length == 0; spec.propSet[0].allSpecified = spec.propSet[0].all; spec.propSet[0].type = mobj.type; spec.propSet[0].pathSet = properties; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = mobj; spec.objectSet[0].skip = false; return(retrievePropertiesEx(usecoll, new PropertyFilterSpec[] { spec })); }
void Watch(PropertyManager PM, String path) { ManagedObjectReference vm = cb.getConnection().Service.FindByInventoryPath( cb.getConnection().ServiceContent.searchIndex, path); if (vm == null) { System.Console.WriteLine("Virtual Machine located at path: " + path + " not found."); return; } // Create a FilterSpec PropertySpec pSpec = new PropertySpec(); pSpec.type = vm.type; pSpec.pathSet = new String[] { "guest", "summary.quickStats", "summary.runtime.powerState" }; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = vm; oSpec.skip = false; oSpec.skipSpecified = true; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = new PropertySpec[] { pSpec }; pfSpec.objectSet = new ObjectSpec[] { oSpec }; Console.WriteLine("Updates being displayed...Press Ctrl-Break to exit"); PM.Register(pfSpec, false, new PropertyFilterUpdateHandler(DisplayUpdates)); while (true) { System.Threading.Thread.Sleep(100); } }
/// <summary> /// Retrieves a vSphere managed object with updated property values using the specified <see cref="VSpherePropertySpec" />. /// </summary> /// <param name="managedObject">The <see cref="VSphereManagedObject" /> to retrieve.</param> /// <param name="propertySpec">The <see cref="VSpherePropertySpec" /> that specifies which object properties will be retrieved.</param> /// <returns>A <see cref="VSphereManagedObject" />.</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="managedObject" /> is null. /// <para>or</para> /// <paramref name="propertySpec" /> is null. /// </exception> public VSphereManagedObject RetrieveObject(VSphereManagedObject managedObject, VSpherePropertySpec propertySpec) { if (managedObject == null) { throw new ArgumentNullException(nameof(managedObject)); } if (propertySpec == null) { throw new ArgumentNullException(nameof(propertySpec)); } ObjectSpec objectSpec = new ObjectSpec { obj = managedObject.ManagedObjectReference }; PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec { objectSet = new[] { objectSpec }, propSet = new[] { propertySpec.PropertySpec } }; var result = _vimService.RetrieveProperties(_serviceContent.propertyCollector, new[] { propertyFilterSpec }); return(new VSphereManagedObject(result.Single())); }
public async Task <(bool, bool)> GetCBTState(string vmMoRef) { if (session == null) { throw new Exception("Not Logged"); } var propertySpec = new PropertySpec { pathSet = new string[] { "config.changeTrackingEnabled", "capability.changeTrackingSupported" }, type = "VirtualMachine" }; var propertyFilterSpec = new PropertyFilterSpec { propSet = new PropertySpec[] { propertySpec }, objectSet = new ObjectSpec[] { new ObjectSpec() { obj = new ManagedObjectReference { type = "VirtualMachine", Value = vmMoRef } } } }; var vmPowerStateReq = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { propertyFilterSpec }); var changeTrackingEnabled = (bool)vmPowerStateReq.returnval[0].propSet.FirstOrDefault(p => p.name == "config.changeTrackingEnabled")?.val; var changeTrackingSupported = (bool)vmPowerStateReq.returnval[0].propSet.FirstOrDefault(p => p.name == "capability.changeTrackingSupported")?.val; return(changeTrackingEnabled, changeTrackingSupported); }
/// <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))); }
//also copied from PropertyCollector.cs private List <ObjectContent> retrieveAllProperties(PropertyFilterSpec pfSpec) { List <ObjectContent> listobjcontent = new List <ObjectContent>(); // RetrievePropertiesEx() returns the properties // selected from the PropertyFilterSpec RetrieveResult rslts = _service.RetrievePropertiesEx(_sic.propertyCollector, new PropertyFilterSpec [] { pfSpec }, new RetrieveOptions()); if (rslts != null && rslts.objects != null && rslts.objects.Length != 0) { listobjcontent.AddRange(rslts.objects); } String token = null; if (rslts != null && rslts.token != null) { token = rslts.token; } while (token != null && token.Length != 0) { rslts = _service.ContinueRetrievePropertiesEx(_sic.propertyCollector, token); token = null; if (rslts != null) { token = rslts.token; if (rslts.objects != null && rslts.objects.Length != 0) { listobjcontent.AddRange(rslts.objects); } } } return(listobjcontent); }
public static void Main(String[] args) { try { VMEventHistoryCollectorMonitor eventMonitor = new VMEventHistoryCollectorMonitor(); cb = AppUtil.AppUtil.initialize("VMEventHistoryCollectorMonitor", VMEventHistoryCollectorMonitor.constructOptions(), args); cb.connect(); eventMonitor.initialize(); // eventMonitor.findVirtualMachine(); if (eventMonitor.findVirtualMachine()) { eventMonitor.createEventHistoryCollector(); PropertyFilterSpec eventFilterSpec = eventMonitor.createEventFilterSpec(); eventMonitor.monitorEvents(eventFilterSpec); } else { Console.WriteLine("Virtual Machine not found from the vmPath specified"); } cb.disConnect(); Console.WriteLine("Press enter to exit: "); Console.Read(); } catch (Exception e) { Console.WriteLine("Caught Exception : " + " Name : " + e.Data.ToString() + " Message : " + e.Message.ToString() + " Trace : "); Console.Read(); } }
public async Task <VirtualMachinePowerState> GetVMPowerState(string vmMoRef) { if (session == null) { throw new Exception("Not Logged"); } var propertySpec = new PropertySpec { pathSet = new string[] { "runtime.powerState" }, type = "VirtualMachine" }; var propertyFilterSpec = new PropertyFilterSpec { propSet = new PropertySpec[] { propertySpec }, objectSet = new ObjectSpec[] { new ObjectSpec() { obj = new ManagedObjectReference { type = "VirtualMachine", Value = vmMoRef } } } }; var vmPowerStateReq = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { propertyFilterSpec }); return((VirtualMachinePowerState)vmPowerStateReq.returnval[0].propSet.FirstOrDefault(p => p.name == "runtime.powerState")?.val); }
public static PropertyFilterSpec[] VmFilter(ManagedObjectReference mor, string props) { PropertySpec prop = new PropertySpec { type = "VirtualMachine", pathSet = props.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries) }; ObjectSpec objectspec = new ObjectSpec { obj = mor, //_vms or vm-mor selectSet = new SelectionSpec[] { new TraversalSpec { type = "Folder", path = "childEntity" } } }; PropertyFilterSpec[] ret = new PropertyFilterSpec[] { new PropertyFilterSpec { propSet = new PropertySpec[] { prop }, objectSet = new ObjectSpec[] { objectspec } } }; return(ret); }
public async Task <object> GetVMConfigFromSnapshot(string snapshotMoRef) { if (session == null) { throw new Exception("Not Logged"); } var propertySpecSnap = new PropertySpec { pathSet = new string[] { "config" }, type = "VirtualMachineSnapshot" }; var propertyFilterSpecSnap = new PropertyFilterSpec { propSet = new PropertySpec[] { propertySpecSnap }, objectSet = new ObjectSpec[] { new ObjectSpec() { obj = new ManagedObjectReference { type = "VirtualMachineSnapshot", Value = snapshotMoRef } } } }; var snapProps = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { propertyFilterSpecSnap }); return(snapProps.returnval[0].propSet.FirstOrDefault(p => p.name == "config")?.val as VirtualMachineConfigInfo); }
public TaskWaiter(PropertyManager pm, ManagedObjectReference task) { _task = task; _pm = pm; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = task; oSpec.skip = false; oSpec.skipSpecified = true; PropertySpec pSpec = new PropertySpec(); pSpec.all = false; pSpec.allSpecified = true; pSpec.pathSet = new String[] { "info.error", "info.state" }; pSpec.type = task.type; _pfSpec = new PropertyFilterSpec(); _pfSpec.objectSet = new ObjectSpec[] { oSpec }; _pfSpec.propSet = new PropertySpec[] { pSpec }; }
private PropertyFilterSpec createEventFilterSpec() { // Set up a PropertySpec to use the latestPage attribute // of the EventHistoryCollector PropertySpec propSpec = new PropertySpec(); propSpec.all = false; propSpec.pathSet = new String[] { "latestPage" }; propSpec.type = _eventHistoryCollector.type; // PropertySpecs are wrapped in a PropertySpec array PropertySpec[] propSpecAry = new PropertySpec[] { propSpec }; // Set up an ObjectSpec with the above PropertySpec for the // EventHistoryCollector we just created // as the Root or Starting Object to get Attributes for. ObjectSpec objSpec = new ObjectSpec(); objSpec.obj = _eventHistoryCollector; objSpec.skip = false; // Get Event objects in "latestPage" from "EventHistoryCollector" // and no "traversl" further, so, no SelectionSpec is specified objSpec.selectSet = new SelectionSpec[] { }; // ObjectSpecs are wrapped in an ObjectSpec array ObjectSpec[] objSpecAry = new ObjectSpec[] { objSpec }; PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = propSpecAry; spec.objectSet = objSpecAry; return(spec); }
///<summary> ///Retrieves the specified set of properties for the given managed object ///reference into an array of result objects . ///</summary> ///<param name="moRef"></param> ///<param name="properties"></param> ///<returns>The function returns array of object.containg dynamic properties of host /// (returned in the same oder as the property list) ///</returns> /// 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 Register(PropertyFilterSpec spec, bool partialUpdates, PropertyFilterUpdateHandler handler) { lock (_thisLock) { ManagedObjectReference ret = Connection.Service.CreateFilter(Context.propertyCollector, spec, partialUpdates); Register(ret, handler); return(ret); } }
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); }
/* * 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 = ecb._svcUtil.retrievePropertiesEx(_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 VirtualDeviceConfigSpec Disk(VMWare oVMWare, string _name, string _datastore, string _size, int _unit_number, int _controller_key, string _suffix) { // Get Datastores ManagedObjectReference datastoreRef = null; PropertySpec[] psDCarray = new PropertySpec[] { new PropertySpec() }; psDCarray[0].all = false; psDCarray[0].allSpecified = true; psDCarray[0].pathSet = new string[] { "datastore" }; psDCarray[0].type = "Datacenter"; PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = psDCarray; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = oVMWare.GetDataCenter(); spec.objectSet[0].skip = true; ObjectContent[] ocary = oVMWare.GetService().RetrieveProperties(oVMWare.GetSic().propertyCollector, new PropertyFilterSpec[] { spec }); ManagedObjectReference[] datastores = null; foreach (ObjectContent oc in ocary) { datastores = (ManagedObjectReference[])oc.propSet[0].val; } if (datastores != null) { datastoreRef = datastores[0]; } // Create disk VirtualDisk disk = new VirtualDisk(); disk.key = 2000; disk.controllerKey = _controller_key; disk.controllerKeySpecified = true; disk.unitNumber = _unit_number; disk.unitNumberSpecified = true; VirtualDiskFlatVer2BackingInfo diskBack = new VirtualDiskFlatVer2BackingInfo(); diskBack.diskMode = "persistent"; diskBack.fileName = "[" + _datastore + "] " + _name.ToLower() + "/" + _name.ToLower() + _suffix + ".vmdk"; diskBack.datastore = datastoreRef; diskBack.thinProvisioned = false; diskBack.thinProvisionedSpecified = true; diskBack.writeThrough = false; diskBack.writeThroughSpecified = true; disk.backing = diskBack; disk.capacityInKB = long.Parse(_size); VirtualDeviceConfigSpec dcs = new VirtualDeviceConfigSpec(); dcs.device = disk; dcs.fileOperation = VirtualDeviceConfigSpecFileOperation.create; dcs.fileOperationSpecified = true; dcs.operation = VirtualDeviceConfigSpecOperation.add; dcs.operationSpecified = true; return(dcs); }
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); }
private void getUpdates() { ManagedObjectReference vmRef = cb.getServiceUtil().GetDecendentMoRef(null,"VirtualMachine", cb.get_option("vmname")); if(vmRef == null) { Console.WriteLine("Virtual Machine " + cb.get_option("vmname") + " Not Found"); return; } String[][] typeInfo = { new String[]{"VirtualMachine", "name","summary.quickStats","runtime"} }; PropertySpec[] pSpecs = cb.getServiceUtil().BuildPropertySpecArray(typeInfo); ObjectSpec[] oSpecs = null; oSpecs = new ObjectSpec[]{new ObjectSpec()}; Boolean oneOnly = vmRef != null; oSpecs[0].obj = oneOnly ? vmRef : cb.getConnection().ServiceContent.rootFolder; oSpecs[0].skip = !oneOnly; if(!oneOnly) { SelectionSpec[] selectionSpecs = cb.getServiceUtil().buildFullTraversal(); oSpecs[0].selectSet = selectionSpecs; } PropertyFilterSpec pSpec = new PropertyFilterSpec(); pSpec.objectSet = new ObjectSpec[] { oSpecs[0] }; pSpec.propSet = new PropertySpec[] { pSpecs[0] }; ManagedObjectReference propColl = cb.getConnection().PropCol; ManagedObjectReference propFilter = cb.getConnection()._service.CreateFilter(propColl, pSpec, false); String version = ""; do { UpdateSet update = cb.getConnection()._service.CheckForUpdates(propColl, version); if(update != null && update.filterSet != null) { handleUpdate(update); version = update.version; } else { Console.WriteLine("No update is present!"); } Console.WriteLine(""); Console.WriteLine("Press <Enter> to check for updates"); Console.WriteLine("Enter 'exit' <Enter> to exit the program"); String line = Console.ReadLine(); if(line.Trim().Equals("exit")) break; }while(true); cb.getConnection()._service.DestroyPropertyFilter(propFilter); }
private static ObjectContent[] GetPropertyContent(VimPortType service, ServiceContent serviceContent, string propertyType, string path, ManagedObjectReference reference) { var propertySpecs = new PropertySpec[] { new PropertySpec() { type = propertyType, pathSet = new string[] { path } } }; var objectSpecs = new ObjectSpec[] { new ObjectSpec() { obj = reference } }; var propertyFilterSpecs = new PropertyFilterSpec[] { new PropertyFilterSpec() { propSet = propertySpecs, objectSet = objectSpecs } }; return(service.RetrieveProperties(new RetrievePropertiesRequest(serviceContent.propertyCollector, propertyFilterSpecs)).returnval); }
/// <summary> /// convenience function to retrieve content recursively with multiple properties. /// the typeinfo array contains typename + properties to retrieve. /// </summary> /// <param name="collector">a property collector if available or null for default</param> /// <param name="root">a root folder if available, or null for default</param> /// <param name="typeinfo">2D array of properties for each typename</param> /// <param name="recurse">retrieve contents recursively from the root down</param> /// <returns>retrieved object contents</returns> public ObjectContent[] GetContentsRecursively( ManagedObjectReference collector, ManagedObjectReference root, string[][] typeinfo, bool recurse ) { if (typeinfo == null || typeinfo.Length == 0) { return(null); } ManagedObjectReference usecoll = collector; if (usecoll == null) { usecoll = _connection.PropertyCollector; } ManagedObjectReference useroot = root; if (useroot == null) { useroot = _connection.RootFolder; } SelectionSpec[] selectionSpecs = null; // Modified by Satyendra on 19th May if (recurse) { selectionSpecs = buildFullTraversal(); } PropertySpec[] propspecary = BuildPropertySpecArray(typeinfo); PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = propspecary; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = useroot; spec.objectSet[0].skip = false; spec.objectSet[0].selectSet = selectionSpecs; ObjectContent[] retoc = retrievePropertiesEx(usecoll, new PropertyFilterSpec[] { spec }); return(retoc); }
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 PropertyFilterSpec PropertyFilterSpec( ManagedObjectReference objmor, string[] filterProps) { PropertyFilterSpec spec = new PropertyFilterSpec(); ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = objmor; oSpec.skip = false; oSpec.skipSpecified = true; spec.objectSet = new ObjectSpec[] { oSpec }; PropertySpec pSpec = new PropertySpec(); pSpec.pathSet = filterProps; pSpec.type = objmor.type; spec.propSet = new PropertySpec[] { pSpec }; return(spec); }
/// <summary> /// Get MOR of Datacenter /// </summary> /// <param name="dsMor">ManagedObjectReference</param> /// <returns>ManagedObjectReference</returns> private ManagedObjectReference getDatacenterOfDatastore(ManagedObjectReference dsMor) { ManagedObjectReference datacenter = null; // Create Property Spec PropertySpec propertySpec = new PropertySpec(); propertySpec.all = false; propertySpec.type = "Datacenter"; propertySpec.pathSet = new string[] { "name" }; // Now create Object Spec ObjectSpec objectSpec = new ObjectSpec(); objectSpec.obj = dsMor; objectSpec.skip = true; objectSpec.selectSet = buildTraversalSpecForDatastoreToDatacenter(); // Create PropertyFilterSpec using the PropertySpec and ObjectPec // created above. PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec(); propertyFilterSpec.propSet = new PropertySpec[] { propertySpec }; propertyFilterSpec.objectSet = new ObjectSpec[] { objectSpec }; PropertyFilterSpec[] propertyFilterSpecs = new PropertyFilterSpec[] { propertyFilterSpec }; ObjectContent[] oCont = cb._svcUtil.retrievePropertiesEx(cb._connection._sic.propertyCollector, propertyFilterSpecs); if (oCont != null) { foreach (ObjectContent oc in oCont) { datacenter = oc.obj; break; } } return(datacenter); }
/** * The main entry point for the application. * @param args Arguments: <url> <user> <password> */ public static void Main(String[] args) { try { DeleteOneTimeScheduledTask schedTask = new DeleteOneTimeScheduledTask(); cb = AppUtil.AppUtil.initialize("DeleteOneTimeScheduledTask" , DeleteOneTimeScheduledTask.constructOptions() , args); // Connect to the Service and initialize any required ManagedObjectReferences cb.connect(); schedTask.initialize(); // create a Property Filter Spec to get names // of all scheduled tasks PropertyFilterSpec taskFilterSpec = schedTask.createTaskPropertyFilterSpec(); // Retrieve names of all ScheduledTasks and find // the named one time Scheduled Task ManagedObjectReference oneTimeTask = schedTask.findOneTimeScheduledTask(taskFilterSpec); // Delete the one time scheduled task if (oneTimeTask != null) { schedTask.deleteScheduledTask(oneTimeTask); } // Disconnect from the WebService cb.disConnect(); Console.WriteLine("Press any key to exit: "); Console.Read(); } catch (Exception e) { Console.WriteLine("Caught Exception : " + " Name : " + e.Data.ToString() + " Message : " + e.Message.ToString() + " Trace : "); e.StackTrace.ToString(); } }
// copied from PropertyCollector.cs? private Object [] getProperties(ManagedObjectReference moRef, String [] properties) { PropertySpec pSpec = new PropertySpec(); pSpec.type = moRef.type; pSpec.pathSet = properties; ObjectSpec oSpec = new ObjectSpec(); // Set the starting object oSpec.obj = moRef; PropertyFilterSpec pfSpec = new PropertyFilterSpec(); pfSpec.propSet = new PropertySpec [] { pSpec }; pfSpec.objectSet = new ObjectSpec [] { oSpec }; List <ObjectContent> listobjcontent = retrieveAllProperties(pfSpec); ObjectContent [] ocs = listobjcontent.ToArray(); 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 void monitorEvents(PropertyFilterSpec spec) { // Get all Events returned from the EventHistoryCollector // This will result in a large number of events, depending on the // page size of the latestPage. ObjectContent[] objectContents = cb._svcUtil.retrievePropertiesEx(_propCol, new PropertyFilterSpec[] { spec }); // Print out class names of the Events we got back if (objectContents != null) { Event[] events = (Event[])objectContents[0].propSet[0].val; Console.WriteLine("Events In the latestPage are : "); for (int i = 0; i < events.Length; i++) { Event anEvent = events[i]; Console.WriteLine("Event: " + anEvent.GetType().ToString()); } } else { Console.WriteLine("No Events retrieved!"); } }
private async Task <TaskInfo> WaitForTaskEnd(ManagedObjectReference task) { if (session == null) { throw new Exception("Not Logged"); } if (task.type != "Task") { throw new ArgumentException($"{nameof(task)} is not of type \"Task\""); } var propertySpecTask = new PropertySpec { pathSet = new string[] { "info" }, type = "Task" }; var propertyFilterSpecTask = new PropertyFilterSpec { propSet = new PropertySpec[] { propertySpecTask }, objectSet = new ObjectSpec[] { new ObjectSpec { obj = task } } }; var taskProps = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { propertyFilterSpecTask }); var configTaskInfo = taskProps.returnval[0].propSet[0].val as TaskInfo; while (configTaskInfo?.state == TaskInfoState.running) { await Task.Delay(2000); taskProps = await Vim25Client.RetrievePropertiesAsync(serviceContent.propertyCollector, new PropertyFilterSpec[] { propertyFilterSpecTask }); configTaskInfo = taskProps.returnval[0].propSet[0].val as TaskInfo; } ; return(configTaskInfo); }
/** * Find the Scheduled Task to be deleted * * @return ManagedObjectReference of the OneTimeScheduled Task * @ an reported exceptions */ private ManagedObjectReference findOneTimeScheduledTask( PropertyFilterSpec scheduledTaskSpec) { String findTaskName = cb.get_option("taskname"); Boolean found = false; ManagedObjectReference oneTimeTask = null; // Use PropertyCollector to get all scheduled tasks the // ScheduleManager has ObjectContent[] scheduledTasks = cb._svcUtil.retrievePropertiesEx(_propCol, new PropertyFilterSpec[] { scheduledTaskSpec }); // Find the task name we're looking for and return the // ManagedObjectReference for the ScheduledTask with the // name that matched the name of the OneTimeTask created earlier if (scheduledTasks != null) { for (int i = 0; i < scheduledTasks.Length && !found; i++) { ObjectContent taskContent = scheduledTasks[i]; DynamicProperty[] props = taskContent.propSet; for (int p = 0; p < props.Length && !found; p++) { DynamicProperty prop = props[p]; String taskName = (String)prop.val; if (taskName.Equals(findTaskName)) { oneTimeTask = taskContent.obj; found = true; } } } } if (!found) { Console.WriteLine("Scheduled task '" + findTaskName + "' not found"); } return(oneTimeTask); }
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 }); }
/** * 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; }
/** * Find the Scheduled Task to be deleted * * @return ManagedObjectReference of the OneTimeScheduled Task * @ an reported exceptions */ private ManagedObjectReference findOneTimeScheduledTask( PropertyFilterSpec scheduledTaskSpec ) { String findTaskName = cb.get_option("taskname"); Boolean found = false; ManagedObjectReference oneTimeTask = null; // Use PropertyCollector to get all scheduled tasks the // ScheduleManager has ObjectContent[] scheduledTasks = cb._svcUtil.retrievePropertiesEx(_propCol, new PropertyFilterSpec[] { scheduledTaskSpec }); // Find the task name we're looking for and return the // ManagedObjectReference for the ScheduledTask with the // name that matched the name of the OneTimeTask created earlier if(scheduledTasks != null) { for (int i = 0; i < scheduledTasks.Length && !found; i++) { ObjectContent taskContent = scheduledTasks[i]; DynamicProperty[] props = taskContent.propSet; for (int p = 0; p < props.Length && !found; p++) { DynamicProperty prop = props[p]; String taskName = (String)prop.val; if (taskName.Equals(findTaskName)) { oneTimeTask = taskContent.obj; found = true; } } } } if(!found) { Console.WriteLine("Scheduled task '" + findTaskName + "' not found"); } return oneTimeTask; }
/// <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!"); } }
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> /// Retrieve contents for a single object based on the property collector /// registered with the service. /// </summary> /// <param name="collector">Property collector registered with service</param> /// <param name="mobj">Managed Object Reference to get contents for</param> /// <param name="properties">names of properties of object to retrieve</param> /// <returns>retrieved object contents</returns> public ObjectContent[] GetObjectProperties( ManagedObjectReference collector, ManagedObjectReference mobj, string[] properties ) { if (mobj == null) { return null; } ManagedObjectReference usecoll = collector; if (usecoll == null) { usecoll = _connection.PropCol; } PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = new PropertySpec[] { new PropertySpec() }; spec.propSet[0].all = properties == null || properties.Length == 0; spec.propSet[0].allSpecified = spec.propSet[0].all; spec.propSet[0].type = mobj.type; spec.propSet[0].pathSet = properties; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = mobj; spec.objectSet[0].skip = false; return retrievePropertiesEx(usecoll, new PropertyFilterSpec[] { spec }); }
/// <summary> /// Get MOR of Datacenter /// </summary> /// <param name="dsMor">ManagedObjectReference</param> /// <returns>ManagedObjectReference</returns> private ManagedObjectReference getDatacenterOfDatastore(ManagedObjectReference dsMor) { ManagedObjectReference datacenter = null; // Create Property Spec PropertySpec propertySpec = new PropertySpec(); propertySpec.all = false; propertySpec.type = "Datacenter"; propertySpec.pathSet = new string[] { "name" }; // Now create Object Spec ObjectSpec objectSpec = new ObjectSpec(); objectSpec.obj = dsMor; objectSpec.skip = true; objectSpec.selectSet = buildTraversalSpecForDatastoreToDatacenter(); // Create PropertyFilterSpec using the PropertySpec and ObjectPec // created above. PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec(); propertyFilterSpec.propSet = new PropertySpec[] { propertySpec }; propertyFilterSpec.objectSet = new ObjectSpec[] { objectSpec }; PropertyFilterSpec[] propertyFilterSpecs = new PropertyFilterSpec[] { propertyFilterSpec }; ObjectContent[] oCont = cb._svcUtil.retrievePropertiesEx(cb._connection._sic.propertyCollector, propertyFilterSpecs); if (oCont != null) { foreach (ObjectContent oc in oCont) { datacenter = oc.obj; break; } } return datacenter; }
///<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 }); }
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 }); }
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 }); }
///<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 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> /// convenience function to retrieve content recursively with multiple properties. /// the typeinfo array contains typename + properties to retrieve. /// </summary> /// <param name="collector">a property collector if available or null for default</param> /// <param name="root">a root folder if available, or null for default</param> /// <param name="typeinfo">2D array of properties for each typename</param> /// <param name="recurse">retrieve contents recursively from the root down</param> /// <returns>retrieved object contents</returns> public ObjectContent[] GetContentsRecursively( ManagedObjectReference collector, ManagedObjectReference root, string[][] typeinfo, bool recurse ) { if (typeinfo == null || typeinfo.Length == 0) { return null; } ManagedObjectReference usecoll = collector; if (usecoll == null) { usecoll = _connection.PropCol; } ManagedObjectReference useroot = root; if (useroot == null) { useroot = _connection.Root; } SelectionSpec[] selectionSpecs = null; // Modified by Satyendra on 19th May if (recurse) { selectionSpecs = buildFullTraversal(); } PropertySpec[] propspecary = BuildPropertySpecArray(typeinfo); PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = propspecary; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = useroot; spec.objectSet[0].skip = false; spec.objectSet[0].selectSet = selectionSpecs; ObjectContent[] retoc = retrievePropertiesEx(usecoll, new PropertyFilterSpec[] { spec }); return retoc; }
private void monitorEvents(PropertyFilterSpec spec) { // Get all Events returned from the EventHistoryCollector // This will result in a large number of events, depending on the // page size of the latestPage. try { ObjectContent[] objectContents = cb._svcUtil.retrievePropertiesEx(_propCol, new PropertyFilterSpec[] { spec }); // Print out class names of the Events we got back if (objectContents != null) { Event[] events = (Event[])objectContents[0].propSet[0].val; //Event[] events = (Event[])objectContents[0].getPropSet(0).getVal(); Console.WriteLine("Events In the latestPage are: "); for (int i = 0; i < events.Length; i++) { Event anEvent = events[i]; Console.WriteLine("Event: " + anEvent.GetType().ToString()); } } else { Console.WriteLine("No Events retrieved!"); } } catch(SoapException e) { if (e.Detail.FirstChild.LocalName.Equals("InvalidRequest")) { Console.WriteLine(" InvalidRequest: vmPath may be wrong"); } } catch(Exception e){ Console.WriteLine("Error"); e.StackTrace.ToString(); } }
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; }
///<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 }); }
/// <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; }
public TaskWaiter(PropertyManager pm, ManagedObjectReference task) { _task = task; _pm = pm; ObjectSpec oSpec = new ObjectSpec(); oSpec.obj = task; oSpec.skip = false; oSpec.skipSpecified = true; PropertySpec pSpec = new PropertySpec(); pSpec.all = false; pSpec.allSpecified = true; pSpec.pathSet = new String[] { "info.error", "info.state" }; pSpec.type = task.type; _pfSpec = new PropertyFilterSpec(); _pfSpec.objectSet = new ObjectSpec[] { oSpec }; _pfSpec.propSet = new PropertySpec[] { pSpec }; }
public ManagedObjectReference Register(PropertyFilterSpec spec, bool partialUpdates, PropertyFilterUpdateHandler handler) { lock (_thisLock) { ManagedObjectReference ret = Connection.Service.CreateFilter(Context.propertyCollector, spec, partialUpdates); Register(ret, handler); return ret; } }
/// <summary> /// Handle Updates for a single object. /// waits till expected values of properties to check are reached /// Destroys the ObjectFilter when done. /// </summary> /// <param name="objmor">MOR of the Object to wait for</param> /// <param name="filterProps">Properties list to filter</param> /// <param name="endWaitProps"> /// Properties list to check for expected values /// these be properties of a property in the filter properties list /// </param> /// <param name="expectedVals">values for properties to end the wait</param> /// <returns>true indicating expected values were met, and false otherwise</returns> public object[] WaitForValues( ManagedObjectReference objmor, string[] filterProps, string[] endWaitProps, object[][] expectedVals ) { // version string is initially null string version = ""; object[] endVals = new object[endWaitProps.Length]; object[] filterVals = new object[filterProps.Length]; PropertyFilterSpec spec = new PropertyFilterSpec(); spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = objmor; spec.propSet = new PropertySpec[] { new PropertySpec() }; spec.propSet[0].pathSet = filterProps; spec.propSet[0].type = objmor.type; spec.objectSet[0].selectSet = null; spec.objectSet[0].skip = false; spec.objectSet[0].skipSpecified = true; ManagedObjectReference filterSpecRef = _connection.Service.CreateFilter( _connection.PropCol, spec, true ); bool reached = false; UpdateSet updateset = null; PropertyFilterUpdate[] filtupary = null; PropertyFilterUpdate filtup = null; ObjectUpdate[] objupary = null; ObjectUpdate objup = null; PropertyChange[] propchgary = null; PropertyChange propchg = null; while (!reached) { updateset = _connection.Service.WaitForUpdates( _connection.PropCol, version ); version = updateset.version; if (updateset == null || updateset.filterSet == null) { continue; } // Make this code more general purpose when PropCol changes later. filtupary = updateset.filterSet; filtup = null; for (int fi = 0; fi < filtupary.Length; fi++) { filtup = filtupary[fi]; objupary = filtup.objectSet; objup = null; propchgary = null; for (int oi = 0; oi < objupary.Length; oi++) { objup = objupary[oi]; // TODO: Handle all "kind"s of updates. if (objup.kind == ObjectUpdateKind.modify || objup.kind == ObjectUpdateKind.enter || objup.kind == ObjectUpdateKind.leave ) { propchgary = objup.changeSet; for (int ci = 0; ci < propchgary.Length; ci++) { propchg = propchgary[ci]; UpdateValues(endWaitProps, endVals, propchg); UpdateValues(filterProps, filterVals, propchg); } } } } object expctdval = null; // Check if the expected values have been reached and exit the loop if done. // Also exit the WaitForUpdates loop if this is the case. for (int chgi = 0; chgi < endVals.Length && !reached; chgi++) { for (int vali = 0; vali < expectedVals[chgi].Length && !reached; vali++) { expctdval = expectedVals[chgi][vali]; reached = expctdval.Equals(endVals[chgi]) || reached; } } } // Destroy the filter when we are done. _connection.Service.DestroyPropertyFilter(filterSpecRef); return filterVals; }
public ObjectContent[] retrievePropertiesEx(ManagedObjectReference propertyCollector, PropertyFilterSpec[] specs) { return retrievePropertiesEx(propertyCollector, specs, null); }
public ObjectContent[] retrievePropertiesEx(ManagedObjectReference propertyCollector, PropertyFilterSpec[] specs, int? maxObjects) { List<ObjectContent> objectList = new List<ObjectContent>(); var result = _connection.Service.RetrievePropertiesEx(propertyCollector, specs, new RetrieveOptions() { maxObjects = maxObjects.GetValueOrDefault(), maxObjectsSpecified = (maxObjects != null) }); if (result != null) { string token = result.token; objectList.AddRange(result.objects.AsEnumerable()); while (token != null && !string.Empty.Equals(token)) { result = _connection.Service.ContinueRetrievePropertiesEx(propertyCollector, token); if (result != null) { token = result.token; objectList.AddRange(result.objects.AsEnumerable()); } } } return objectList.ToArray(); }