Recently while working in my lab, I was facing an issue with edge cluster deployment in workload domain. Edge Cluster deployment was failing with below error:
1 2 |
2020-05-30T05:37:17.920+0000 ERROR [9691f5ba228f6be5,531e] [c.v.e.s.o.model.error.ErrorFactory,dm-exec-5] [F50Q9E] INPUT_PARAM_ERROR Some hosts in cluster(s) 81bc0275-1a09-455d-91fd-3fce591cf500 do not support 8 vCPUs for edge form-factor LARGE com.vmware.evo.sddc.orchestrator.exceptions.OrchTaskException: Some hosts in cluster(s) 81bc0275-1a09-455d-91fd-3fce591cf500 do not support 8 vCPUs for edge form-factor LARGE |
Since my lab is a nested lab, I bumped cpu on Esxi hosts to 10 and retriggered the task, but deployment was still failing with same error. The error is loud and clear that Edge is deployed in LARGE form factor and ESXi hosts in Workload Domain was unable to supply enough CPUs.
And that is when I was thinking is it possible to deploy edge cluster with medium or small form factor. SDDC Manager UI don’t provide an option to change form factor of edges and this can be achieved via API only.
Below are the steps for edge cluster deployment via API.
1: Get Cluster ID: The json payload used for Edge Cluster deployment needs ID of cluster where edge vm’s will be deployed. This can be fetched via below API
1 2 3 4 5 |
Method: GET URL: https://<sddc-manager-fqdn>/v1/clusters Authorization: Bearer Token: <VCF-Auth-Token> |
Sample Output: Response output of above call returns id of cluster
1 2 3 4 5 6 |
{ "id":"81bc0275-1a09-455d-91fd-3fce591cf500", "name":"CL01", "primaryDatastoreName":"MJ-WLD01-wld-vc01-CL01-vsan01", "primaryDatastoreType":"VSAN" } |
2: Validate Edge Cluster Spec: Before kicking edge cluster deployment, it is advisable to run validation task to ensure all parameters passed in payload json are correct.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
Method: POST URL: https://<sddc-manager-fqdn>/v1/edge-clusters/validations Headers: Accept: application/json, Content-Type: application/json Authorization: Bearer-Token: VCF-Token Payload { "edgeClusterName":"WLD01-EC01", "edgeClusterType":"NSX-T", "edgeRootPassword":"VMware1!VMware1!", "edgeAdminPassword":"VMware1!VMware1!", "edgeAuditPassword":"VMware1!VMware1!", "edgeFormFactor":"MEDIUM", "tier0ServicesHighAvailability":"ACTIVE_ACTIVE", "mtu":9000, "asn":65005, "edgeNodeSpecs":[ { "edgeNodeName":"wld-edge01.vstellar.local", "managementIP":"172.16.10.115/24", "managementGateway":"172.16.10.1", "edgeTepGateway":"172.16.70.1", "edgeTep1IP":"172.16.70.11/24", "edgeTep2IP":"172.16.70.12/24", "edgeTepVlan":700, "clusterId":"81bc0275-1a09-455d-91fd-3fce591cf500", "interRackCluster":false, "uplinkNetwork":[ { "uplinkVlan":500, "uplinkInterfaceIP":"172.16.50.10/24", "peerIP":"172.16.50.1/24", "asnPeer":65001, "bgpPeerPassword":"VMware1!" }, { "uplinkVlan":600, "uplinkInterfaceIP":"172.16.60.10/24", "peerIP":"172.16.60.1/24", "asnPeer":65001, "bgpPeerPassword":"VMware1!" } ] }, { "edgeNodeName":"wld-edge02.vstellar.local", "managementIP":"172.16.10.116/24", "managementGateway":"172.16.10.1", "edgeTepGateway":"172.16.70.1", "edgeTep1IP":"172.16.70.13/24", "edgeTep2IP":"172.16.70.14/24", "edgeTepVlan":700, "clusterId":"81bc0275-1a09-455d-91fd-3fce591cf500", "interRackCluster":false, "uplinkNetwork":[ { "uplinkVlan":500, "uplinkInterfaceIP":"172.16.50.11/24", "peerIP":"172.16.50.1/24", "asnPeer":65001, "bgpPeerPassword":"VMware1!" }, { "uplinkVlan":600, "uplinkInterfaceIP":"172.16.60.11/24", "peerIP":"172.16.60.1/24", "asnPeer":65001, "bgpPeerPassword":"VMware1!" } ] } ], "tier0RoutingType":"EBGP", "tier0Name":"WLD01-T0", "tier1Name":"WLD01-T1", "edgeClusterProfileType":"DEFAULT" } |
Response Output: Validation POST call returns an id in response output. This id is used to check status of validation task.
1 2 3 4 5 6 |
{ "id": "90b0f04f-0413-45cb-b7c0-3d3e3d749158", "description": "Validating NSX-T Edge Cluster Creation Spec", "executionStatus": "IN_PROGRESS", "resultStatus": "UNKNOWN" } |
3: Check Validation Status: Few checks are performed as part of validation and all the checks should report as passed for a successful deployment. Status of validation task can be obtained via GET call. For a successful validation, output looks like below
1 2 3 4 5 6 7 8 9 10 11 12 |
Method: GET URL: https://<sddc-manager-fqdn>/v1/edge-clusters/validations/<request-id> Output: { "id":"90b0f04f-0413-45cb-b7c0-3d3e3d749158", "description":"Validating NSX-T Edge Cluster Creation Spec", "executionStatus":"COMPLETED", "resultStatus":"SUCCEEDED" } |
4: Deploy Edge Cluster: Once validation check is successful, edge cluster deployment can be kicked via same json which was used in validation step.
1 2 3 4 5 6 7 8 9 |
Method: POST URL: https://<sddc-manager-fqdn>/v1/edge-clusters Headers: Accept: application/json, Content-Type: application/json Authorization: Bearer-Token: VCF-Token Payload: Use json payload from step 2 |
Response Output: Output of above call returns a task id which is used to check status of deployment task
1 2 3 4 5 6 |
{ "id":"34812aa7-507d-4757-a47a-37df2412ba6a", "name":"Add a NSX-T edge cluster", "status":"IN_PROGRESS", "creationTimestamp":"2020-05-30T06:15:24.215Z" } |
5: Check Edge Cluster Deployment Status: Edge cluster deployment status can be fetched via GET call by supplying task-id obtained in response output of deployment POST call. For a successful deployment, you will see “status”: “Successful”in the response output of the GET task call.
1 2 3 4 5 6 7 8 9 10 11 12 |
Method: GET URL: https://<sddc-manager-fqdn>/v1/tasks/<task-id> Sample Output: { "id": "34812aa7-507d-4757-a47a-37df2412ba6a", "name": "Adding edge cluster WLD01-EC01", "status": "Successful", "creationTimestamp": "2020-05-30T06:15:24.500Z" } |
And that’s it for this post.
I hope you enjoyed reading this post. Feel free to share this on social media if it is worth sharing 🙂