By using the VMware Cloud Foundation API, you can deploy an example workload domain with 4 physical NICs per host.

Starting with Cloud Foundation 3.9.1, you can use the SDDC Manager public API to automate multiple physical NIC configurations when using for NSX-T.

In this example workload domain, for traffic separation, one vSphere Distributed Switch handles the system traffic for vSphere management, vSphere vMotion, and vSAN in the initial cluster of the example workload domain and one N-VDS handles the workload traffic, for example, NSX-T overlay. You assign a pair of physical NICs to each switch.

Table 1. Example Workload Domain Specification

Component

Value

SDDC Manager FQDN

sfo01m01sddc01.sfo01.rainpole.local

Workload domain name sfo01-w01

vCenter Server FQDN

sfo01w01vc01.sfo01.rainpole.local

Number of hosts

4

Cluster name

sfo01-w01-cl01

Number of physical NICs per host

4

vSphere Distributed Switch configuration

vSphere Distributed Switch instances

sfo01-w01-c01-vds01

vmnic configuration for vSphere Distributed Switch sfo01-w01-c01-vds01

vmnic0, vmnic1

NIC teaming policy for vSphere Distributed Switch sfo01-w01-c01-vds02

Route based on physical NIC load (default)

Distributed port groups for vSphere Distributed Switch sfo01-w01-c01-vds02

  • sfo01-w01-vds01-mgmt

  • sfo01-w01-vds01-vsan

  • sfo01-w01-vds01-vmotion

NSX-T Manager configuration

NSX-T Manager VIP FQDN

sfo01wnsx01.sfo01.rainpole.local

NSX-T Manager member FQDNs

  • sfo01wnsx01a.sfo01.rainpole.local

  • sfo01wnsx01b.sfo01.rainpole.local

  • sfo01wnsx01c.sfo01.rainpole.local

N-VDS configuration

N-VDS instance

Auto-generated name

vmnic configuration for N-VDS

vmnic2, vmnic3

Uplink Profile Teaming Policy

Load Balance Source

that is, load balancing between uplink-1 and uplink-2 based on the source port ID

Traffic Segments

Overlay

Storage type

vSAN

Procedure

  1. Send a query to SDDC Manager for unassigned hosts by using this request.
    GET https://sfo01m01sddc01.sfo01.rainpole.local/v1/hosts?status=UNASSIGNED_USEABLE HTTP/1.1
    Authorization:Basic admin rest_api_admin_password
  2. In the response, locate the fqdn parameter for the target hosts.
  3. Write down the GUID of each host object for the domain from the id field.
  4. Prepare a domain specification in JSON format according to the requirements of your environment and send it for validation to SDDC Manager.

    Most of the parameters are self-explanatory.

    Parameter

    Value

    computeSpec.clusterSpecs.hostSpecs.id

    GUIDs from 3.

    computeSpec.clusterSpecs.hostSpecs.hostNetworkSpec.vmNics.id

    Physical NIC to use, for example, vmnic0.

    Caution: Provide a valid licenseKey value. Otherwise, a failure in the workflow execution occurs. To resolve the issue, you must delete the partially created workload domain, and decommission and recommission the hosts.
    POST https://sfo01m01sddc01.sfo01.rainpole.local/v1/domains/validations/creations HTTP/1.1
    Authorization:Basic admin rest_api_admin_password
    Content-Type:application/json
    
    {
      "domainName": "sfo01-w01",
      "orgName": "rainpole",
      "vcenterSpec": {
        "name": "sfo01w01vc01",
        "networkDetailsSpec": {
          "ipAddress": "172.16.11.64",
          "dnsName": "sfo01w01vc01.sfo01.rainpole.local",
          "gateway": "172.16.11.253",
          "subnetMask": "255.255.255.0"
        },
        "licenseKey": "AAAAA-AAAAA-AAAAA-AAAAA-AAAAA",
        "rootPassword": "vcenter_server_appliance_root_password",
        "datacenterName": "sfo01-dc01"
      },
      "computeSpec": {
        "clusterSpecs": [
          {
            "name": "sfo01-w01-c01",
            "hostSpecs": [
              {
                "id": "80b1397e-97a5-4cac-a64a-6902d12adaf3",
                "licenseKey": "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB",
                "hostNetworkSpec": {
                  "vmNics": [
                    {
                      "id": "vmnic0",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic1",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic2",
                      "moveToNvds": true
                    },
                    {
                      "id": "vmnic3",
                      "moveToNvds": true
                    }
                  ]
                }
              },
              {
                "id": "58dcfb1c-ee55-40cb-888d-e458903fb102",
                "licenseKey": "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB",
                "hostNetworkSpec": {
                  "vmNics": [
                    {
                      "id": "vmnic0",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic1",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic2",
                      "moveToNvds": true
                    },
                    {
                      "id": "vmnic3",
                      "moveToNvds": true
                    }
                  ]
                }
              },
              {
                "id": "fe848d6e-7156-41fc-aed3-24dbd0ee3a7b",
                "licenseKey": "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB",
                "hostNetworkSpec": {
                  "vmNics": [
                    {
                      "id": "vmnic0",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic1",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic2",
                      "moveToNvds": true
                    },
                    {
                      "id": "vmnic3",
                      "moveToNvds": true
                    }
                  ]
                }
              },
              {
                "id": "29b5b562-4f45-46ea-98a9-512cdd111ab7",
                "licenseKey": "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB",
                "hostNetworkSpec": {
                  "vmNics": [
                    {
                      "id": "vmnic0",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic1",
                      "vdsName": "sfo01-w01-c01-vds01"
                    },
                    {
                      "id": "vmnic2",
                      "moveToNvds": true
                    },
                    {
                      "id": "vmnic3",
                      "moveToNvds": true
                    }
                  ]
                }
              }
            ],
            "datastoreSpec": {
              "vsanDatastoreSpec": {
                "failuresToTolerate": 1,
                "licenseKey": "CCCCC-CCCCC-CCCCC-CCCCC-CCCCC",
                "datastoreName": "sfo01-w01-c01-vsan01"
              }
            },
            "networkSpec": {
              "vdsSpecs": [
                {
                  "name": "sfo01-w01-c01-vds01",
                  "portGroupSpecs": [
                    {
                      "name": "sfo01-w01-c01-vds01-mgmt",
                      "transportType": "MANAGEMENT"
                    },
                    {
                      "name": "sfo01-w01-c01-vds01-vsan",
                      "transportType": "VSAN"
                    },
                    {
                      "name": "sfo01-w01-c01-vds01-vmotion",
                      "transportType": "VMOTION"
                    }
                  ]
                }
              ],
              "nsxClusterSpec": {
                "nsxTClusterSpec": {
                  "geneveVlanId": 1634
                }
              }
            }
          }
        ]
      },
      "nsxTSpec": {
        "nsxManagerSpecs": [
          {
            "name": "sfo01wnsx01a",
            "networkDetailsSpec": {
              "ipAddress": "172.16.11.82",
              "dnsName": "sfo01wnsx01a.sfo01.rainpole.local",
              "gateway": "172.16.11.253",
              "subnetMask": "255.255.255.0"
            }
          },
          {
            "name": "sfo01wnsx01b",
            "networkDetailsSpec": {
              "ipAddress": "172.16.11.83",
              "dnsName": "sfo01wnsx01b.sfo01.rainpole.local",
              "gateway": "172.16.11.253",
              "subnetMask": "255.255.255.0"
            }
          },
          {
            "name": "sfo01wnsx01c",
            "networkDetailsSpec": {
              "ipAddress": "172.16.11.84",
              "dnsName": "sfo01wnsx01c.sfo01.rainpole.local",
              "gateway": "172.16.11.253",
              "subnetMask": "255.255.255.0"
            }
          }
        ],
        "vip": "172.16.11.81",
        "vipFqdn": "sfo01wnsx01.sfo01.rainpole.local",
        "licenseKey": "DDDDD-DDDDD-DDDDD-DDDDD-DDDDD",
        "nsxManagerAdminPassword": "nsxt_manager_admin_password"
      }
    }
  5. By using the JSON specification, add the workload domain to VMware Cloud Foundation by sending this request.
    POST https://sfo01m01sddc01.sfo01.rainpole.local/v1/domains HTTP/1.1
    Authorization: Basic admin rest_api_admin_password
    Content-Type: application/json
  6. If the task fails, retry running it from the user interface of SDDC Manager.