There are a number of new and useful capabilities that have been introduced in the OVF 2.0 specification. One such capability which I thought was really interesting and that could easily benefit VMware-based solutions is the ScaleOutSection feature. This feature allows you specify the number of instances of a given Virtual Appliance to instantiate at deployment time by making use of pre-defined OVF Deployment Options which can also be overriden by a user.
Lets use an example to see how this actually works. Say you have a single Virtual Appliance (VA) and the application within the appliance can scale to N, where N is any number greater or equal to 1. If you wanted to deploy 3 instances of this VA, you would have to deploy it 3 separate times by either by running through an OVF upload or deploying it from a template. In either case, you are performing N-instantiations. Would it not be cool if you could still start with a single VA image and specify at deployment time the number of instances you want to deploy and only need to upload the VA just once? Well, that is exactly what the OVF ScaleOutSection feature provides.
Below is a diagram to help illustrate this feature further. We start out with our single VA, which contains several pre-defined Deployment Options which can contain any text you wish for the logical grouping. In this example, I am using the terms "Single", "Minimal" and "Typical" to map to number of VA's to deploy which are 1, 3, and 4 respectively. If we choose the "Minimal" Deployment option, we would then get 3 instantiated VA's. If we decide that the defaults are not sufficient, we could also override the default by specifying a different number which the VA supports.
A really cool use case that I had thought about when I first came across the ScaleOutSection feature was to make use of it with my Nested ESXi Virtual Appliance. This capability would make it even easier to standup a vSphere or VSAN Cluster of any size for development or testing purposes. Today, vSphere and many of the other VMware products only support OVF 1.x specification and as far as I know, OVF 2.0 was not something that was being looked at.
Right before holiday break, I was chatting with one of the Engineers in the Content Library team and one of the topics that I had discussed in passing was OVF 2.0 support. It turns out that, although vSphere itself does not support OVF 2.0, the vSphere Content Library feature actually contains a very basic implementation of OVF 2.0 and though not complete, it does have some support for the ScaleOutSection feature.
This of course got me thinking and with the help of the Engineer, I was able to build a prototype version of my Nested ESXi Virtual Appliance supporting the ScaleOutSection feature. Below is a quick video that demonstrates how this feature would work using a current release of vSphere 6.0. Pretty cool if you ask me!? 🙂
Demo of Prototype Nested ESXi Virtual Appliance using OVF 2.0 ScaleOut from lamw on Vimeo.
Now, before you get too excited. There were a couple of caveats that I found while going through the deployment workflow. During the deployment, the VMDKs were not properly being processed and when you power on the VMs, it was as if they were empty disks. This was a known issue and I have been told this has already been resolved in a future update. The other bigger issue is how OVF properties are handled with multiple instances of the VA. Since this is not a supported workflow, the OVF wizard is only brought up once regardless of the number of instances being deployed. This means that all VAs will inherit the same OVF values since are you are only prompted once. The workaround was to deploy the VAs, then go into each individual VA and update their OVF properties before powering on the VMs. Since OVF 2.0 and the ScaleOutSection feature is not an officially supported feature, the user experience is not as ideal as one would expect.
I personally think there are some pretty interesting use cases that could be enabled by OVF 2.0 and ScaleOutSection feature. A few VMware specific solutions that I can think of off the top of my head that could potentially leverage this capability are vRealize Log Insight, vRealize Operations Manager and vRealize Automation Center to just name a few. I am sure there are others including 3rd party and custom Virtual Appliances that have been developed and I am curious to hear if this is something that might be of interest to you? If you have any feedback, feel free to leave a comment and I can share this with the Content Library PM.
Danny says
Do you still have a working example of this somewhere? The download links have been deleted since Broadcom's M&A
William Lam says
which download link are you referring to? Everything you need is articulated in this article
Danny says
I was originally referring to the links in https://williamlam.com/2015/12/deploying-nested-esxi-is-even-easier-now-with-the-esxi-virtual-appliance.html (which this article links to), but I have since found the new location for those in the VMware Flings.
Unfortunately, it seems that none of the versions of those flings actually use the `ScaleOutSection` (or I've missed it). Can you still post a working example of the .ovf's XML with ScaleOutSection?
Reason for asking is that when I try to recreate this, I get an error "SECTION_UNKNOWN: Unsupported required section ScaleOutSection ()" (on homelab vCenter 7.0.3 - did not test on our corporate vCenter 8 yet).
Btw, I want to thank you for all this information regarding the OVF spec you've shared, it has allowed us to create very elaborate OVA logic so far 🙂
The spec document itself is thorough, but having your working examples has been a huge help!
William Lam says
Ah, looks like I never actually published the prototype because it had limitations as described ... it took me awhile to find the original implementation (which I wasn't but did find my notes) and was able to put together https://virtuallyghetto-download.s3.amazonaws.com/Nested_ESXi8.0u2b_Appliance_Template_v1-ScaleOut-Example.ovf (you'll obviously need to add your own disks to make this deployable) BUT I will warn that at least in latest vSphere 8.0 Update 3, I was able to get OVF imported into Content Library, but it was not actually deployable and threw parsing error due to ScaleOut property
Danny says
Getting it into the Content Library was as far as I could get as well. I guess we can conclude that this part of the OVF spec is simply not reliably implemented.
Thanks loads for looking into it though 🙂