vRealize Orchestrator additionalPropertyFilters Explanation


The Orchestrator VcPlugin getAll…() methods (such as VcPlugin.getAllDatastores(), VcPlugin.getAllVirtualMachines(), etc.) accept two parameters, additionalPropertyFilters and xpath.  Use of xpath has been well documented, but I had trouble finding information on additionalPropertyFilters.  Then, I found this explanation in the vRO Coding Design Guide, page 26:

For performance reasons, the returned objects are not fully populated with all of the properties but a pre-defined set of properties. The initial set can be determined by looking at the plugin inventory – all properties displayed in the inventory are in the initial properties set. If additional properties are needed, specify them during the getAll…(…) call so that the request from the vCenters can get a combined set of properties upfront. If this is not done and extra properties are referenced by the workflow or action then a remote call is made each time to vCenter to create a vCenter filter for the tuple <vm, property=”” name=””>, which wastes resources both for remote execution and for filter management on vCenter side.

Ah hah!


How To Use additionalPropertyFilters

A quick look at vroapi.com tells me the syntax is getAll…(string[], string).  As a test, I created a string array containing the name of all properties for the VcVirtualMachine class and ran this code successfully:



Performance Gains?

After performance testing, I found an average gain of 190ms per VM when reading all the VcVirtualMachine’s base level attributes.  However, I’m using Date.now() for performance testing and it is less granular than I would like, also this wasn’t exactly the most controlled test – other environmental factors may have impacted performance, so your results may not be the same.

For the performance test, I ran 30 iterations of VcPlugin.getAllVirtualMachines() and averaged execution time with and without the additionalPropertyFilters parameter, 195ms and 165ms respectively.

Then I read all base-level properties from the first 200 virtual machines, using the object returned by each of the two types of calls, and averaged that time per VM.  I felt that this should trigger the “remote call… to vCenter” referenced above.


  • Per-VM property read time without additionalPropertyFilters: About 240ms
  • Per-VM property read time with additionalPropertyFilters: About 50ms


Hope this helps.



Cross-vCenter VM Clone using vRealize Orchestrator

vRealize Orchestrator includes a built-in workflow to clone VMs, but does not handle cross-vCenter VM cloning automatically.  This code is an early example of the necessary parameters to perform cross-vCenter VM clone using Orchestrator.  I hope it can serve as a starting point for others.

There are some parts of this code that need work, namely:

  • Workflow relies on input values for username and password to authenticate the destination vCenter.  I would prefer to use token based authentication from the VcPlugin’s connection to vCenter.
  • vCenter SSL Thumbprint is provided manually via input value.  I would prefer to find the SSL thumbprint from the VcPlugin’s existing trusted relationship with the destination vCenter.
  • VcPlugin.allSdkConnections[1] is not the right way to get the destination vCenter sdk connection.  This is the easiest one to fix.



vRA 7 vSphere Data Collection, Error processing [inventory]…


After vRealize Automation Center 7 initial data collection on a new vSphere compute resource, when trying to create a reservation, no compute, storage, and network paths are available for the resource.  This is because all hosts in the vSphere cluster were in maintenance mode.

I see the following error in Infrastructure -> Monitoring -> Log:

Error processing [inventory], error details: Value cannot be null. Parameter name: collection

And this related error (I’ve replaced identifiers):

DC: {guid}: inventory: {endpoint: compute}: Received failed data collection response, StatusID = {guid} : Value cannot be null. Parameter name: collection


All hosts in the vSphere cluster were in maintenance mode.  As a result, data collection failed with an error.  After exiting maintenance mode, I was able to run data collection again (Infrastructure -> Compute Resource -> Compute Resources -> Hover on resource -> Data Collection -> Inventory -> Request Now).  This fixed the issue.

Blog entry created as searching for the error verbatim did not yield any results.