Authors:
- Madhav Achari (Systems Test)
- Amitrajit Chatterjee (Staff II Solutions Architect)
VMware Cloud Foundation 4.0 on Dell EMC VxRail introduces support of workload domain deployment and operations utilizing the public API interface. In this multi-part blog series, we will provide guidance on how to use these new APIs to perform common deployments and operations. In Part 1 of the blog series, we will walk you through the steps to deploy a new workload domain while Part 2 will cover various workload domain related operations.
Detailed API documentation is located at VMware {code} site. This can also be accessed from inside the SDDC Manager from the Developer Center.
Pre-requisites
Please complete VCF on VxRail management domain bring up following the standard process. Once the SDDC Manager is up and running the Workload Domain operations can be done via public api as detailed below.
Obtain Access token
The SDDC Manager APIs are secured using token-based authentication. As a first step before invocation of any API, an access token must be obtained. Invoking the Token API returns a token pair – access token and refresh token. To invoke an API, the access token must be passed in the Authorization header as a Bearer token.
SSH to the SDDC Manager vm or a Linux jump vm and execute the relevant curl command to generate the <long token>. It will need to be passed to all commands executed after this.
1 2 3 4 5 6 7 8 9 10 11 |
[root@LinJump home]# curl 'https://<sddc manager ip>/v1/tokens' -X POST -H 'Content-Type: application/json' -d '{"username": "[email protected]","password": "RandomPwd!123"}' --insecure | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 732 0 662 100 70 2340 247 --:--:-- --:--:-- --:--:-- 2339 { "accessToken" : "<long token>", "refreshToken" : { "id" : "f6340391-53c7-41cd-85f8-7b49acd1200f" } } |
Refresh Access token
If the Access token expires, a Refresh token will need to be obtained. A refresh token can be used any number of times to obtain an access token until it has not expired or been revoked. To check if any API call is failing due to expired token, review the log file /var/log/vmware/vcf/domainmanager/domainmanager.log. Sample error message is given below. Follow the API guidance to obtain the Refresh token.
1 2 3 |
ERROR [b69d45f72861c113,1a18] [c.v.v.s.t.service.TokenServiceImpl,http-nio-127.0.0.1-7200-exec-1] Unknown exception while parsing jwt token JWT expired at 2020-05-26T05:14:56Z. Current time: 2020-05-26T05:27:21Z, a difference of 745310 milliseconds. Allowed clock skew: 0 milliseconds. 2020-05-26T05:27:21.311+0000 ERROR [b69d45f72861c113,1a18] [c.v.v.s.a.AuthorizationFilter,http-nio-127.0.0.1-7200-exec-1] Error decoding JWT token com.vmware.vcf.security.token.service.error.TokenInvalidException: JWT expired at 2020-05-26T05:14:56Z. Current time: 2020-05-26T05:27:21Z, a difference of 745310 milliseconds. Allowed clock skew: 0 milliseconds. |
Prepare Workload Domain json
The VCF-VxRail Workload domain 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.
The json file needs to be of the following format.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "domainName" : "NSXT", "vcenterSpec" : { "name" : "vcenter-1", "networkDetailsSpec" : { "ipAddress" : "192.168.15.40", "dnsName" : "rackvc-2.rainpole.local", "gateway" : "192.168.15.253", "subnetMask" : "255.255.252.0" }, "rootPassword" : "VMware123!", "datacenterName" : "NSXT-1" } } |
Workload Domain Validation
The next step is to validate the json file which was created above.
1 2 3 |
[root@LinJump home]# curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/domains/validations' -d @WLD_creation.json {"id":"1f35affa-c614-42a2-95c4-1a0ecfddbb16","description":"Validating VxRail Virtual Infrastructure Workload Domain","executionStatus":"IN_PROGRESS"}[root@LinJump home]# |
Workload Domain Validation Status
To get the validation status, the following command needs to be executed.
1 2 3 |
[root@LinJump home]# curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/domains/validations/1f35affa-c614-42a2-95c4-1a0ecfddbb16' -d @WLD_creation.json –insecure {"id":"1f35affa-c614-42a2-95c4-1a0ecfddbb16","description":"VALIDATE_ADD_VXRAIL_DOMAIN_WORKFLOW","executionStatus":"COMPLETED","resultStatus":"SUCCEEDED","validationChecks":[]}[root@LinJump home]# |
Workload Domain Creation Task
To kick off the workload domain deployment task, the following command needs to be executed.
1 2 3 |
[root@LinJump home]# curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/domains' -d @WLD_creation.json --insecure {"id":"6b99a24a-c7e9-4e77-beed-288eed216f4c","name":"Creating VxRail Vi Domain","status":"IN_PROGRESS","creationTimestamp":"2020-05-24T17:10:47.216Z"} |
Validate the task is running from the SDDC Manager GUI
You can also validate the new vcenter appliance is being deployed from the Management Domain vcenter
Workload Domain Creation Status
To get the validation status of the workload domain creation task, the following command needs to be executed.
1 |
[root@LinJump home]# curl -i -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/domains/validations/<task id from previous task>' |
1 |
{"id":"6b99a24a-c7e9-4e77-beed-288eed216f4c","name":"Creating VxRail domain NSXT-1","status":"Successful","creationTimestamp":"2020-05-24T17:10:47.414Z" |
The full API Output will look similar to this
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
{ "resolutionStatus" : "UNRESOLVED", "isCancellable" : false, "subTasks" : [ { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:20.376Z", "name" : "Release Lock Action", "description" : "Release Lock for Domain Addition" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:20.317Z", "name" : "Update vCenter Status", "description" : "Update VxRail VI Domain vCenter Status In Inventory" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:20.159Z", "name" : "Update Known Host Ssh Config Action", "description" : "Update SSH Known Hosts Configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:19.864Z", "name" : "Move VM(s) to Resource Pool", "description" : "Move VM(s) to Resource Pool" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:19.559Z", "name" : "Authorize SDDC Admins Group", "description" : "Authorize SDDC Admins Group" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:18.994Z", "name" : "Apply vCenter License in vCenter Server", "description" : "Apply vCenter License in vCenter Server" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:17.906Z", "name" : "Register Embedded PSC to SDDC manager truststore", "description" : "Register Embedded PSC to SDDC manager truststore" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:27:13.845Z", "name" : "JoinVc70Action", "description" : "Join vCenter 7.0 into the SSO topology ring" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:17.027Z", "name" : "DeployVcsa70OnVcAction", "description" : "Deploy vCenter 7.0 Server Appliance" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:10.464Z", "name" : "Generate VxRail VI Internal Model", "description" : "Generate VxRail VI Domain Internal Model" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:10.071Z", "name" : "Mount Iso Action", "description" : "Mount vCenter ISO Image" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:09.774Z", "name" : "Create Domain Credentials Action", "description" : "Create Workload Domain Credentials" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:09.283Z", "name" : "Create VxRail Domain Inventory Object", "description" : "Create VxRail VI Domain Data to be Committed to Inventory" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:09.040Z", "name" : "Image Management Action", "description" : "Manage Product Images for Workload Domain" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:08.923Z", "name" : "Acquire Lock Action", "description" : "Acquire Lock for Domain Addition" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:07.646Z", "name" : "Perform validations for backup location details", "description" : "Perform validations for backup location details" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:11:06.905Z", "name" : "Retrieve Backup Configuration", "description" : "Retrieve Backup Configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-24T17:10:48.119Z", "name" : "Validate VxRail Domain Spec", "description" : "Validate VxRail VI Domain Input Specification" } ], "status" : "Successful", "creationTimestamp" : "2020-05-24T17:10:47.414Z", "name" : "Creating VxRail domain NSXT-1", "id" : "6b99a24a-c7e9-4e77-beed-288eed216f4c" } |
Validate the task has completed from the SDDC Manager GUI
Once the vCenter appliance has been deployed, the next task would be to create a local user in the vCenter server. Once the workload domain nodes have been imaged, perform the VxRail first run of the workload domain nodes using the external vCenter Server. More detailed steps are available here.
Prepare json file for importing cluster
Now the VxRail cluster will need to be imported into the Workload Domain via the SDDC Manager
Create json file for import cluster in the following format
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
{ "clusterSpec": { "name": "VxRail-Virtual-SAN-Cluster", "vxRailDetails": { "rootCredentials": { "credentialType": "SSH", "username": "root", "password": "RandomPwd!123" }, "adminCredentials": { "credentialType": "SSH", "username": "mystic", "password": "Random!1234" } }, "hostSpecs": [{ "ipAddress": "192.168.15.55", "hostName": "rack-005.vxrail.local", "username": "root", "password": "RandomPwd!123", "hostNetworkSpec": { "vmNics": [{ "id": "vmnic2", "moveToNvds": true }, { "id": "vmnic3", "moveToNvds": true } ] } }, { "ipAddress": "192.168.15.56", "hostName": "rack-006.vxrail.local", "username": "root", "password": "RandomPwd!123", "hostNetworkSpec": { "vmNics": [{ "id": "vmnic2", "moveToNvds": true }, { "id": "vmnic3", "moveToNvds": true } ] } }, { "ipAddress": "192.168.15.57", "hostName": "rack-007.vxrail.local", "username": "root", "password": "RandomPwd!123", "hostNetworkSpec": { "vmNics": [{ "id": "vmnic2", "moveToNvds": true }, { "id": "vmnic3", "moveToNvds": true } ] } }], "datastoreSpec": { "vsanDatastoreSpec": { "licenseKey": "xxxx-xxxx-xxxx-xxxx-xxxx-xxxx" } }, "networkSpec": { "vdsSpecs": [{ "name": "VMware HCIA Distributed Switch VxRail-Virtual-SAN-Cluster 9a78e0", "isUsedByNsxt": true, "portGroupSpecs": [{ "name": "Management Network-9a78e0b9-b1e0-41c9-a78e-8f0851b04839", "transportType": "MANAGEMENT" }, { "name": "Virtual SAN-9a78e0b9-b1e0-41c9-a78e-8f0851b04839", "transportType": "VSAN" }, { "name": "vSphere vMotion-9a78e0b9-b1e0-41c9-a78e-8f0851b04839", "transportType": "VMOTION" }] }], "nsxClusterSpec": { "nsxTClusterSpec": { "geneveVlanId": 2514 } } } }, "nsxTSpec": { "nsxManagerSpecs": [{ "name": "nsxt-2-mgnr-1", "networkDetailsSpec": { "ipAddress": "192.168.15.51", "dnsName": "nsxt-2-mgnr-1.vxrail.local", "gateway": "192.168.15.1", "subnetMask": "255.255.255.0" } }, { "name": "nsxt-2-mgnr-2", "networkDetailsSpec": { "ipAddress": "192.168.15.52", "dnsName": "nsxt-2-mgnr-2.vxrail.local", "gateway": "192.168.15.1", "subnetMask": "255.255.255.0" } }, { "name": "nsxt-2-mgnr-3", "networkDetailsSpec": { "ipAddress": "192.168.15.53", "dnsName": "nsxt-2-mgnr-3.vxrail.local", "gateway": "192.168.15.1", "subnetMask": "255.255.255.0" } }], "vip": "192.168.15.50", "vipFqdn": "nsxt-2-vip.vxrail.local", "licenseKey": "xxxx-xxxx-xxxx-xxxx-xxxx-xxxx", "nsxManagerAdminPassword": "VMware123!VMware123!!" } } |
Get the domain id. The cluster needs to be added to a specific domain for which you need to gather the id first
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 |
[root@LinJump home]# curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/domains' --insecure | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 359 0 359 0 0 1595 0 --:--:-- --:--:-- --:--:-- 1595 { "elements" : [ { "vcenters" : [ { "id" : "f616d3bf-de03-4e23-bb84-98837272f69f" } ], "name" : "MGMT", "clusters" : [ { "id" : "5de6dec9-c64a-4887-beae-2050c1bf27e0" } ], "type" : "MANAGEMENT", "id" : "1b8db7b6-f819-4936-a866-c340741fd75e" }, { "vcenters" : [ { "id" : "bf64b55e-9d6a-47ec-b0db-411d78e1741f" } ], "name" : "NSXT-1", "clusters" : [], "type" : "VI", "id" : "01dc67ce-f59b-4701-86c2-f766469fefe1" } ] } |
Perform cluster validation
To perform the cluster input validation, the following command needs to be executed.
1 2 3 |
[root@LinJump home]# curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer ,long token>' 'https://<sddc manager ip>/v1/domains/<id>/validations/' -d @wld-import-cluster-nsxt.json --insecure {"id":"e0a4c899-2eef-4ab8-a730-99f020f3910b","description":"Add VxRail Primary Cluster","executionStatus":"IN_PROGRESS"} |
Cluster Validation Status
To get the validation status, the following command needs to be executed.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@LinJump home]# curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/tasks/<id>' --insecure | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2823 0 168 100 2655 1508 23846 --:--:-- --:--:-- --:--:-- 23918 { "validationChecks" : [], "id" : "e0a4c899-2eef-4ab8-a730-99f020f3910b", "resultStatus" : "SUCCEEDED", "executionStatus" : "COMPLETED", "description" : "ADD_VXRAIL_CLUSTER_WORKFLOW" } |
Import Cluster into SDDC Manager
Now to finally import the cluster into the SDDC Manager, the following command needs to be executed.
1 |
[root@LinJump home]# curl -X PATCH -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/domains/<id>' -d @wld-import-cluster-nsxt.json –insecure |
The task status can be monitored from the SDDC Manager as well as from the following command
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 |
# curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer long-token' '<sddc-manager-ip>/v1/tasks/eab4fd5b-7140-4102-ad73-af4d2522b3d4' -d @wld-import-cluster-nsxt.json --insecure | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15199 0 12544 100 2655 111k 24137 --:--:-- --:--:-- --:--:-- 112k { "resources" : [ { "resourceId" : "59a5e207-5777-4536-8883-422f9b8901b8", "type" : "Esxi" }, { "resourceId" : "bd852932-8938-4e73-a0c4-9e3b4548afa6", "type" : "Cluster" }, { "resourceId" : "0ed89841-7f51-4c38-baf3-c9e82c2e45af", "type" : "Esxi" }, { "resourceId" : "bc8560d2-4a54-4287-90db-10d0e0a1d2d7", "type" : "Esxi" }, { "resourceId" : "01dc67ce-f59b-4701-86c2-f766469fefe1", "type" : "Domain" } ], "resolutionStatus" : "UNRESOLVED", "status" : "In Progress", "creationTimestamp" : "2020-05-25T08:34:19.646Z", |
Cluster Import Success Validation
Execute the following curl command to validate the successful import of the cluster.
1 |
[root@LinJump home]# curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer <long token>' 'https://<sddc manager ip>/v1/tasks/<id>' -d @wld-import-cluster-nsxt.json --insecure | json_pp |
A succesful response will look similar to this
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 |
# curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NGU1MjJlNS05MDk3LTRjZWItODJhZC1jYjQ1ZTFhOThiYmYiLCJpYXQiOjE1OTAzOTQ4MDUsInN1YiI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsImlzcyI6InZjZi1hdXRoIiwiYXVkIjoic2RkYy1zZXJ2aWNlcyIsIm5iZiI6MTU5MDM5NDgwNSwiZXhwIjoxNTkwMzk4NDA1LCJ1c2VyIjoiYWRtaW5pc3RyYXRvckB2c3BoZXJlLmxvY2FsIiwibmFtZSI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsInNjb3BlIjpbIkJBQ0tVUF9DT05GSUdfUkVBRCIsIkNSRURFTlRJQUxfUkVBRCIsIlVTRVJfV1JJVEUiLCJPVEhFUl9XUklURSIsIkJBQ0tVUF9DT05GSUdfV1JJVEUiLCJPVEhFUl9SRUFEIiwiVVNFUl9SRUFEIiwiQ1JFREVOVElBTF9XUklURSJdfQ.feup2fE1wLND3MjeHljU34R-2Q6pB_gtyPuEvHLiwEU' 'https://172.18.15.28/v1/tasks/eab4fd5b-7140-4102-ad73-af4d2522b3d4' -d @wld-import-cluster-nsxt.json --insecure | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15314 0 12659 100 2655 125k 26978 --:--:-- --:--:-- --:--:-- 126k { "resources" : [ { "resourceId" : "59a5e207-5777-4536-8883-422f9b8901b8", "type" : "Esxi" }, { "resourceId" : "bd852932-8938-4e73-a0c4-9e3b4548afa6", "type" : "Cluster" }, { "resourceId" : "0ed89841-7f51-4c38-baf3-c9e82c2e45af", "type" : "Esxi" }, { "resourceId" : "bc8560d2-4a54-4287-90db-10d0e0a1d2d7", "type" : "Esxi" }, { "resourceId" : "01dc67ce-f59b-4701-86c2-f766469fefe1", "type" : "Domain" } ], "resolutionStatus" : "UNRESOLVED", "status" : "Successful", "creationTimestamp" : "2020-05-25T08:34:19.646Z", "name" : "Adding VxRail cluster VxRail-Virtual-SAN-Cluster to domain NSXT-1", "isCancellable" : false, "subTasks" : [ { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:14:18.200Z", "name" : "Release Lock Action", "description" : "Release Lock for Domain Addition" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:14:18.037Z", "name" : "Add Vi Update Logical Inventory Action", "description" : "Update Workload Domain Data in Inventory" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:14:17.963Z", "name" : "Validate NSX-T Connectivity Action", "description" : "Validate NSX-T component connectivity after NSX-T network configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:14:17.456Z", "name" : "Detach Transport Node Collection Action", "description" : "Detach Transport node collection from cluster" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:10:11.903Z", "name" : "Create Transport Node Collection Action", "description" : "Create Transport Node Collection" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:10:11.291Z", "name" : "Create NSX-T Data Center Transport Node Profile Action", "description" : "Create NSX-T Data Center Transport Node Profile" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:10:10.564Z", "name" : "Create NSX-T Data Center Uplink Profile", "description" : "Create NSX-T Data Center Uplink Profile" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:10:10.306Z", "name" : "ProxyContractAction", "description" : "Automation Helper Action" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:10:09.848Z", "name" : "Create NSX-T Overlay Transport Zone Action", "description" : "Create NSX-T Data Center Overlay Transport Zone" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:36.112Z", "name" : "Configure NSX-T Fabric Compute Manager Action", "description" : "Join a new vCenter as NSX-T Compute Manager" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:36.026Z", "name" : "Validate NSX-T Connectivity Action", "description" : "Validate NSX-T component connectivity after NSX-T network configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:35.467Z", "name" : "Gather input for configuring overlay networking on VDS", "description" : "Gather input for configuring overlay networking on VDS" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:35.092Z", "name" : "Generate Input For NSX-T Configuration", "description" : "Generate input for NSX-T configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:34.741Z", "name" : "ProxyContractAction", "description" : "Automation Helper Action" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:34.675Z", "name" : "Update Nsxt Logical Inventory Action", "description" : "Update inventory for NSX-T after deployment" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:34.177Z", "name" : "Create Nsxt Domain Credentials Action", "description" : "Create Nsxt Domain Credentials" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:33.904Z", "name" : "Enable vLCM deployment configuration for VCF in NSX-T", "description" : "Enable vLCM deployment configuration for VCF in NSX-T" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:25.408Z", "name" : "Update NSX-T Manager User Attributes Action", "description" : "Update password change frequency for NSX-T manager users" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:24.131Z", "name" : "Configure NSX-T Data Center Backup Schedule Action", "description" : "Configure NSX-T Data Center Backup Schedule" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:09:23.349Z", "name" : "Enable Certificate Revocation List Validation in NSX-T Data Center", "description" : "Enable Certificate Revocation List Validation in NSX-T Data Center" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:04:22.175Z", "name" : "Issue Cert For NSX-T Mgmt Cluster Action", "description" : "Issue VMCA certificate for NSX-T Data Center Managers using Virtual IP" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:04:08.961Z", "name" : "Issue VMCA Certs For NSX-T Manager Action", "description" : "Issue VMCA certificate for NSX-T Data Center Managers" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:04:07.065Z", "name" : "Disable Certificate Revocation List Validation in NSX-T Data Center", "description" : "Disable Certificate Revocation List Validation in NSX-T Data Center" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:04:06.396Z", "name" : "Apply NSX-T License Action", "description" : "Assign License to NSX-T Data Center Management Cluster" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:04:03.508Z", "name" : "Create NSX-T Anti Affinity Rule Action", "description" : "Creates anti-affinity rules for NSX-T managers" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:03:59.926Z", "name" : "Update Firewall Exclusion List Action", "description" : "Adds NSX-T Data Center Manager VMs to NSX-T Distributed Firewall Exclusion List" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:01:42.470Z", "name" : "Add NSX-T SSH key To known_hosts Action", "description" : "Adds SSH key of all managers to known_hosts file" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:01:41.463Z", "name" : "Set VIP For NSX-T Managers Action", "description" : "Configure Virtual IP (VIP) for NSX-T Data Center Management Cluster" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T09:01:41.182Z", "name" : "ProxyContractAction", "description" : "Automation Helper Action" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:50:29.734Z", "name" : "Join NSX-T Managers Action", "description" : "Join NSX-T Data Center Managers to NSX-T Data Center Management Cluster" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:24.265Z", "name" : "Deploy NSX-T Manager Action", "description" : "Deploy NSX-T Manager" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:21.117Z", "name" : "Validate NSX-T Connectivity Action", "description" : "Validate NSX-T component connectivity after NSX-T network configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:20.752Z", "name" : "ProxyContractAction", "description" : "Automation Helper Action" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:20.540Z", "name" : "Insert Nsxt Logical Inventory Action", "description" : "Insert inventory for NSX-T before deployment" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:20.065Z", "name" : "Prepare Nsxt Input Action", "description" : "Get NSX-T input data" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:17.745Z", "name" : "Update Known VxRail Availability Zone Hosts", "description" : "Update VxRail Hosts SSH Key To Known Hosts Configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:16.967Z", "name" : "Update VxRail Manager SSH Keys To Known Hosts", "description" : "Update VxRail Manager SSH Keys to Known Hosts" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:15.782Z", "name" : "Configure Deployment Details", "description" : "Set SDDC Deployment Details on vCenter Server" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:39:15.679Z", "name" : "Add Domain VM(s) to Management Domain NSX Distributed Firewall Exclusion List", "description" : "Add Domain VM(s) to Management Domain NSX Distributed Firewall Exclusion List" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:35:13.066Z", "name" : "Update VMCA Cert In VxRail Manager DM", "description" : "Post VxRail VI Domain Creation Update VMCA Certificate In VxRail Manager" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:59.395Z", "name" : "Reconfigure port groups", "description" : "Reconfigure port groups" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:58.987Z", "name" : "Apply vSAN License in vCenter Server", "description" : "Apply vSAN License in vCenter Server" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:58.870Z", "name" : "Apply vSAN DLF in vCenter Server", "description" : "Apply vSAN DLF in vCenter Server" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:56.749Z", "name" : "Generate VxRail VI Internal Model For Cluster", "description" : "Generate VxRail Internal Model For Adding Primary Cluster In VI Domain" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:55.055Z", "name" : "NFS Configuration", "description" : "Configure NFS lcm-bundle-repo On VxRail Hosts" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:53.987Z", "name" : "StartHostSSHServicePluginAction", "description" : "Enable SSH on Hosts" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:53.883Z", "name" : "Register Current Task", "description" : "Register Current Task" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:53.540Z", "name" : "Mount Iso Action", "description" : "Mount vCenter ISO Image" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:53.385Z", "name" : "Create Domain Credentials Action", "description" : "Create Workload Domain Credentials" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:50.707Z", "name" : "VxRail Populate Runtime Data", "description" : "Gather VxRail Cluster Managed Object IDs and vCenter SSH Key" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:50.262Z", "name" : "Save VxRail Manager Passwords", "description" : "Save VxRail Manager Passwords" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:49.603Z", "name" : "Save ESXi Credentials For Domain", "description" : "Save VxRail VI Domain Primary Cluster Hosts Credentials" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:49.261Z", "name" : "Commit VxRail Domain Inventory Object", "description" : "Commit VxRail VI Domain Data to Inventory" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:37.509Z", "name" : "Create VxRail Cluster Inventory For Domain Object", "description" : "Create VxRail Primary Cluster Data to be Committed to Inventory" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:37.359Z", "name" : "Image Management Action", "description" : "Manage Product Images for Workload Domain" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:37.306Z", "name" : "Acquire Lock Action", "description" : "Acquire Lock for Domain Addition" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:36.288Z", "name" : "Perform validations for backup location details", "description" : "Perform validations for backup location details" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:35.689Z", "name" : "Retrieve Backup Configuration", "description" : "Retrieve Backup Configuration" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:32.961Z", "name" : "Validate VxRail Cluster Spec For Domain", "description" : "Validate VxRail VI Domain Primary Cluster Input Specification" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:32.499Z", "name" : "Validate Management Domain Resources Action", "description" : "Validate that management domain has enough resources for NSX-T deployment" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:32.457Z", "name" : "Validate Nsxt License Action", "description" : "Validate NSX-T license" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:32.429Z", "name" : "Nsxt Compute Managers Validation Action", "description" : "Validate NSX-T compute managers" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:32.295Z", "name" : "Validates that backup user password conforms to password policy", "description" : "Validates that backup user password conforms to password policy" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:31.098Z", "name" : "Validate Nsxt Input Spec Action", "description" : "Validate NSX-T input spec" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:20.815Z", "name" : "ValidateVxRailHostInSpecAction", "description" : "Validate the hosts in the given primary cluster spec" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:20.692Z", "name" : "GetInputsForValidationFromImportClusterSpecAction", "description" : "Collect Input data for the import of primary cluster" }, { "status" : "SUCCESSFUL", "creationTimestamp" : "2020-05-25T08:34:20.352Z", "name" : "ProxyContractAction", "description" : "Automation Helper Action" } ], "id" : "eab4fd5b-7140-4102-ad73-af4d2522b3d4" } |
You can also validate from the SDDC Manager GUI.
Troubleshooting
- If there are any API related errors around input json passed with invalid input, review the log file at /var/log/vmware/vcf/domainmanager/domainmanager.log. Below is a sample error message for invalid input json. Once the input json file has been fixed, execute the same API call to revalidate the json file.
1 2 3 4 5 |
2020-05-26T05:28:19.861+0000 ERROR [cdf0d554b3852c23,8702] [c.v.e.s.c.v.i.LocalizableAnnotationValidationUtil,http-nio-127.0.0.1-7200-exec-6] Spec violation DM_COMPUTESPEC_NULL 2020-05-26T05:28:19.861+0000 ERROR [cdf0d554b3852c23,8702] [c.v.e.s.c.v.i.LocalizableAnnotationValidationUtil,http-nio-127.0.0.1-7200-exec-6] Spec violation DM_DOMAINID_INVALID_UUID 2020-05-26T05:28:19.861+0000 ERROR [cdf0d554b3852c23,8702] [c.v.e.s.c.v.i.LocalizableAnnotationValidationUtil,http-nio-127.0.0.1-7200-exec-6] Spec violation DM_DOMAINID_NULL 2020-05-26T05:28:19.862+0000 ERROR [cdf0d554b3852c23,8702] [c.v.e.s.e.h.LocalizableRuntimeExceptionHandler,http-nio-127.0.0.1-7200-exec-6] [PULSDS] REST_INVALID_API_INPUT Invalid input com.vmware.evo.sddc.common.core.error.CompositeInvalidInputException: Invalid input |
- If there are any workflow related errors, review the log file at /var/log/vmware/vcf/domainmanager/domainmanager.log to determine the issue. Once the issue has been fixed, retry the task from API following this guidance.
This concludes all the steps required to deploy a new workload domain with the public api. In future posts we will look into additional domain operations around add/remove host and other items.