In case you missed the previous article, have a read here which goes into greater detail behind the new VCSA bootstrap installer (also known as vSAN Easy Install) which is part of the new vSAN 6.6 release. As I hinted at the end of the previous post, customers not only have a simplified way of bootstrapping the VCSA on vSAN from a UI standpoint but they can also completely automate this leveraging some of the new vSAN Management 6.6 APIs, which are the same APIs that the UI uses.

A new Managed Object called VsanVcsaDeployerSystem is now available when connecting to either a standalone ESXi host as well as a vCenter Server. It contains the following three methods:

Here is the workflow for automating the VCSA bootstrap installer:

Step 1 - Connect directly to the ESXi host which you wish to bootstrap vSAN. You will use the VsanPrepareVsanForVcsa() API which accepts a list of disks for either a Hybrid or All-Flash vSAN datastore.

Step 2 - Deploy the VCSA like you normally would using the CLI Installer. You will specify the ESXi host that you had just prepared in Step 1 which includes the vSAN Datastore that was setup as part of that process.

Step 3 - Once the VCSA has been successfully deployed, you will connect to the vCenter Server and use the VsanPostConfigForVcsa() API which will create a vSphere Datacenter, vSphere Cluster and enable it with vSAN (which can also include Dedupe/Compression if you are using an All-Flash setup) and then automatically add the ESXi host that you had just bootstrapped. If you have provisioned other ESXi hosts that have not been configured with vSAN, you can also include that into the API request. The really nice thing about this "post" API is that rather than having to call into several existing vSphere APIs to setup vCenter Server, you can do all of that just using this single API!

To help demonstrate the use of the these new vSAN Management APIs, I have created a simple Python script which exercises these new APIs called The script supports three operations: listdisk, prepare and post.

Here is an example of running the listdisk operation which will list all available disks that are currently not in use and can be used by vSAN:

python -s -u root -p VMware1! --operation listdisk

Once you have the disks information, you can then use the prepare operation as shown below to bootstrap your ESXi host:

python -s -u root -p VMware1! --operation prepare --cache "SAMSUNG MZVPV128" --capacity "Samsung SSD 850"

At this point, you are now ready to deploy the VCSA using the CLI Installer. Once that has completed, you can complete the process by using the post operation and provide the required parameters to setup vCenter Server including the ESXi host that you had just bootstrapped so it can be added to the vCenter Server inventory as shown below:

python -s -u 'administrator@vsphere.local' -p VMware1! --operation post --datacenterName "VSAN-Datacenter" --clusterName "VSAN-Cluster" --esxName --esxUsername root --esxPassword VMware1!

Once the post operation has completed, you will have a fully configured vCenter Server which you can check by logging into the vSphere Web Client. Pretty slick, if you ask me!

6 thoughts on “Automating the new native VCSA bootstrap "Easy Install" in vSAN 6.6

    • I found in hostd.log that “There are currently 1 usable fault domains. The operation requires 2 more usable fault domains.”. I added following flag to ovftool to get it going.

      –defaultStorageRawProfile=((“hostFailuresToTolerate” i1) (“forceProvisioning” i1))

  1. Hi,
    I have to deploy two PSC (external ) and VCSA on VSAN datastore.
    If I follow below steps, will it solve my problem? Kindly suggest.
    Step 1) Call VsanPostConfigForVcsa()
    Step 2) Deploy primary and secondary PSC (CLI installer)
    Step 3) Deploy VCSA with external PSC (CLI installer)

  2. Hi,
    I’m seeing the following error more often than not while using this sample against an esxi host. Any ideas on causes/how to fix it ? Thanks

    taskid = vvds.VsanPrepareVsanForVcsa(spec=spec)
    File “/usr/lib/python2.7/site-packages/pyVmomi/”, line 580, in
    self.f(*(self.args + (obj,) + args), **kwargs)
    File “/usr/lib/python2.7/site-packages/pyVmomi/”, line 386, in _InvokeMethod
    return self._stub.InvokeMethod(self, info, args)
    File “/usr/lib/python2.7/site-packages/pyVmomi/”, line 1369, in InvokeMethod
    raise http_client.HTTPException(“{0} {1}”.format(resp.status, resp.reason))
    HTTPException: 503 Service Unavailable (Failed to connect to endpoint: [N7Vmacore4Http16LocalServiceSpecE:0x04b185b8] _serverNamespace = /vsan action = Allow _port = 9096)

Thanks for the comment!

This site uses Akismet to reduce spam. Learn how your comment data is processed.