Deploying Edge cluster NSX via SDDC Manager fails on validation with error "Cannot determine default NSX enabled VDS uplinks: please specify firstNsxVdsUplink and secondNsxVdsUplink properties for each Edge node."
search cancel

Deploying Edge cluster NSX via SDDC Manager fails on validation with error "Cannot determine default NSX enabled VDS uplinks: please specify firstNsxVdsUplink and secondNsxVdsUplink properties for each Edge node."

book

Article ID: 379590

calendar_today

Updated On:

Products

VMware SDDC Manager

Issue/Introduction

Symptoms:

 

  • Edge Cluster Validation fails with error:

    Validate the specified NSX enabled VDS uplinks are prepared for Edge overlay Failed

    Beginning of Expandable row content Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button
    Error occurred while performing the validation: Cannot determine default NSX enabled VDS uplinks: please specify firstNsxVdsUplink and secondNsxVdsUplink properties for each Edge node.

  • Domain manager contains errors similar to the excerpt below:

    ERROR [vcf_dm,66e047648bc4276e05d3171746152e72,7aa3] [c.v.v.n.c.v.v.NsxTEdgeClusterValidator,dm-exec-19]  Exception during consistency check of CVDS uplinks for edge deployment
    com.vmware.evo.sddc.orchestrator.exceptions.OrchTaskException: Cannot determine default NSX enabled VDS uplinks: please specify firstNsxVdsUplink and secondNsxVdsUplink properties for each Edge node.
            at com.vmware.vcf.nsxtedgeclustermanager.helper.NsxtEdgeClusterValidationUtil.defaultCvdsUplinksFromTnps(NsxtEdgeClusterValidationUtil.java:3179)
            at com.vmware.vcf.nsxtedgeclustermanager.controller.v1.validation.NsxTEdgeClusterValidator.validateAsyncEdgeCreationSpec(NsxTEdgeClusterValidator.java:1069)
            at com.vmware.vcf.nsxtedgeclustermanager.controller.v1.NsxTEdgeClusterController.lambda$triggerValidationAsync$2(NsxTEdgeClusterController.java:682)
            at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
            at com.vmware.vcf.common.tracing.TraceRunnable.run(TraceRunnable.java:59)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    INFO  [vcf_dm,66e047648bc4276e05d3171746152e72,7aa3] [c.v.v.n.c.v.v.NsxTEdgeClusterValidator,dm-exec-19]  updateValidationCheck: {"errorCode":"ECM_ERROR_DURING_PERFORMING_VALIDATION","arguments":["Cannot determine default NSX enabled VDS uplinks: please specify firstNsxVdsUplink and secondNsxVdsUplink properties for each Edge node."],"stringArgs":["Cannot determine default NSX enabled VDS uplinks: please specify firstNsxVdsUplink and secondNsxVdsUplink properties for each Edge node."]}


  • The VDS used in the configuration was created outside of SDDC manager and imported later using the ImportVdsSpec API.

  • When retrieving the existing VDS information from SDDC manager using the following CURL command we notice that portGroup information is missing for the specific VDS:

    root@sddc-manager [ /home/vcf ]# curl 127.0.0.1/inventory/vds | json_pp > vds.json

     {
          "clusterIds" : [
             "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          ],
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "isUsedByNsxt" : false,
          "mtu" : 8000,
          "name" : "vi-cluster-vds",
    ..

          "portGroups" : [],    <------------Information is missing between the square brackets
          "version" : "8.0.0"
       }

Environment

VMware Cloud foundation 5.x

Resolution

Workaround:


Please follow the steps below to resolve the issue:

IMPORTANT NOTE: Make sure that backup/snapshots of SDDC manager and all vCenters have been taken prior to any modification.

    1. Retrieve the current VDS inventory configuration using the command:

      curl 127.0.0.1/inventory/vds | json_pp > vds.json

    2. Open the vds.json and identify the VDS record that was directly created in the vCenter.


    3. Copy the information retrieved from step 2 to a new file named updated-vds.json. Ensure the updated-vds.json contains only one VDS entry with the matching vCenter VDS name.

       

    4. Using the following template prepare the information for the missing port group information. Replace all the fields information with the correct values retrieved from the vSphere Client

               {
                  "activeUplinks" : [
                     "uplink1",
                     "uplink2"
                  ],
                  "mtu" : 0,
                  "name" : "<name>",
                  "transportType" : "VM_MANAGEMENT",     # <=== Allowed values MANAGEMENT, VM_MANAGEMENT, VMOTION, VSAN, PUBLIC"
                  "type" : "EPHEMERAL",                  # <=== Allowed values EARLY_BINDING, EPHEMERAL"
                  "vlanId" : 0
               },
               {
                  "activeUplinks" : [
                     "uplink1",
                     "uplink2"
                  ],
                  "mtu" : 0,
                  "name" : "<name>",
                  "transportType" : "VSAN",
                  "type" : "EARLY_BINDING",
                  "vlanId" : 0
               }

    5. Open the file updated-vds.json created on step 3 with a VI editor and copy the updated template from step 4 inside the empty square brackets of the VDS portGroup information. Save the file.

      The file should start and end like the example below:

      {
         "clusterIds" : [
            "6caaf8d1-eb16-4a2c-9fca-171bc3fd46e8"
         ],
         "id" : "1fd70071-e97a-47c2-a88c-2ee1f0895e47",
         "isUsedByNsxt" : false,
         "mtu" : 8000,
         "name" : "vi-cluster-vds",
       
      ..

         "portGroups" : [
            {
               "activeUplinks" : [
                  "uplink1",
                  "uplink2"
               ],
               "mtu" : 0,
               "name" : "xxxxxxxxxxxxxx",
               "transportType" : "MANAGEMENT",
               "type" : "EPHEMERAL",
               "vlanId" : 0
            },
            {
               "activeUplinks" : [
                  "uplink1",
                  "uplink2"
               ],
               "mtu" : 0,
               "name" : "xxxxxxxxxxxxxx",
               "transportType" : "VMOTION",
               "type" : "EARLY_BINDING",
               "vlanId" : 3
            },
            {
               "activeUplinks" : [
                  "uplink1",
                  "uplink2"
               ],
               "mtu" : 0,
               "name" : "xxxxxxxxxxxxxx",
               "transportType" : "VSAN",
               "type" : "EARLY_BINDING",
               "vlanId" : 4
            },
            {
               "activeUplinks" : [
                  "uplink1",
                  "uplink2"
               ],
               "mtu" : 0,
               "name" : "xxxxxxxxxxxxxx",
               "transportType" : "VM_MANAGEMENT",
               "type" : "EPHEMERAL",
               "vlanId" : 2
            }
         ],
         "sourceId" : "dvs-18",
         "version" : "8.0.0"
      }


      Note: Verify the updated JSON content with a JSON viewer to make sure there in no JSON format error.


    6. Retrieve the VDS ID from the updated-vds.json file.  In the above example the ID is "1fd70071-e97a-47c2-a88c-2ee1f0895e47"


    7. Run the following CURL command to populate to the SDDC Manager Inventory the updated portGroup information:

      curl -X PUT -H "Content-Type:application/json" --data @updated-vds.json 127.0.0.1/inventory/vds/{VDS_ID} | json_pp


    8. Confirm the changes are applied: curl 127.0.0.1/inventory/vds | json_pp


    9. Reattempt the workflow