6 Replies Latest reply on Jan 5, 2011 3:48 AM by tschoergez

    Apply filter to getAllVmFolders()

    tschoergez Master
    VMware EmployeesvExpertUser Moderators

      Hi,

       

      for the getAllVmFolders() method of VcPlugin and SDKConnection there are the two Parameters available:

      additionalPropertyFilters (array of String)

      query(String)

       

      Can anybody give an example, how to use these?

      (In my case I have several SDKConnections and several Datacenter in there and I need only Folders from one special Datacenter)

       

      thanks in advance!

      Cheers ,

      joerg

        • 1. Re: Apply filter to getAllVmFolders()
          Hot Shot

          Hi Joerg,

           

          i have the same question! There is nothing to find for the filter descriptions.

           

          best regards

          Christian

          • 2. Re: Apply filter to getAllVmFolders()
            Andreas Diemer Hot Shot

            Hi Jörg,

             

            i just wrote in http://communities.vmware.com/thread/293157?tstart=0 a little bit about the filtering.

            In http://www.vmware.com/pdf/PortingGuide201.pdf on page 20 a sample structure is described.

            For XPath I got my informations from here: http://blogs.sun.com/rajeshthekkadath/entry/xpath_identifying_xpath_of_a

             

            As i mentioned i will need a little time for myself to figure it out (next blown weekend)

            Till sunday...

             

            -


            Regards, Andreas Diemer

             

            don't forget: award points to helpful answers

             

            visit http://www.vcoteam.info & http://mighty-virtualization.blogspot.com/

            • 3. Re: Apply filter to getAllVmFolders()
              Andreas Diemer Hot Shot

              Hi Jörg,

               

              it takes a long time to get this - and it is only the second (not helpful) half:

               

              The second (XPath) parameter could be used to filter the result at vCO side . For this there is no real advantage in performance. It is like filtering the array on your own by script.

               

               

              var Pattern = 'yourVMname';
              var XPath = "xpath://name[starts-with(.,'"  + yourVMname +"')]";
              var VMs  = VcPlugin.getAllVirtualMachines(null, XPath);

               

              The snippet returns an array with all VMs starting with "Pattern".

              Actual I'm testing which XPath are supported (and does make sense ).

               

              For the first parameter, which is used at vCenter side, I've got no information till now - sorry. This one will reduce time & bandwidth.

               

              Regards, Andreas

              1 person found this helpful
              • 4. Re: Apply filter to getAllVmFolders()
                tschoergez Master
                VMware EmployeesUser ModeratorsvExpert

                Hi Andreas,

                I got the same information last week, unfotunately my code

                var searchName = 'VC';
                var str = "xpath://name[starts-with(.,'"  + searchName +"')]";
                var vms  = VcPlugin.getAllVirtualMachines(null, str);
                
                

                 

                ...crashes the vCO-Server (it hangs in a neverending loop with lot of following errors in Server.log):

                 

                2010-12-20 17:17:04.159+0100 WARN [VimSession] invokeWebServiceOperation() [vcoscript@https://vc41.vmlab.local:443/sdk/Main#1ddeda00].createFilter --> InvalidProperty : 'network'
                2010-12-20 17:17:04.159+0100 WARN [FiltersManager] createPropertyFilter() --> [vcoscript@https://vc41.vmlab.local:443/sdk/Main#1ddeda00, Nb filters used 143] --> Property name 'network' was not found by VirtualCenter
                2010-12-20 17:17:04.159+0100 WARN [FiltersManager] createPropertyFilter() --> Empty filter, aborting
                2010-12-20 17:17:04.159+0100 ERROR [VimNetwork] getNetworks() --> Property 'network' not exists
                2010-12-20 17:17:04.173+0100 INFO [LicenseTester] This vCenter server is licensed for vCenter Orchestrator Server
                2010-12-20 17:17:04.177+0100 WARN [VimSession] invokeWebServiceOperation() [vcoscript@https://vc41.vmlab.local:443/sdk/Main#1ddeda00].createFilter --> InvalidProperty : 'network'
                2010-12-20 17:17:04.178+0100 WARN [FiltersManager] createPropertyFilter() --> [vcoscript@https://vc41.vmlab.local:443/sdk/Main#1ddeda00, Nb filters used 143] --> Property name 'network' was not found by VirtualCenter
                2010-12-20 17:17:04.178+0100 WARN [FiltersManager] createPropertyFilter() --> Empty filter, aborting
                2010-12-20 17:17:04.178+0100 ERROR [VimNetwork] getNetworks() --> Property 'network' not exists
                2010-12-20 17:17:04.179+0100 ERROR [VimSession] getAccountManager() --> 
                java.lang.NullPointerException
                 at com.vmware.vmo.plugin.vi4.VimSession.getAccountManager(VimSession.java:1710)
                 at com.vmware.vmo.plugin.vi4.VimHost.getAccountManager(VimHost.java:234)
                 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                ......
                

                 

                (only way is to restart the vCO service complete)

                 

                For xpath, I'm pretty sure you know this great tutorial:

                http://www.w3schools.com/xpath/default.asp

                 

                 

                For the first parameter: It seems to be an array of Strings, where you can define the properties of the objects you want to get, if you dont need every sinlge information.

                (I got an example with "runtime.powerState", but because of the error above I cannot test it yet).

                 

                Regards,

                joerg

                • 5. Re: Apply filter to getAllVmFolders()
                  kspirov Novice
                  VMware Employees

                  Hello and happy new year! I am sorry to hear for the difficulties, caused by this example.

                   

                  1. The solution is the following - just write the same search pattern without // and it will work.

                   

                   

                  The problem is in //  - // - selects nodes in the document from the current node that match the selection no matter where they are. The using of // is bad idea for production, this means all object tree will be traversed (on bean level) and will make a lot of remote calls.

                   

                  2. The VCO team will do the following for vCO 4.2

                   

                  1) The lack of documentation problem will be fixed

                  2) This concrete use case will be prevented on code level, because it is totally unacceptable.

                   

                  3. Important: If you called such workflow, you will have difficulties to terminate it, because the XPath method call is beyond the Rhino level. If the workflow is with server restart behavior - resume workflow run, please make sure you changed it to "do not resume workflow run" before restarting.

                   

                  Finally about the first parameter - it is just a hint, the system will give the same results with and without it.  It  allows to specify the properties, that will be added to the default property filter. This will prevent additional calls to the remote server. If you pass null (or empty array) it will still load some properties by default. You can see them by looking for [FiltersManager] in the console outpuit. It is a good idea to specify in the array the same properties that participate in XPath search.

                   

                  Kind regards

                  Konstantin Spirov, vCO team member

                  • 6. Re: Apply filter to getAllVmFolders()
                    tschoergez Master
                    vExpertUser ModeratorsVMware Employees

                    YEAH!

                    That was the missing link. Now the filter from my examples above work as expected!

                     

                    For the documentation: It would be great to have some real world examples:

                    getAllDatastores which are inaccessible, or which are type nfs

                    getAllVirtualMachines which are Powered on

                    ....

                     

                    to 3.) Yep, I learned this the hard way :-)

                     

                    I do not understand the idea of the first parameter completely yet, but now at least I can continue playing around!

                     

                    Thank you very much, Konstantin!

                    Cheers,

                    Joerg