Converting Two-Host vSAN Clusters to ROBO Cluster

You can convert two-host vSAN clusters to ROBO clusters with a single shared witness.

Here is an example for converting in batches, one or more regular two-host vSAN clusters to Remote Office/Branch Office (ROBO) clusters with a single shared witness.

def convertToRoboClusterInBatch(si, vscs, witness, clusterRefs):
   """ Convert multiple two-node vsan clusters to robo clusters
       that share the same witness in batch.

   Requirements:
      1. The candidate cluster must be a two-node cluster with vsan enable.
      2. There is no network isolation between witness and the multiple
      clusters given.
   """
   checkCompatibility(si, vscs, clusterRefs, witness)
   for cluster in clusterRefs:
      if len(vscs.GetWitnessHosts(cluster)) != 0:
         msg = "ERROR: cluster %s is not a regular vSAN cluster" % cluster.name
         sys.exit(msg)
   print("Converting normal vSAN clusters(2 nodes) '%s' to robo clusters" \
         " with shared witness %s" % \
         ([cluster.name for cluster in clusterRefs], witness.name))
   spec = vim.vsan.VsanVcStretchedClusterConfigSpec(
      witnessHost = witness,
      clusters = [vim.cluster.VsanStretchedClusterConfig(
         cluster = cluster,
         preferredFdName= 'fd1',
         faultDomainConfig=
         vim.cluster.VSANStretchedClusterFaultDomainConfig(
            firstFdName = 'fd1',
            firstFdHosts = [cluster.host[0]],
            secondFdName = 'fd2',
            secondFdHosts = [cluster.host[1]],
         ),
      ) for cluster in clusterRefs]
   )
   addWitnessTask = vscs.AddWitnessHostForClusters(spec)
   vsanapiutils.WaitForTasks([addWitnessTask], si)