Domains APIs

Domains APIs

APIs for managing Domains

A workload domain is a policy based resource container with specific availability and performance attributes that combines compute (vSphere), storage (vSAN) and networking (NSX) into a single consumable entity.

1. Create a Domain

Create a Domain workflow automatically:

  • Deploys an additional vCenter Server Appliance for the new domain within the management domain.

  • By leveraging a separate vCenter Server instance per domain, software updates can be applied without impacting other domains. It also allows for each domain to have additional isolation as needed.

1.1. Prerequisites

The following data is required

  • Name of the domain

  • vCenter details

    • Name of the vCenter

    • Network details

      • IP Address of the vCenter

      • FQDN of the vCenter

      • Gateway

      • Subnet mask

    • Password for the root user (8-20 characters)

1.2. Steps

  • Validate the input specification

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/validations' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "domainName" : "sfo-w01",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  }
}'

HTTP Request

POST /v1/domains/validations HTTP/1.1
Content-Type: application/json
Content-Length: 400
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "domainName" : "sfo-w01",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/domains/validations/87954d55-5371-41a2-861b-35dd602d852a
Content-Type: application/json
Content-Length: 110

{
  "id" : "87954d55-5371-41a2-861b-35dd602d852a",
  "description" : "",
  "executionStatus" : "IN_PROGRESS"
}
  • Get Validation response of the domain specification using id obtained from previous spec validation call

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/validations/296fc6be-0b4f-4f09-b705-17b257f06d59' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains/validations/296fc6be-0b4f-4f09-b705-17b257f06d59 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 185

{
  "id" : "4f067d11-733a-4388-a59f-2d90a28cd36c",
  "description" : "Validation result",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ ]
}
  • In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  • In case of errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "FAILED".

Note : Make changes to the input specification and re-validate using a new API invocation.

  • Trigger the task using the valid input specification.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "domainName" : "sfo-w01",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  }
}'

HTTP Request

POST /v1/domains HTTP/1.1
Content-Type: application/json
Content-Length: 400
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "domainName" : "sfo-w01",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/null
Content-Length: 3

{ }
  • Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip : Refer to: Get a Task.

  • If the "status" is "SUCCESSFUL", the task is completed successfully.

  • If the "status" is "FAILED", the task can be re-executed.

Tip : Refer to: Retry a Task.

2. Update a Domain

Update a Domain workflow:

  • Import the primary cluster

    • For the first NSX-T VI Domain in your environment, the workflow deploys a cluster of three NSX-T Managers in the management domain. The workflow also configures an anti-affinity rule between the managers to prevent them from being on the same host for High Availability. Each subsequent NSX-T Domains will either share this NSX-T Manager Cluster or create its own.

      • If required, the new domain can also share the NSX-T cluster with an existing workload domain. In this scenario, new NSX-T Managers will not be deployed, but will be shared with an existing NSX-T Cluster.

        • For this, fetch the information of the NSX-T Managers that can be shared.

        • TIP: Get the NSX-T Clusters

        • From the list of NSX-T Clusters fetched, only the existing NSX-T clusters for which "isShared" is true, can be shared with the new domains being deployed.

        • The precise information of the existing NSX-T Cluster fetched from above should be used in the "nsxTSpec" section of the input payload.

    • Licenses integrate the deployed components with the appropriate pieces in the Cloud Foundation software stack.

2.1. Prerequisites

  • VxRail Domain should have already been created.

  • In case of DHCP option, a DHCP server must be configured on the VLAN of the domain. When NSX creates VTEPs for the domain, they are assigned IP addresses from the DHCP server.

    In case of static IP for VTEPs, the network information listed below needs to be specified.

  • The following data is required

    • ID of the created domain

    • Host details, For each host

      • IP address of the host

      • FQDN of the host

      • user name of the host

      • password of the host

    • Datastore details

      • License for the vSAN datastore
    • VxRail Manager Details

      • admin and root credentials
    • Network Details

      • List of VDS (which should have a single element for VxRail), For each VDS

        • VDS name

          • This can either refer to the name of an existing System DVS that should be used for overlay traffic, or the name of the new to-be-deployed overlay DVS.
        • isUsedByNsxt set to true

        • list of Port groups with its names and the corresponding transport type

          • In the scenario where an existing system VDS should be used for overlay traffic, 'portGroupSpecs' should contain one element, i.e. a port group under the provided system DVS. VMNICS mapped to this provided port group will be used for overlay traffic. On the other hand, if a new overlay DVS is to be deployed, then 'portGroupSpecs' can be left empty.
      • NSX cluster Details

        • VLAN ID of Geneve

          { "nsxTClusterSpec" : { "geneveVlanId" : 2 } }

    • For NSX-T

      • NSX Manager virtual machine details

        • Name of the NSX Manager virtual machine

        • Network details

          • IP Address of the virtual machine

          • Fully-qualified domain name

          • Gateway

          • Subnet mask

      • Virtual IP address which would act as proxy/alias for NSX-T managers

      • Fully-qualified domain name for VIP so that common SSL certificates can be installed across all managers

      • License key for NSX

      • NSX manager admin Password (basic authorization and SSH)

      • IP Address Pool spec if the TEP IP assignment is done from IP pool (only required in case of non-DHCP option)

        • Name of the IP address pool

        • Description of the IP address pool

        • IP address pool subnet details

          • Subnet cidr

          • Gateway

          • IP Address Pool Ranges

            First IP address in the IP address range

            Last IP address in the IP address range

      • For DHCP

        {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
        
      • For creating new IP pool during domain creation, add the following IP address pool spec to the nsxTSpec object

        {
          "ipAddressPoolSpec" : {
            "name" : "static-ip-pool-01",
            "subnets" : [ {
              "ipAddressPoolRanges" : [ {
                "start" : "10.0.11.50",
                "end" : "10.0.11.70"
              }, {
                "start" : "10.0.11.80",
                "end" : "10.0.11.150"
              } ],
              "cidr" : "10.0.11.0/24",
              "gateway" : "10.0.11.250"
            } ]
          }
        }
        
      • For using an existing IP pool during domain creation, add the following IP address pool spec to the nsxTSpec object. For more information on fetching the NSXT Cluster details, refer to NSX-T Clusters

        {
          "ipAddressPoolSpec" : {
            "name" : "static-ip-pool-01"
          }
        }
        

Note : To create a new IP address pool during domain creation, "subnets" , the list of IpAddressPoolSubnetSpec in the input spec must not be empty. Only the IP address pool name has to be sent in the input spec while using an existing IP address pool

2.2. Steps

  • Through VxRail UI, create a cluster in the VC, which was created as part of the previous invocation of the create domain

  • Get the ID of the created domain

    • TIP: Get the Domains

    • Filter the response by VxRail Domain name and get the respective ID

  • Get the list of unmanaged clusters with names in thus created vi domain, Invoke a call to get clusters to get the details.

Tip : Refer to: Get the unmanaged clusters by criterion

  • Choose the name of one cluster that needs to be imported. Invoke a call to get unmanaged cluster by selected cluster name to get the network and host details.

Tip : Refer to: Get an unmanaged cluster by criterion

  • Create a domain update spec

    • With the cluster information from previous call:

      • For each host populate

        • IP address of the host

        • FQDN of the host

        • user name of the host

        • password of the host

      • Network Details

        • For each VDS (Single element for VxRail)

          • VDS name

            This can either refer to an existing System DVS that should be used for overlay traffic, or the name of a new DVS that should be created for overlay traffic.

          • isUsedByNsxt set to true

          • list of Port groups with its names and the corresponding transport type

            In the scenario where an existing system VDS should be used for overlay traffic, 'portGroupSpecs' should contain one element, i.e. a port group under the provided system DVS. VMNICS mapped to this provided port group will be used for overlay traffic. On the other hand, if a new overlay DVS is to be deployed, then 'portGroupSpecs' can be left empty.

    • Choose to create a new NSX-T domain or select from the existing ones

    • Adding license key for NSXt and vSAN datastore

  • Validation of the domain specification though async call

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/1234/validations' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "clusterSpec" : {
    "name" : "sfo-w01-cl01",
    "vxRailDetails" : {
      "rootCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "adminCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk"
    },
    "hostSpecs" : [ {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.30",
      "hostName" : "sfo-w01-esx01",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.31",
      "hostName" : "sfo-w01-esx02",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.32",
      "hostName" : "sfo-w01-esx03",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf"
    } ],
    "datastoreSpec" : {
      "vsanDatastoreSpec" : {
        "licenseKey" : "123"
      }
    },
    "networkSpec" : {
      "vdsSpecs" : [ {
        "name" : "sfo-w01-cl01-vds01",
        "isUsedByNsxt" : true,
        "portGroupSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01-pg-mgmt",
          "transportType" : "MANAGEMENT"
        } ]
      } ],
      "nsxClusterSpec" : {
        "nsxTClusterSpec" : {
          "geneveVlanId" : 3
        }
      }
    },
    "skipThumbprintValidation" : false
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large",
    "ipAddressPoolSpec" : {
      "name" : "static-ip-pool-01",
      "subnets" : [ {
        "ipAddressPoolRanges" : [ {
          "start" : "10.0.11.50",
          "end" : "10.0.11.70"
        }, {
          "start" : "10.0.11.80",
          "end" : "10.0.11.150"
        } ],
        "cidr" : "10.0.11.0/24",
        "gateway" : "10.0.11.250"
      } ]
    }
  }
}'

HTTP Request

POST /v1/domains/1234/validations HTTP/1.1
Content-Type: application/json
Content-Length: 3124
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "clusterSpec" : {
    "name" : "sfo-w01-cl01",
    "vxRailDetails" : {
      "rootCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "adminCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk"
    },
    "hostSpecs" : [ {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.30",
      "hostName" : "sfo-w01-esx01",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.31",
      "hostName" : "sfo-w01-esx02",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.32",
      "hostName" : "sfo-w01-esx03",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf"
    } ],
    "datastoreSpec" : {
      "vsanDatastoreSpec" : {
        "licenseKey" : "123"
      }
    },
    "networkSpec" : {
      "vdsSpecs" : [ {
        "name" : "sfo-w01-cl01-vds01",
        "isUsedByNsxt" : true,
        "portGroupSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01-pg-mgmt",
          "transportType" : "MANAGEMENT"
        } ]
      } ],
      "nsxClusterSpec" : {
        "nsxTClusterSpec" : {
          "geneveVlanId" : 3
        }
      }
    },
    "skipThumbprintValidation" : false
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large",
    "ipAddressPoolSpec" : {
      "name" : "static-ip-pool-01",
      "subnets" : [ {
        "ipAddressPoolRanges" : [ {
          "start" : "10.0.11.50",
          "end" : "10.0.11.70"
        }, {
          "start" : "10.0.11.80",
          "end" : "10.0.11.150"
        } ],
        "cidr" : "10.0.11.0/24",
        "gateway" : "10.0.11.250"
      } ]
    }
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/domains/1234/validations/39405224-99c6-42dc-9a2a-36347a226ed4
Content-Type: application/json
Content-Length: 110

{
  "id" : "39405224-99c6-42dc-9a2a-36347a226ed4",
  "description" : "",
  "executionStatus" : "IN_PROGRESS"
}
  • Get Validation response of the import primary cluster specification

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/0060227e-05b3-41d4-b483-beadde0a5d44' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/0060227e-05b3-41d4-b483-beadde0a5d44 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 185

{
  "id" : "11302789-345e-4176-950c-fd0ad46a27dc",
  "description" : "Validation result",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ ]
}
  • In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  • In case of errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "FAILED".

Note : Make changes to the input specification and re-validate using a new API invocation.

  • Trigger the domain update task using the validated input spec.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/1234' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "clusterSpec" : {
    "name" : "sfo-w01-cl01",
    "vxRailDetails" : {
      "rootCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "adminCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk"
    },
    "hostSpecs" : [ {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.30",
      "hostName" : "sfo-w01-esx01",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.31",
      "hostName" : "sfo-w01-esx02",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.32",
      "hostName" : "sfo-w01-esx03",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf"
    } ],
    "datastoreSpec" : {
      "vsanDatastoreSpec" : {
        "licenseKey" : "123"
      }
    },
    "networkSpec" : {
      "vdsSpecs" : [ {
        "name" : "sfo-w01-cl01-vds01",
        "isUsedByNsxt" : true,
        "portGroupSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01-pg-mgmt",
          "transportType" : "MANAGEMENT"
        } ]
      } ],
      "nsxClusterSpec" : {
        "nsxTClusterSpec" : {
          "geneveVlanId" : 3
        }
      }
    },
    "skipThumbprintValidation" : false
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large",
    "ipAddressPoolSpec" : {
      "name" : "static-ip-pool-01",
      "subnets" : [ {
        "ipAddressPoolRanges" : [ {
          "start" : "10.0.11.50",
          "end" : "10.0.11.70"
        }, {
          "start" : "10.0.11.80",
          "end" : "10.0.11.150"
        } ],
        "cidr" : "10.0.11.0/24",
        "gateway" : "10.0.11.250"
      } ]
    }
  }
}'

HTTP Request

PATCH /v1/domains/1234 HTTP/1.1
Content-Type: application/json
Content-Length: 3124
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "clusterSpec" : {
    "name" : "sfo-w01-cl01",
    "vxRailDetails" : {
      "rootCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "adminCredentials" : {
        "credentialType" : "SSH",
        "username" : "admin",
        "password" : "VMware123!"
      },
      "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk"
    },
    "hostSpecs" : [ {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.30",
      "hostName" : "sfo-w01-esx01",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.31",
      "hostName" : "sfo-w01-esx02",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd"
    }, {
      "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
      "ipAddress" : "192.10.20.32",
      "hostName" : "sfo-w01-esx03",
      "username" : "root",
      "password" : "VMware123!",
      "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf"
    } ],
    "datastoreSpec" : {
      "vsanDatastoreSpec" : {
        "licenseKey" : "123"
      }
    },
    "networkSpec" : {
      "vdsSpecs" : [ {
        "name" : "sfo-w01-cl01-vds01",
        "isUsedByNsxt" : true,
        "portGroupSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01-pg-mgmt",
          "transportType" : "MANAGEMENT"
        } ]
      } ],
      "nsxClusterSpec" : {
        "nsxTClusterSpec" : {
          "geneveVlanId" : 3
        }
      }
    },
    "skipThumbprintValidation" : false
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large",
    "ipAddressPoolSpec" : {
      "name" : "static-ip-pool-01",
      "subnets" : [ {
        "ipAddressPoolRanges" : [ {
          "start" : "10.0.11.50",
          "end" : "10.0.11.70"
        }, {
          "start" : "10.0.11.80",
          "end" : "10.0.11.150"
        } ],
        "cidr" : "10.0.11.0/24",
        "gateway" : "10.0.11.250"
      } ]
    }
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/null
Content-Length: 3

{ }
  • Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip : Refer to: Get a Task.

  • If the "status" is "SUCCESSFUL", the task is completed successfully.

  • If the "status" is "FAILED", the task can be re-executed.

Tip : Refer to: Retry a Task.

3. Create a Domain with Workflow Optimization

The following set of APIs can be used to optimize the domain creation workflow by clubbing both VxRail workflow and VCF workflow which were being done independent of each other. User will need to use only the following SDDC Manager API to perform workload domain operation.
Create a Domain with Workflow Optimization will automatically:

  • Deploy an additional vCenter Server Appliance for the new domain within the management domain. By leveraging a separate vCenter Server instance per domain, software updates can be applied without impacting other domains. It also allows for each domain to have additional isolation as needed

  • Create the primary cluster once the domain is created

Note : Update domain operation is not needed for Create domain with Work Flow Optimization

3.1. Prerequisites

  • The following data is required

    • Name of the domain

    • DNS entries for WLD hosts, new vCenter, VxRail Manager, and NSXT already configured in the DNS server.

    • vCenter details

      • Name of the vCenter

      • Network details

        • IP Address of the vCenter

        • FQDN of the vCenter

        • Gateway

        • Subnet mask

      • Password for the root user (8-20 characters)

    • Cluster details

      • Name of the new cluster that will be added to the specified workload domain

      • VxRail Manager Details

        • admin and root credentials

        • DNS Name of VxRail Manager

        • SSH Thumbprint of VxRail Manager

        • SSL Thumbprint of VxRail Manager

        • NIC profile of hosts

        • Networks (details of portgroups such as VSAN, VMOTION, MANAGEMENT.)

      • VSAN license key

      • Host details (the hosts details can be obtained using Get the hosts discovered by HCI manager)

        • Hostname of ESXi host

        • IpAddress of the same ESXi host

        • Credentials of the ESXi host

        • SSH Thumbprint of the ESXi host

        • Serial Number of the ESXi host

        • Host Network Details

        • ESXi License key

      • Network Details

        • List of VDS details, For each VDS

          • DVS name

          • Flag to indicate whether this DVS is used by NSX-T

          • Port group names and the corresponding transport type. Note that EDGE_INFRA_OVERLAY_UPLINK, VREALIZE should not be specified in the input spec.

        • Geneve vLAN ID

    • NSX cluster Details, For NSX-T

      • VLAN ID of Geneve

      • IP Address Pool spec if the TEP IP assignment is done from IP pool (only required in case of non-DHCP option)

        • Name of the IP address pool

        • Description of the IP address pool

        • IP address pool subnet details

          • Subnet cidr

          • Gateway

          • IP Address Pool Ranges

      • For using DHCP

        {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
        
      • For creating new IP pool during work flow optimized cluster creation

        {
          "ipAddressPoolSpec" : {
            "name" : "static-ip-pool-01",
            "subnets" : [ {
              "ipAddressPoolRanges" : [ {
                "start" : "10.0.11.50",
                "end" : "10.0.11.70"
              }, {
                "start" : "10.0.11.80",
                "end" : "10.0.11.150"
              } ],
              "cidr" : "10.0.11.0/24",
              "gateway" : "10.0.11.250"
            } ]
          }
        }
        
      • For using an existing IP pool during cluster creation. For more information on fetching the NSXT Cluster details, refer to NSX-T Clusters

        {
          "ipAddressPoolSpec" : {
            "name" : "static-ip-pool-01"
          }
        }
        

Note : To create a new IP address pool during domain creation, "subnets" , the list of IpAddressPoolSubnetSpec in the input spec must not be empty. Only the IP address pool name has to be sent in the input spec while using an existing IP address pool

  • Host configuration must have minimum two active vmNics.

3.2. Steps to perform Optimized Domain Creation

  • Get the list of the hosts discovered by HCI Manager

Tip : Refer to: Get the hosts discovered by HCI manager

  • Get the existing NSXT cluster details. This is optional. Use only if existing NSXT cluster is to be used

Tip : Refer to: Get an NSX-T Cluster

  • Get license details

Tip : Refer to: Get the License Keys

  • Prepare WLD create API input using the information obtained in the steps 1 to 3

  • Validate the input specification

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/validations' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "domainName" : "VI-WLD",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "vxRailDetails" : {
        "rootCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "adminCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk",
        "sslThumbprint" : "aabbccddee",
        "networks" : [ {
          "type" : "VSAN",
          "vlanId" : 1407,
          "subnet" : "10.0.60.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.60.1",
          "ipPools" : [ {
            "start" : "10.0.60.55",
            "end" : "10.0.60.57"
          } ]
        }, {
          "type" : "VMOTION",
          "vlanId" : 1406,
          "subnet" : "10.0.59.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.59.1",
          "ipPools" : [ {
            "start" : "10.0.59.55",
            "end" : "10.0.59.57"
          } ]
        } ],
        "ipAddress" : "10.0.0.78",
        "dnsName" : "sfo-w01-cl01-vxrm-2.sfo.rainpole.io",
        "nicProfile" : "ADVANCED_VXRAIL_SUPPLIED_VDS"
      },
      "hostSpecs" : [ {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.30",
        "hostName" : "sfo-w01-esx01",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc",
        "serialNumber" : "7FVRHK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.31",
        "hostName" : "sfo-w01-esx02",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd",
        "serialNumber" : "7PGXWK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.32",
        "hostName" : "sfo-w01-esx03",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf",
        "serialNumber" : "7PGXWK20000000"
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "licenseKey" : "123"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "isUsedByNsxt" : false,
          "portGroupSpecs" : [ {
            "name" : "Virtual SAN-2",
            "transportType" : "VSAN",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vSphere vMotion-2",
            "transportType" : "VMOTION",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true,
          "portGroupSpecs" : [ {
            "name" : "Management Network-2",
            "transportType" : "MANAGEMENT",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "VxRail Management-2",
            "transportType" : "HOSTDISCOVERY",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vCenter Server Network-2",
            "transportType" : "SYSTEMVM",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 3
          }
        }
      },
      "skipThumbprintValidation" : false
    } ]
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large"
  }
}'

HTTP Request

POST /v1/domains/validations HTTP/1.1
Content-Type: application/json
Content-Length: 6681
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "domainName" : "VI-WLD",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "vxRailDetails" : {
        "rootCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "adminCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk",
        "sslThumbprint" : "aabbccddee",
        "networks" : [ {
          "type" : "VSAN",
          "vlanId" : 1407,
          "subnet" : "10.0.60.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.60.1",
          "ipPools" : [ {
            "start" : "10.0.60.55",
            "end" : "10.0.60.57"
          } ]
        }, {
          "type" : "VMOTION",
          "vlanId" : 1406,
          "subnet" : "10.0.59.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.59.1",
          "ipPools" : [ {
            "start" : "10.0.59.55",
            "end" : "10.0.59.57"
          } ]
        } ],
        "ipAddress" : "10.0.0.78",
        "dnsName" : "sfo-w01-cl01-vxrm-2.sfo.rainpole.io",
        "nicProfile" : "ADVANCED_VXRAIL_SUPPLIED_VDS"
      },
      "hostSpecs" : [ {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.30",
        "hostName" : "sfo-w01-esx01",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc",
        "serialNumber" : "7FVRHK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.31",
        "hostName" : "sfo-w01-esx02",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd",
        "serialNumber" : "7PGXWK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.32",
        "hostName" : "sfo-w01-esx03",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf",
        "serialNumber" : "7PGXWK20000000"
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "licenseKey" : "123"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "isUsedByNsxt" : false,
          "portGroupSpecs" : [ {
            "name" : "Virtual SAN-2",
            "transportType" : "VSAN",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vSphere vMotion-2",
            "transportType" : "VMOTION",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true,
          "portGroupSpecs" : [ {
            "name" : "Management Network-2",
            "transportType" : "MANAGEMENT",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "VxRail Management-2",
            "transportType" : "HOSTDISCOVERY",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vCenter Server Network-2",
            "transportType" : "SYSTEMVM",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 3
          }
        }
      },
      "skipThumbprintValidation" : false
    } ]
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large"
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/domains/validations/3110b13f-d5ba-4594-a068-5f62356381a6
Content-Type: application/json
Content-Length: 110

{
  "id" : "3110b13f-d5ba-4594-a068-5f62356381a6",
  "description" : "",
  "executionStatus" : "IN_PROGRESS"
}
  • Get Validation response of the domain specification using id obtained from previous spec validation call

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/validations/296fc6be-0b4f-4f09-b705-17b257f06d59' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains/validations/296fc6be-0b4f-4f09-b705-17b257f06d59 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 185

{
  "id" : "4f067d11-733a-4388-a59f-2d90a28cd36c",
  "description" : "Validation result",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ ]
}
  • In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  • In case of errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "FAILED".

Note : Make changes to the input specification and re-validate using a new API invocation.

  • Trigger the task using the validated input specification.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "domainName" : "VI-WLD",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "vxRailDetails" : {
        "rootCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "adminCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk",
        "sslThumbprint" : "aabbccddee",
        "networks" : [ {
          "type" : "VSAN",
          "vlanId" : 1407,
          "subnet" : "10.0.60.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.60.1",
          "ipPools" : [ {
            "start" : "10.0.60.55",
            "end" : "10.0.60.57"
          } ]
        }, {
          "type" : "VMOTION",
          "vlanId" : 1406,
          "subnet" : "10.0.59.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.59.1",
          "ipPools" : [ {
            "start" : "10.0.59.55",
            "end" : "10.0.59.57"
          } ]
        } ],
        "ipAddress" : "10.0.0.78",
        "dnsName" : "sfo-w01-cl01-vxrm-2.sfo.rainpole.io",
        "nicProfile" : "ADVANCED_VXRAIL_SUPPLIED_VDS"
      },
      "hostSpecs" : [ {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.30",
        "hostName" : "sfo-w01-esx01",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc",
        "serialNumber" : "7FVRHK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.31",
        "hostName" : "sfo-w01-esx02",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd",
        "serialNumber" : "7PGXWK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.32",
        "hostName" : "sfo-w01-esx03",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf",
        "serialNumber" : "7PGXWK20000000"
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "licenseKey" : "123"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "isUsedByNsxt" : false,
          "portGroupSpecs" : [ {
            "name" : "Virtual SAN-2",
            "transportType" : "VSAN",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vSphere vMotion-2",
            "transportType" : "VMOTION",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true,
          "portGroupSpecs" : [ {
            "name" : "Management Network-2",
            "transportType" : "MANAGEMENT",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "VxRail Management-2",
            "transportType" : "HOSTDISCOVERY",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vCenter Server Network-2",
            "transportType" : "SYSTEMVM",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 3
          }
        }
      },
      "skipThumbprintValidation" : false
    } ]
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large"
  }
}'

HTTP Request

POST /v1/domains HTTP/1.1
Content-Type: application/json
Content-Length: 6681
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "domainName" : "VI-WLD",
  "vcenterSpec" : {
    "name" : "sfo-w01-vc01",
    "networkDetailsSpec" : {
      "ipAddress" : "10.0.0.43",
      "dnsName" : "sfo-w01-vc01.sfo.rainpole.io",
      "gateway" : "10.0.0.250",
      "subnetMask" : "255.255.255.0"
    },
    "rootPassword" : "VMware123!",
    "datacenterName" : "sfo-w01-dc01",
    "vmSize" : "tiny",
    "storageSize" : "lstorage"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "vxRailDetails" : {
        "rootCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "adminCredentials" : {
          "credentialType" : "SSH",
          "username" : "admin",
          "password" : "VMware123!"
        },
        "sshThumbprint" : "SHA256:TJktbn7mnnbSimK/MuPemJgBSghcLqSkBye0GS0lFYk",
        "sslThumbprint" : "aabbccddee",
        "networks" : [ {
          "type" : "VSAN",
          "vlanId" : 1407,
          "subnet" : "10.0.60.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.60.1",
          "ipPools" : [ {
            "start" : "10.0.60.55",
            "end" : "10.0.60.57"
          } ]
        }, {
          "type" : "VMOTION",
          "vlanId" : 1406,
          "subnet" : "10.0.59.0/24",
          "mask" : "255.255.255.0",
          "gateway" : "10.0.59.1",
          "ipPools" : [ {
            "start" : "10.0.59.55",
            "end" : "10.0.59.57"
          } ]
        } ],
        "ipAddress" : "10.0.0.78",
        "dnsName" : "sfo-w01-cl01-vxrm-2.sfo.rainpole.io",
        "nicProfile" : "ADVANCED_VXRAIL_SUPPLIED_VDS"
      },
      "hostSpecs" : [ {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.30",
        "hostName" : "sfo-w01-esx01",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Rf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czc",
        "serialNumber" : "7FVRHK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.31",
        "hostName" : "sfo-w01-esx02",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:6Ff1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Czcd",
        "serialNumber" : "7PGXWK20000000"
      }, {
        "licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
        "ipAddress" : "192.10.20.32",
        "hostName" : "sfo-w01-esx03",
        "username" : "root",
        "password" : "VMware123!",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01",
            "uplink" : "uplink1"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink2"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02",
            "uplink" : "uplink1"
          } ]
        },
        "sshThumbprint" : "SHA256:5Pf1wRAQpxh3NTkHHCzPAQGJKTNpYUEYhRjnXZK8Cdcf",
        "serialNumber" : "7PGXWK20000000"
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "licenseKey" : "123"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "isUsedByNsxt" : false,
          "portGroupSpecs" : [ {
            "name" : "Virtual SAN-2",
            "transportType" : "VSAN",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vSphere vMotion-2",
            "transportType" : "VMOTION",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true,
          "portGroupSpecs" : [ {
            "name" : "Management Network-2",
            "transportType" : "MANAGEMENT",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "VxRail Management-2",
            "transportType" : "HOSTDISCOVERY",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          }, {
            "name" : "vCenter Server Network-2",
            "transportType" : "SYSTEMVM",
            "activeUplinks" : [ "uplink1", "uplink2" ]
          } ]
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 3
          }
        }
      },
      "skipThumbprintValidation" : false
    } ]
  },
  "nsxTSpec" : {
    "nsxManagerSpecs" : [ {
      "name" : "sfo-w01-nsx01a",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.44",
        "dnsName" : "sfo-w01-nsx01a.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01b",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.45",
        "dnsName" : "sfo-w01-nsx01b.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    }, {
      "name" : "sfo-w01-nsx01c",
      "networkDetailsSpec" : {
        "ipAddress" : "10.0.0.46",
        "dnsName" : "sfo-w01-nsx01c.sfo.rainpole.io",
        "gateway" : "10.0.0.250",
        "subnetMask" : "255.255.255.0"
      }
    } ],
    "vip" : "10.0.0.166",
    "vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
    "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "nsxManagerAdminPassword" : "VMware123!",
    "formFactor" : "large"
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/null
Content-Length: 3

{ }
  • Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip : Refer to: Get a Task.

  • If the "status" is "SUCCESSFUL", the task is completed successfully.

  • If the "status" is "FAILED", the task can be re-executed.

Tip : Refer to: Retry a Task.

4. Get the Domains

4.1. Prerequisites

None

4.2. Steps

  • Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2205

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5",
    "name" : "sfo-w01",
    "status" : "ACTIVE",
    "vcenters" : [ {
      "id" : "c0703437-6756-470b-9e1c-f9d3bbc9b1c6",
      "fqdn" : "sfo-w01-vc01.sfo.rainpole.io"
    } ],
    "clusters" : [ {
      "id" : "8045e44e-974e-4f43-9862-7f0326782655"
    } ],
    "nsxtCluster" : {
      "id" : "e9a878ef-00b3-4ed3-9f35-de79eb874e9a",
      "vip" : "10.0.0.30"
    },
    "capacity" : {
      "cpu" : {
        "used" : {
          "value" : 21.445999393465698,
          "unit" : "GHz"
        },
        "total" : {
          "value" : 67.03999810397931,
          "unit" : "MHz"
        }
      },
      "memory" : {
        "used" : {
          "value" : 156.0361328125,
          "unit" : "GB"
        },
        "total" : {
          "value" : 312.484375,
          "unit" : "GB"
        }
      },
      "storage" : {
        "used" : {
          "value" : 562.3904687464237,
          "unit" : "MB"
        },
        "total" : {
          "value" : 858.1875,
          "unit" : "GB"
        }
      }
    }
  }, {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "name" : "sfo-w02",
    "vcenters" : [ {
      "id" : "c0703437-6846-470b-9e1c-f9d3bbc9b1c9",
      "fqdn" : "sfo-w02-vc01.sfo.rainpole.io"
    } ],
    "clusters" : [ {
      "id" : "8045e44e-974e-4f43-9862-7f0326782677"
    }, {
      "id" : "8045e44e-974e-4f43-9861-7f0326782633"
    } ],
    "nsxtCluster" : {
      "id" : "e9a878ef-00b3-4ed3-9f35-de79eb874e9a",
      "vip" : "10.0.0.30"
    },
    "capacity" : {
      "cpu" : {
        "used" : {
          "value" : 21.445999393465698,
          "unit" : "GHz"
        },
        "total" : {
          "value" : 67.03999810397931,
          "unit" : "GHz"
        }
      },
      "memory" : {
        "used" : {
          "value" : 156.0361328125,
          "unit" : "GB"
        },
        "total" : {
          "value" : 312.484375,
          "unit" : "GB"
        }
      },
      "storage" : {
        "used" : {
          "value" : 562.3904687464237,
          "unit" : "GB"
        },
        "total" : {
          "value" : 858.1875,
          "unit" : "GB"
        }
      }
    }
  } ]
}

5. Get a Domain

5.1. Prerequisites

The following data is required

  • ID of the domain

5.2. Steps

  • Invoke the API using the ID of the domain

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/c0703437-6746-470b-9e1c-f9d3bbc9b1c5' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains/c0703437-6746-470b-9e1c-f9d3bbc9b1c5 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 978

{
  "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5",
  "name" : "sfo-w01",
  "status" : "ACTIVE",
  "vcenters" : [ {
    "id" : "c0703437-6756-470b-9e1c-f9d3bbc9b1c6",
    "fqdn" : "sfo-w01-vc01.sfo.rainpole.io"
  } ],
  "clusters" : [ {
    "id" : "8045e44e-974e-4f43-9862-7f0326782655"
  } ],
  "nsxtCluster" : {
    "id" : "e9a878ef-00b3-4ed3-9f35-de79eb874e9a",
    "vip" : "10.0.0.30"
  },
  "capacity" : {
    "cpu" : {
      "used" : {
        "value" : 21.445999393465698,
        "unit" : "GHz"
      },
      "total" : {
        "value" : 67.03999810397931,
        "unit" : "MHz"
      }
    },
    "memory" : {
      "used" : {
        "value" : 156.0361328125,
        "unit" : "GB"
      },
      "total" : {
        "value" : 312.484375,
        "unit" : "GB"
      }
    },
    "storage" : {
      "used" : {
        "value" : 562.3904687464237,
        "unit" : "MB"
      },
      "total" : {
        "value" : 858.1875,
        "unit" : "GB"
      }
    }
  }
}

6. Get Domain Endpoints

6.1. Prerequisites

The following data is required

  • ID of the domain

6.2. Steps

  • Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/10d11ea8-b407-49fd-9d49-29a6f700672d/endpoints' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains/10d11ea8-b407-49fd-9d49-29a6f700672d/endpoints HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 190

{
  "elements" : [ {
    "type" : "VCENTER",
    "url" : "https://sfo-w01-vc01.sfo.rainpole.io"
  }, {
    "type" : "NSX_MANAGER",
    "url" : "https://sfo-w01-nsx01.sfo.rainpole.io"
  } ]
}

7. Rename a Domain

7.1. Prerequisites

  • Domain must exist.

7.2. Steps

  • Get the ID of the domain. Filter the response by the domain's current name to get the corresponding ID.

Tip : Get the Domains

  • Create a domain update spec. Create a JSON with the "name" field containing the desired new name.

Note : When renaming a domain, the "name" field must be the only value in the update spec.

Tip : DomainUpdateSpec

  • Invoke the validate update domain spec API to ensure the requested new name is valid.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "name" : "new_name"
}'

HTTP Request

POST /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations HTTP/1.1
Content-Type: application/json
Content-Length: 25
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "name" : "new_name"
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 286

{
  "id" : "e64532ce-9489-4bd2-b7f3-5d54bcd80fca",
  "description" : "Validating Domain Update Spec",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "DomainUpdateSpecValidation",
    "resultStatus" : "SUCCEEDED"
  } ]
}

Tip : If "resultStatus" is "FAILED", make changes to the input specification and re-validate using a new API invocation.

  • Invoke the domain rename (update) task using the validated input spec and domain ID.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "name" : "new_name"
}'

HTTP Request

PATCH /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 25
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "name" : "new_name"
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 29

{
  "status" : "SUCCESSFUL"
}

8. Delete a Domain

When you delete a domain, the clusters within the domain are deleted.

Note : A domain cannot be deleted if the clusters of the domain have remote vSAN datastores configured. If so, unmount the remote vSAN datastores from vCenter and then retry domain deletion. Please refer to the 'VMware Cloud Foundation Administration Guide' for more details.

Warning : Deleting a domain is an irreversible operation. All clusters and VMs within the domain are deleted and the underlying datastores are destroyed.

8.1. Prerequisites

The following data is required

  • ID of the domain that has to be deleted.

Tip : Back up the data on the domain.

Tip : Migrate the VMs that you want to retain, to another domain.

8.2. Steps

  • Initialize the deletion.

Warning : It is not possible to delete a domain without having marked it for deletion. This 2-step deletion ensures that a domain is not deleted accidentally.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/f74c2d97-621a-4984-9ab6-5d84effde82f' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "markForDeletion" : true
}'

HTTP Request

PATCH /v1/domains/f74c2d97-621a-4984-9ab6-5d84effde82f HTTP/1.1
Content-Type: application/json
Content-Length: 30
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "markForDeletion" : true
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 341

{
  "name" : "Mark domain with ID f74c2d97-621a-4984-9ab6-5d84effde82f for deletion",
  "localizableDescriptionPack" : {
    "component" : "VCF",
    "messageKey" : "MARK_DOMAIN_FOR_DELETION",
    "arguments" : [ "f74c2d97-621a-4984-9ab6-5d84effde82f" ],
    "message" : "Mark Domain with ID %s for deletion"
  },
  "status" : "SUCCESSFUL"
}
  • Trigger the deletion.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/f74c2d97-621a-4984-9ab6-5d84effde82f' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'Accept-Language: fr' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

DELETE /v1/domains/f74c2d97-621a-4984-9ab6-5d84effde82f HTTP/1.1
Content-Type: application/json
Accept-Language: fr
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/6d628f5e-d4ed-4c14-a657-32f404a2baa0
Content-Length: 161

{
  "id" : "6d628f5e-d4ed-4c14-a657-32f404a2baa0",
  "name" : "Removing domain",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2022-01-24T14:09:57.210Z"
}
  • Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip : Refer to: Get a Task.

  • If the "status" is "SUCCESSFUL", the task is completed successfully.

  • If the "status" is "FAILED", the task can be re-executed.

Tip : Refer to: Retry a Task.

Last updated 2022-01-24 06:18:36 PST

Operations
POST
Assign Tags To Domain
Assign Tags to Domain
GET
Attachable Tags To Domain
get Attachable Tags to Domain
POST
Create Domain
Create a Domain
DELETE
Delete Domain
Delete a Domain if it has been previously initialized for deletion
POST
Detach Tags From Domain
Detach Tags From Domain
GET
Domain Create Validation
Get the status of the validations for domain related operations
GET
Get Cluster Criteria
Get all cluster criteria
GET
Get Cluster Criterion
Get a criterion to query for cluster
GET
Get Cluster Query Response
Get cluster query response
GET
Get Clusters Query Response
Get clusters query response
GET
Get Domain
Get a Domain
GET
Get Domain Endpoints
Get Endpoints of a Domain
GET
Get Domains
Get the Domains
GET
Get Domain Tag Manager Url
Get Domain Tag Manager Url
GET
Get Domain Update Validation
Get the status of the validations for domain related operations
GET
Get Tags Assigned To Domain
Get Tags assigned to Domain
POST
Post Cluster Query
Post a cluster query
POST
Post Clusters Query
Post clusters query
PATCH
Update Domain
Update a Domain
POST
Validate Domains Operations
Validate the input spec for domain update operations
POST
Validate Domains Operations 1
Validate the input spec for domains operations