One of the use cases I’ve been working on with a customer is based on the vRO/vCO multi-node plug-in and involves the master vRO/vCO node calling proxy workflows based on a parameter - in this case the target site. As you can see from this very simple diagram, a Cloud Management System (CMS) calls a workflow on the Master node, which then executes a proxy workflow on the correct site. The trick is getting the Master Orchestrator node to pick the right proxy workflow.
![]()
In my
The remote workflow that ends up being called is not actually important here - it’s the ability to execute a workflow on a remote site based on a user’s choice in the CMS. I’m going to use a workflow I’ve written (“vCenter:Add-PortGroup”) to add a dvPortGroup to a dvSwitch as an example, because it’s easy to replicate and is fairly generic.
First, I generate the standard, out-of-the-box proxy workflow for the test workflow on SiteA, using the “Create a proxy workflow” workflow from the Master node.
![]()
Next, I edited the workflow along the lines of my example in that
I removed the “remoteVCOServer” attribute, as it’s no longer required. I then added an attribute called “SiteAWorkflow” which holds a VCO:RemoteWorkflow object, and set it’s value to be the Workflow on the Slave vRO/vCO server in Site A. I also added a SiteBWorkflow, and you would continue for each of the remote sites.
![]()
Next I added a string Input parameter called “Site”. Notice there are 3 other parameters from my workflow, dvPortGroupName, dvPortGroupVLANID and dvSwitchName - these are imported from the remote workflow when the proxy workflow is initially created.
![]()
As the list of sites is a set of known values, I also went to the Presentation tab and entered some predefined answers for the input parameter:
![]()
Next, I went to the Schema tab and edited the first “Scripting” element of the workflow. I added the an IN parameter for the Site parameter, and the three RemoteWorkflow attributes.
![]()
On the Scripting tab I used very similar code to before, but added a switch statement to select the correct workflow based on the “Site” input parameter, or throw an exception if the Site wasn’t known. The correct site RemoteWorkflow object is assigned to a new variable “remoteWorkflow” and the workflow is executed as before:
![]()
When I test the workflow I can now select which site I wish to execute the workflow on, and the corresponding Slave Orchestrator node actually executes it for me.
![]()
The workflow has returned an object of type VC:DistributedVirtualPortGroup as expected:
![]()
The dvPortGroup has been created, as expected:
![]()
And the remote Orchestrator node has a new successful execution:
![]()
While this is a very simple way of doing such a site selection, it does have problems - for example, it’s not very manageable in case of dozens of sites. There is potential to develop this using a CMDB that holds “Site” data and retrieve the ID of the remote vRO server and remote workflow from there, allowing a much more flexible and manageable solution (you could even write a workflow to grab those IDs and add them to the CMDB automatically whenever a new Site is commissioned).
I hope that this gives you some ideas as to what you could use the multi-node plugin for - and if you’ve got a good use case for it I’d love to hear from you via my Twitter @sammcgeown