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

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

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

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

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

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

            return(result.Select(n => new VSphereManagedObject(n)));
        }
        //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);
        }
Example #10
0
 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();
     }
 }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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 };
        }
Example #15
0
        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);
        }
Example #16
0
        ///<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);
     }
 }
Example #18
0
        public async Task <IEnumerable <ManagedEntity> > GetVMs()
        {
            if (session == null)
            {
                throw new Exception("Not Logged");
            }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            ObjectSpec objectspec = new ObjectSpec();

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

            PropertyFilterSpec filter = new PropertyFilterSpec();

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

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

            return(response.returnval);
        }
        /*
         * 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;
        }
Example #22
0
        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);
        }
Example #23
0
        public ManagedObjectReference GetVMs(string _name, ManagedObjectReference[] vmList, bool first)
        {
            ManagedObjectReference vmRef = null;

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

                    VimService      _service = oVMware.GetService();
                    ServiceContent  _sic     = oVMware.GetSic();
                    ObjectContent[] ocs      = new ObjectContent[20];
                    ocs = _service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec });
                    string strName = "";
                    if (ocs.Length == 1 && ocs[0].propSet.Length == 1)
                    {
                        strName = ocs[0].propSet[0].val.ToString();
                    }
                    if (strName.ToUpper() == _name.ToUpper())
                    {
                        boolVMFound = true;
                        vmRef       = vmList[ii];
                        //UpdateGuestVIM(_name, vmRef.Value);
                        break;
                    }
                }
                //else if (vmList[ii].type == "Folder")
                //{
                //    if (chkGroups.Checked || (String.IsNullOrEmpty(txtGroup.Text) == false && oVMware.getObjectProperty(vmList[ii], "name").ToString().ToUpper() == txtGroup.Text.ToUpper()))
                //    {
                //        vmRef = GetVMs(_name, (ManagedObjectReference[])oVMware.getObjectProperty(vmList[ii], "childEntity"), false);
                //        if (boolVMFound == true)
                //            break;
                //    }
                //}
            }
            return(vmRef);
        }
Example #24
0
 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);
 }
Example #25
0
        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);
        }
Example #28
0
        private Object[] getProperties(VimService service,
                                       ManagedObjectReference moRef,
                                       String[] properties)
        {
            PropertySpec pSpec = new PropertySpec();

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

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

            pfSpec.propSet   = (new PropertySpec[] { pSpec });
            pfSpec.objectSet = (new ObjectSpec[] { oSpec });
            ObjectContent[] ocs
                = service.RetrieveProperties(sic.propertyCollector,
                                             new PropertyFilterSpec[] { pfSpec });
            Object[] ret = new Object[properties.Length];
            if (ocs != null)
            {
                for (int i = 0; i < ocs.Length; ++i)
                {
                    ObjectContent     oc  = ocs[i];
                    DynamicProperty[] dps = oc.propSet;
                    if (dps != null)
                    {
                        for (int j = 0; j < dps.Length; ++j)
                        {
                            DynamicProperty dp = dps[j];
                            for (int p = 0; p < ret.Length; ++p)
                            {
                                if (properties[p].Equals(dp.name))
                                {
                                    ret[p] = dp.val;
                                }
                            }
                        }
                    }
                }
            }
            return(ret);
        }
        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);
        }
Example #30
0
        /// <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!");
      }
   }
Example #34
0
        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);
        }
Example #36
0
        private PropertyFilterSpec[] createPFSForRecentTasks(ManagedObjectReference taskManagerRef)
        {
            PropertySpec pSpec = new PropertySpec();

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

            ObjectSpec oSpec = new ObjectSpec();

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

            TraversalSpec tSpec = new TraversalSpec();

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


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

            PropertyFilterSpec pfSpec = new PropertyFilterSpec();

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

            return(new PropertyFilterSpec[] { pfSpec });
        }
   /**
   * 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;
   }
Example #39
0
      /// <summary>
      /// Get Container contents for all childEntities accessible from rootFolder
      /// </summary>
      public void GetContainerContents() {
         // Create a Filter Spec to Retrieve Contents for...
        
          TraversalSpec rpToVm = new TraversalSpec();
          rpToVm.name = "rpToVm";
          rpToVm.type = "ResourcePool";
          rpToVm.path = "vm";
          rpToVm.skip = false;


          // Recurse through all ResourcePools

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

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


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


          // Traversal through host branch
          TraversalSpec crToH = new TraversalSpec();
          crToH.name = "crToH";
          crToH.type = "ComputeResource";
          crToH.path = "host";
          crToH.skip = false;


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


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


          // Recurse through all Hosts
          TraversalSpec HToVm = new TraversalSpec();
          HToVm.name = "HToVm";
          HToVm.type = "HostSystem";
          HToVm.path = "vm";
          HToVm.skip = false;
          HToVm.selectSet = new SelectionSpec[] { new SelectionSpec() };
          HToVm.selectSet[0].name = "visitFolders";


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

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

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

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

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

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

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

                                 Console.WriteLine("Inner Object Type : " + imor.type);
                                 Console.WriteLine("Inner Reference Value : " + imor.Value);
                              } 
                              else {
                                 Console.WriteLine("Inner Property Value : " + oval);
                              }
                           }
                        }
                     }
                  }
               }
            }
         } 
         else {
            Console.WriteLine("No Managed Entities retrieved!");
         }
      }
 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});
 }
Example #41
0
        /// <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 });
 }
Example #47
0
 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);
 }
Example #48
0
        /// <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();
    } 
 }
Example #50
0
 private Object[] getProperties(VimService service,
                           ManagedObjectReference moRef,
                           String[] properties)
 {
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = moRef.type;
     pSpec.pathSet = properties;
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = moRef;
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = (new PropertySpec[] { pSpec });
     pfSpec.objectSet = (new ObjectSpec[] { oSpec });
     ObjectContent[] ocs
        = service.RetrieveProperties(sic.propertyCollector,
                                     new PropertyFilterSpec[] { pfSpec });
     Object[] ret = new Object[properties.Length];
     if (ocs != null)
     {
         for (int i = 0; i < ocs.Length; ++i)
         {
             ObjectContent oc = ocs[i];
             DynamicProperty[] dps = oc.propSet;
             if (dps != null)
             {
                 for (int j = 0; j < dps.Length; ++j)
                 {
                     DynamicProperty dp = dps[j];
                     for (int p = 0; p < ret.Length; ++p)
                     {
                         if (properties[p].Equals(dp.name))
                         {
                             ret[p] = dp.val;
                         }
                     }
                 }
             }
         }
     }
     return ret;
 }
 ///<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;
     }
 }
Example #55
0
        /// <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;
        }
Example #56
0
 public ObjectContent[] retrievePropertiesEx(ManagedObjectReference propertyCollector, PropertyFilterSpec[] specs)
 {
     return retrievePropertiesEx(propertyCollector, specs, null);
 }
Example #57
0
 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();
 }