VMware Cloud Foundation on Dell EMC VxRail API Reference Guide
2. Use cases
2.1. Access Token and Refresh Token
2.1.1. Create a token pair
-
SDDC Manager APIs are secured using token-based authentication.
-
As a first step before invocation of any API, an access token has to be obtained.
-
Invoking the Token API returns a token pair - access token and refresh token.
-
To invoke an API, the access token has to be passed in the Authorization header as a Bearer token.
Prerequisites
-
VCF Credentials
-
User created in SSO or AD domain and associated as an ADMIN or OPERATOR or VIEWER role in VCF
-
Username
-
Password
-
|
Note
|
For the sake of brevity, the Bearer tokens have been abbreviated in the code snippets throughout this document. |
|
Note
|
To create a token pair with "apiKey", refer Obtain access token for a service user section. |
Steps
-
Invoke the API with the right credentials.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tokens' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"username" : "[email protected]",
"password" : "XXXXXXX"
}'
HTTP Request
POST /v1/tokens HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 74
Host: sfo-vcf01.rainpole.io
{
"username" : "[email protected]",
"password" : "XXXXXXX"
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 683
{
"accessToken" : "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNTFlZWI5Yy1mNWNmLTQ3N2UtYTJhYS0yMzg4ZmFmYzMwNDAiLCJpYXQiOjE1ODIxMzgzMzQsInN1YiI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsImlzcyI6InZjZi1hdXRoIiwiYXVkIjoic2RkYy1zZXJ2aWNlcyIsIm5iZiI6MTU4MjEzODMzNCwiZXhwIjoxNTgyMTQxOTM0LCJ1c2VyIjoiYWRtaW5pc3RyYXRvckB2c3BoZXJlLmxvY2FsIiwibmFtZSI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsInNjb3BlIjpbIkJBQ0tVUF9DT05GSUdfUkVBRCIsIkNSRURFTlRJQUxfUkVBRCIsIlVTRVJfV1JJVEUiLCJPVEhFUl9XUklURSIsIkJBQ0tVUF9DT05GSUdfV1JJVEUiLCJPVEhFUl9SRUFEIiwiVVNFUl9SRUFEIiwiQ1JFREVOVElBTF9XUklURSJdfQ.ylzrCyo4ymTKtSv1flmUrW-b8mxjRl7T2uV3a8sWWMA",
"refreshToken" : {
"id" : "3c6b3c30-3bf2-480b-9539-8483699ab911"
}
}
2.1.2. Refresh an access token
-
Refresh token is a special type of token used to renew an access token when the access token expires.
-
A refresh token can be used any number of times to obtain an access token until it has not expired or been revoked.
Prerequisites
-
Refresh token is obtained when token pair is generated
Steps
-
Invoke the API by passing the refresh token.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tokens/access-token/refresh' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '"eb8d1a03-6644-4a76-b018-2c7b02c2a526"'
HTTP Request
PATCH /v1/tokens/access-token/refresh HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 38
Host: sfo-vcf01.rainpole.io
"eb8d1a03-6644-4a76-b018-2c7b02c2a526"
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 583
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNTFlZWI5Yy1mNWNmLTQ3N2UtYTJhYS0yMzg4ZmFmYzMwNDAiLCJpYXQiOjE1ODIxMzgzMzQsInN1YiI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsImlzcyI6InZjZi1hdXRoIiwiYXVkIjoic2RkYy1zZXJ2aWNlcyIsIm5iZiI6MTU4MjEzODMzNCwiZXhwIjoxNTgyMTQxOTM0LCJ1c2VyIjoiYWRtaW5pc3RyYXRvckB2c3BoZXJlLmxvY2FsIiwibmFtZSI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsInNjb3BlIjpbIkJBQ0tVUF9DT05GSUdfUkVBRCIsIkNSRURFTlRJQUxfUkVBRCIsIlVTRVJfV1JJVEUiLCJPVEhFUl9XUklURSIsIkJBQ0tVUF9DT05GSUdfV1JJVEUiLCJPVEhFUl9SRUFEIiwiVVNFUl9SRUFEIiwiQ1JFREVOVElBTF9XUklURSJdfQ.ylzrCyo4ymTKtSv1flmUrW-b8mxjRl7T2uV3a8sWWMA
2.1.3. Revoke a refresh token
-
As refresh tokens are generally issued with validity for longer durations, there is a possibility that they maybe compromised.
-
Revoking a refresh token means that an already issued refresh token cannot be used again to refresh an access token.
Prerequisites
-
Refresh token
Steps
-
Invoke the API by passing the refresh token which is to be revoked.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tokens/refresh-token' -i -X DELETE \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '"eb8d1a03-6644-4a76-b018-2c7b02c2a526"'
HTTP Request
DELETE /v1/tokens/refresh-token HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 38
Host: sfo-vcf01.rainpole.io
"eb8d1a03-6644-4a76-b018-2c7b02c2a526"
HTTP Response
HTTP/1.1 204 No Content
2.2. User Management
2.2.1. Add users
-
This API is used to add users.
Prerequisites
-
Name of the SSO or AD domain
-
Username
-
Type of the user. For types supported, refer to User
-
Role ID
Steps
-
Fetch the role ID for the role.
|
Tip
|
Refer to Get the Roles |
-
Invoke the API to add a user.
|
Note
|
For the sake of brevity, the Bearer tokens in the Authorization header has been abbreviated in the code snippets throughout this document. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/users' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '[ {
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
}
}, {
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
}
}, {
"name" : "SERVICE_USER_1",
"type" : "SERVICE",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
}
} ]'
HTTP Request
POST /v1/users HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 437
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
[ {
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
}
}, {
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
}
}, {
"name" : "SERVICE_USER_1",
"type" : "SERVICE",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
}
} ]
HTTP Response
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 884
{
"elements" : [ {
"id" : "fc361730-c4da-469a-a90c-ec8c6abb2656",
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
},
"creationTimestamp" : "2022-01-24T12:34:52.287Z"
}, {
"id" : "e548d5a6-d5c4-4875-a135-c61ce60ad63c",
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
},
"creationTimestamp" : "2022-01-24T12:34:52.287Z"
}, {
"id" : "5eea66dc-46a5-4469-b1fa-39db95bb3396",
"name" : "SERVICE_USER_1",
"domain" : "Nil",
"type" : "SERVICE",
"apiKey" : "NkqMAdgyHzqHflQL2ktMwDis9p37MBpj",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
},
"creationTimestamp" : "2022-01-24T12:34:52.287Z"
} ]
}
2.2.2. Add service users
-
This API is used to add service users.
Prerequisites
-
Username
-
Type of the user. The type would be SERVICE for service users. For types supported, refer to User.
-
Role ID
Steps
-
Fetch the role ID for the role.
|
Tip
|
Refer to Get the Roles |
-
Invoke the API to create a service user.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/users' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '[ {
"name" : "service_account_1",
"type" : "SERVICE",
"role" : {
"id" : "a013b5af-25b7-4180-8976-427381a0c542"
}
} ]'
HTTP Request
POST /v1/users HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 128
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
[ {
"name" : "service_account_1",
"type" : "SERVICE",
"role" : {
"id" : "a013b5af-25b7-4180-8976-427381a0c542"
}
} ]
HTTP Response
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 337
{
"elements" : [ {
"id" : "774f23b6-5a68-4520-88e5-746c4e7956b5",
"name" : "service_account_1",
"domain" : "Nil",
"type" : "SERVICE",
"apiKey" : "VMPHIO8ABt3qD2k94SLdH8cXbM3Bc9kw",
"role" : {
"id" : "a013b5af-25b7-4180-8976-427381a0c542"
},
"creationTimestamp" : "2022-01-24T12:34:51.620Z"
} ]
}
-
The response of the API contains the apiKey. With the apiKey, the service user can login and obtain access token.
Obtain access token for a service user
Prerequisites
-
API key
Steps
-
Invoke the API with the API key to generate an access token and refresh token.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tokens' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"username" : "automationapp",
"apiKey" : "6598S0SIQC04sGjEr0nIeDlZx18GYRoT"
}'
HTTP Request
POST /v1/tokens HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 83
Host: sfo-vcf01.rainpole.io
{
"username" : "automationapp",
"apiKey" : "6598S0SIQC04sGjEr0nIeDlZx18GYRoT"
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 683
{
"accessToken" : "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNTFlZWI5Yy1mNWNmLTQ3N2UtYTJhYS0yMzg4ZmFmYzMwNDAiLCJpYXQiOjE1ODIxMzgzMzQsInN1YiI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsImlzcyI6InZjZi1hdXRoIiwiYXVkIjoic2RkYy1zZXJ2aWNlcyIsIm5iZiI6MTU4MjEzODMzNCwiZXhwIjoxNTgyMTQxOTM0LCJ1c2VyIjoiYWRtaW5pc3RyYXRvckB2c3BoZXJlLmxvY2FsIiwibmFtZSI6ImFkbWluaXN0cmF0b3JAdnNwaGVyZS5sb2NhbCIsInNjb3BlIjpbIkJBQ0tVUF9DT05GSUdfUkVBRCIsIkNSRURFTlRJQUxfUkVBRCIsIlVTRVJfV1JJVEUiLCJPVEhFUl9XUklURSIsIkJBQ0tVUF9DT05GSUdfV1JJVEUiLCJPVEhFUl9SRUFEIiwiVVNFUl9SRUFEIiwiQ1JFREVOVElBTF9XUklURSJdfQ.ylzrCyo4ymTKtSv1flmUrW-b8mxjRl7T2uV3a8sWWMA",
"refreshToken" : {
"id" : "3c6b3c30-3bf2-480b-9539-8483699ab911"
}
}
2.2.3. Get the Users
-
This API is used to get all the users listed in the system.
-
This also gives other details associated with the user like domain, type of user and the role id.
Steps
-
Invoke the API to fetch all users.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/users' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/users HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 884
{
"elements" : [ {
"id" : "fc361730-c4da-469a-a90c-ec8c6abb2656",
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
},
"creationTimestamp" : "2022-01-24T12:34:52.287Z"
}, {
"id" : "e548d5a6-d5c4-4875-a135-c61ce60ad63c",
"name" : "[email protected]",
"domain" : "vsphere.local",
"type" : "USER",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
},
"creationTimestamp" : "2022-01-24T12:34:52.287Z"
}, {
"id" : "5eea66dc-46a5-4469-b1fa-39db95bb3396",
"name" : "SERVICE_USER_1",
"domain" : "Nil",
"type" : "SERVICE",
"apiKey" : "NkqMAdgyHzqHflQL2ktMwDis9p37MBpj",
"role" : {
"id" : "2ca002cf-b7eb-4697-a7e7-69190d944e00"
},
"creationTimestamp" : "2022-01-24T12:34:52.287Z"
} ]
}
2.2.4. Delete a User
-
This API is used to delete a user.
Prerequisites
-
User ID
Steps
-
Invoke the API with the "user ID" to be deleted.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/users/fc361730-c4da-469a-a90c-ec8c6abb2656' -i -X DELETE \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/users/fc361730-c4da-469a-a90c-ec8c6abb2656 HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 204 No Content
2.2.5. Get the Roles
-
This API is used to fetch all the roles supported by VCF.
-
Currently there are three roles that are supported - ADMIN, OPERATOR and VIEWER.
Prerequisites
None
Steps
-
Invoke the API to fetch the roles and role IDs
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/roles' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/roles HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 361
{
"elements" : [ {
"id" : "802d6fa4-5a1d-419b-84cd-dcf16628802b",
"name" : "ADMIN",
"description" : "Administrator"
}, {
"id" : "b184058c-3141-4531-a2da-194b2f237c55",
"name" : "OPERATOR",
"description" : "Operator"
}, {
"id" : "98c1fd6f-1e48-45ef-9d3f-43604673128c",
"name" : "VIEWER",
"description" : "Viewer"
} ]
}
2.2.6. Get SSO Domain
-
This API is used to fetch the SSO domains known to the system.
Prerequisites
None
Steps
-
Invoke the API by specifying the "SSO domain name".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/sso-domains' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/sso-domains HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 38
{
"elements" : [ "vsphere.local" ]
}
2.2.7. Get SSO Domain entities
-
This API is used to fetch all domain entities in a particular domain known to the system.
-
This includes users and subdomains.
Prerequisites
-
SSO Domain name
Steps
-
Invoke the API by specifying the "SSO domain name".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/sso-domains/vsphere.local/entities' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/sso-domains/vsphere.local/entities HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 786
{
"elements" : [ {
"id" : "[email protected]",
"name" : "USER_1",
"type" : "USER"
}, {
"id" : "[email protected]",
"name" : "USER_2",
"type" : "USER"
}, {
"id" : "[email protected]",
"name" : "USER_3",
"type" : "USER"
}, {
"id" : "[email protected]",
"name" : "USER_4",
"type" : "USER"
}, {
"id" : "ä[email protected]",
"name" : "äUSER_5",
"type" : "USER"
}, {
"id" : "vsphere.local\\\\group_1",
"name" : "",
"type" : "GROUP"
}, {
"id" : "vsphere.local\\\\group_2",
"name" : "",
"type" : "GROUP"
}, {
"id" : "vsphere.local\\\\group_3",
"name" : "",
"type" : "GROUP"
}, {
"id" : "vsphere.local\\\\group_4",
"name" : "",
"type" : "GROUP"
} ]
}
2.2.8. Get local account details
-
This API is used to check whether or not the local account is configured.
Prerequisites
None
Steps
-
Invoke the API to check whether or not the local account is configured.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/users/local/admin' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/users/local/admin HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 141
{
"isConfigured" : false,
"name" : "admin@local",
"type" : "USER",
"role" : {
"id" : "9e81d1c2-f688-4c34-890c-5bdff737358d"
}
}
2.2.9. Update password for local account
-
This API is used to update the local account password or to configure local account if it wasn’t configured during the bringup
Prerequisites
-
The following data is required
-
Old Password
-
New Password
-
|
Note
|
Provide only "newPassword" if you are configuring the local account for the first time. |
-
New password must be in compliance with these password policies.
Password requirements:
-
Length: 12-127 characters
-
Allowed special characters: ! % @ $ ^ # ? *
-
At least 1 small letter, capital letter, number and special character should be present
-
At least 2 alphabetic characters should be present
-
A character cannot be repeated more than 3 times consecutively
-
Steps
-
Invoke the API to update the local account password or to configure local account.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/users/local/admin' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"oldPassword" : "XXXXXXX",
"newPassword" : "YYYYYYY"
}'
HTTP Request
PATCH /v1/users/local/admin HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 60
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"oldPassword" : "XXXXXXX",
"newPassword" : "YYYYYYY"
}
HTTP Response
HTTP/1.1 204 No Content
2.3. SDDCs (Management Domain)
|
Note
|
The /v1/sddcs APIs are available only on the Cloud Builder appliance |
2.3.1. Create an SDDC
Create an SDDC workflow executes automatically the following:
-
Configures networking on each host.
-
Configures vSAN storage on the hosts.
-
Deploys and configures the management stack - NSX
-
Deploys and configures SDDC Manager which provides the ability to perform Day 2 operations
Prerequisites
-
ID of the SDDC instance
-
Detailed list of host
|
Tip
|
Refer to: SddcHostSpec. |
-
vCenter details
|
Tip
|
Refer to: SddcVcenterSpec. |
-
Cluster details
|
Tip
|
Refer to: SddcClusterSpec. |
-
Detailed list of Distributed Virtual Switches
|
Tip
|
Refer to: DvsSpec. |
|
Note
|
In the dvsSpec, 'dvsName' 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. |
-
Detailed list of networks
|
Tip
|
Refer to: SddcNetworkSpec. |
-
DNS details
|
Tip
|
Refer to: DnsSpec. |
-
List of NTP servers
-
Name of the task to execute
-
vSAN details
|
Tip
|
Refer to: VsanSpec. |
-
NSX-T details
|
Tip
|
Refer to: SddcNsxtSpec. |
|
Note
|
In order to configure NSX-T Host Overlay Using a Static IP Pool, please provide ipAddressPoolSpec in nsxtSpec. Otherwise, DHCP will be chosen. Example specifications can seen below. |
-
SDDC Manager details
|
Tip
|
Refer to: SddcManagerSpec. |
-
List of PSC’s details
|
Tip
|
Refer to: PscSpec. |
-
VxManager details
|
Tip
|
Refer to: VxManagerSpec. |
-
Name of network pool associated with the management domain
-
List of names of the components to be excluded
-
Version of the Distributed Virtual Switch
-
Boolean to identify whether Customer Experience Improvement Program should be enabled
-
Boolean to identify whether Federal Information Processing Standards should be enabled
-
Remote Site details
|
Tip
|
Refer to: VxManagerSpec. |
-
Passphrase for the certificates to be used for vCenter and NSX
-
Boolean to identify if ESXi thumbprint validation is to be skipped
-
Security details
|
Tip
|
Refer to: SecuritySpec. |
-
Boolean to identify if vSAN should be cleaned up
|
Note
|
Should be true only if this is the very first run |
Steps
-
Validate the input specification.
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/validations' -i -u 'admin:VMwareInfra@1' -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"skipEsxThumbprintValidation" : true,
"managementPoolName" : "",
"sddcManagerSpec" : {
"hostname" : "sddcbsddc-1",
"ipAddress" : "172.18.93.28",
"netmask" : "255.255.255.0",
"licenseKey" : "xxxx-xxxxx-xxxxx-xxxxx",
"localUserPassword" : "xxxxxxxx",
"rootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"secondUserCredentials" : {
"username" : "vcf",
"password" : "xxxxxxxx"
}
},
"sddcId" : "MGMT",
"esxLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"taskName" : "workflowconfig/workflowspec-vxrail.json",
"ceipEnabled" : false,
"fipsEnabled" : false,
"ntpServers" : [ "sddc-ntp-server.rainpole.local" ],
"vxManagerSpec" : {
"vxManagerHostName" : "sddcbvxrm-1",
"defaultRootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"defaultAdminUserCredentials" : {
"username" : "mystic",
"password" : "xxxxxxxx"
}
},
"dnsSpec" : {
"subdomain" : "rainpole.local",
"domain" : "rainpole.local",
"nameserver" : "10.172.90.26"
},
"networkSpecs" : [ ],
"nsxtSpec" : {
"nsxtManagerSize" : "medium",
"nsxtManagers" : [ {
"hostname" : "sddcb-nsxt-1",
"ip" : "172.18.93.29"
}, {
"hostname" : "sddcb-nsxt-2",
"ip" : "172.18.93.41"
}, {
"hostname" : "sddcb-nsxt-3",
"ip" : "172.18.93.42"
} ],
"rootNsxtManagerPassword" : "xxxxxxxx",
"nsxtAdminPassword" : "xxxxxxxx",
"nsxtAuditPassword" : "xxxxxxxx",
"rootLoginEnabledForNsxtManager" : "true",
"sshEnabledForNsxtManager" : "true",
"overLayTransportZone" : {
"zoneName" : "MGMT-tz-overlay01",
"networkName" : "netName-overlay"
},
"vlanTransportZone" : {
"zoneName" : "MGMT-tz-vlan01",
"networkName" : "netName-vlan"
},
"vip" : "172.18.93.36",
"vipFqdn" : "sddcb-vip-nsxt-mgmt",
"nsxtLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"transportVlanId" : 1447,
"ipAddressPoolSpec" : {
"name" : "sfo01-m01-cl01-tep01",
"description" : "ESXi Host Overlay TEP IP Pool",
"subnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "172.16.14.101",
"end" : "172.16.14.108"
} ],
"cidr" : "172.16.14.0/24",
"gateway" : "172.16.14.1"
} ]
}
},
"vsanSpec" : {
"vsanName" : "VxRail-Virtual-SAN-Cluster",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"datastoreName" : "VxRail-Virtual-SAN-Datastore"
},
"dvsSpecs" : [ {
"dvsName" : "VMware HCIA Distributed Switch-2",
"vcenterId" : "vcenter-1",
"vmnics" : [ "vmnic1", "vmnic2" ],
"networks" : [ ],
"isUsedByNsxt" : true
} ],
"clusterSpec" : {
"clusterName" : "VxRail-Virtual-SAN-Cluster",
"vcenterName" : "vcenter-1",
"clusterEvcMode" : "",
"vmFolders" : {
"MANAGEMENT" : "MGMT-fd-mgmt",
"NETWORKING" : "MGMT-fd-nsx",
"EDGENODES" : "MGMT-fd-edge"
}
},
"pscSpecs" : [ {
"pscId" : "psc-1",
"vcenterId" : "vcenter-1",
"adminUserSsoPassword" : "xxxxxxxx",
"pscSsoSpec" : {
"ssoDomain" : "vsphere.local",
"isJoinSsoDomain" : false,
"ssoSiteName" : "MGMT"
}
} ],
"vcenterSpec" : {
"vcenterIp" : "172.18.93.26",
"vcenterHostname" : "sddcbvc-1",
"vcenterId" : "vcenter-1",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"rootVcenterPassword" : "xxxxxxxx"
},
"hostSpecs" : [ {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.10",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-001",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-1"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.11",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-002",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-2"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.12",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-003",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-3"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.13",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-004",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-4"
} ],
"excludedComponents" : [ "NSX-V", "AVN", "EBGP" ]
}'
HTTP Request
POST /v1/sddcs/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 4886
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
{
"skipEsxThumbprintValidation" : true,
"managementPoolName" : "",
"sddcManagerSpec" : {
"hostname" : "sddcbsddc-1",
"ipAddress" : "172.18.93.28",
"netmask" : "255.255.255.0",
"licenseKey" : "xxxx-xxxxx-xxxxx-xxxxx",
"localUserPassword" : "xxxxxxxx",
"rootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"secondUserCredentials" : {
"username" : "vcf",
"password" : "xxxxxxxx"
}
},
"sddcId" : "MGMT",
"esxLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"taskName" : "workflowconfig/workflowspec-vxrail.json",
"ceipEnabled" : false,
"fipsEnabled" : false,
"ntpServers" : [ "sddc-ntp-server.rainpole.local" ],
"vxManagerSpec" : {
"vxManagerHostName" : "sddcbvxrm-1",
"defaultRootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"defaultAdminUserCredentials" : {
"username" : "mystic",
"password" : "xxxxxxxx"
}
},
"dnsSpec" : {
"subdomain" : "rainpole.local",
"domain" : "rainpole.local",
"nameserver" : "10.172.90.26"
},
"networkSpecs" : [ ],
"nsxtSpec" : {
"nsxtManagerSize" : "medium",
"nsxtManagers" : [ {
"hostname" : "sddcb-nsxt-1",
"ip" : "172.18.93.29"
}, {
"hostname" : "sddcb-nsxt-2",
"ip" : "172.18.93.41"
}, {
"hostname" : "sddcb-nsxt-3",
"ip" : "172.18.93.42"
} ],
"rootNsxtManagerPassword" : "xxxxxxxx",
"nsxtAdminPassword" : "xxxxxxxx",
"nsxtAuditPassword" : "xxxxxxxx",
"rootLoginEnabledForNsxtManager" : "true",
"sshEnabledForNsxtManager" : "true",
"overLayTransportZone" : {
"zoneName" : "MGMT-tz-overlay01",
"networkName" : "netName-overlay"
},
"vlanTransportZone" : {
"zoneName" : "MGMT-tz-vlan01",
"networkName" : "netName-vlan"
},
"vip" : "172.18.93.36",
"vipFqdn" : "sddcb-vip-nsxt-mgmt",
"nsxtLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"transportVlanId" : 1447,
"ipAddressPoolSpec" : {
"name" : "sfo01-m01-cl01-tep01",
"description" : "ESXi Host Overlay TEP IP Pool",
"subnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "172.16.14.101",
"end" : "172.16.14.108"
} ],
"cidr" : "172.16.14.0/24",
"gateway" : "172.16.14.1"
} ]
}
},
"vsanSpec" : {
"vsanName" : "VxRail-Virtual-SAN-Cluster",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"datastoreName" : "VxRail-Virtual-SAN-Datastore"
},
"dvsSpecs" : [ {
"dvsName" : "VMware HCIA Distributed Switch-2",
"vcenterId" : "vcenter-1",
"vmnics" : [ "vmnic1", "vmnic2" ],
"networks" : [ ],
"isUsedByNsxt" : true
} ],
"clusterSpec" : {
"clusterName" : "VxRail-Virtual-SAN-Cluster",
"vcenterName" : "vcenter-1",
"clusterEvcMode" : "",
"vmFolders" : {
"MANAGEMENT" : "MGMT-fd-mgmt",
"NETWORKING" : "MGMT-fd-nsx",
"EDGENODES" : "MGMT-fd-edge"
}
},
"pscSpecs" : [ {
"pscId" : "psc-1",
"vcenterId" : "vcenter-1",
"adminUserSsoPassword" : "xxxxxxxx",
"pscSsoSpec" : {
"ssoDomain" : "vsphere.local",
"isJoinSsoDomain" : false,
"ssoSiteName" : "MGMT"
}
} ],
"vcenterSpec" : {
"vcenterIp" : "172.18.93.26",
"vcenterHostname" : "sddcbvc-1",
"vcenterId" : "vcenter-1",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"rootVcenterPassword" : "xxxxxxxx"
},
"hostSpecs" : [ {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.10",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-001",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-1"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.11",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-002",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-2"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.12",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-003",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-3"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.13",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-004",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-4"
} ],
"excludedComponents" : [ "NSX-V", "AVN", "EBGP" ]
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 9202
{
"id" : "26c27804-f837-4e4f-b50f-1625af792f0f",
"executionStatus" : "COMPLETED",
"validationChecks" : [ ],
"additionalProperties" : {
"sddcSpec" : "{\n \"dvSwitchVersion\": \"7.0.0\",\n \"skipEsxThumbprintValidation\": true,\n \"managementPoolName\": \"bringup-networkpool\",\n \"sddcManagerSpec\": {\n \"hostname\": \"sfo-vcf01\",\n \"ipAddress\": \"10.0.0.4\",\n \"netmask\": \"255.255.255.0\",\n \"localUserPassword\": \"xxxxxxx\",\n \"rootUserCredentials\": {\n \"username\": \"root\",\n \"password\": \"xxxxxxx\"\n },\n \"secondUserCredentials\": {\n \"username\": \"vcf\",\n \"password\": \"xxxxxxx\"\n }\n },\n \"sddcId\": \"sddcId-public-api-01\",\n \"esxLicense\": \"XXXXX-XXXXX-XXXXX-XXXXX-XXXXX\",\n \"taskName\": \"workflowconfig/workflowspec-ems.json\",\n \"ntpServers\": [\n \"10.0.0.250\"\n ],\n \"dnsSpec\": {\n \"subdomain\": \"vrack.vsphere.local\",\n \"domain\": \"vsphere.local\",\n \"nameserver\": \"10.0.0.250\",\n \"secondaryNameserver\": \"10.0.0.250\"\n },\n \"networkSpecs\": [\n {\n \"subnet\": \"10.0.0.0/22\",\n \"vlanId\": \"0\",\n \"mtu\": \"1500\",\n \"networkType\": \"MANAGEMENT\",\n \"gateway\": \"10.0.0.250\"\n },\n {\n \"subnet\": \"10.0.4.0/24\",\n \"includeIpAddressRanges\": [\n {\n \"startIpAddress\": \"10.0.4.7\",\n \"endIpAddress\": \"10.0.4.48\"\n },\n {\n \"startIpAddress\": \"10.0.4.3\",\n \"endIpAddress\": \"10.0.4.6\"\n }\n ],\n \"includeIpAddress\": [\n \"10.0.4.50\",\n \"10.0.4.49\"\n ],\n \"vlanId\": \"0\",\n \"mtu\": \"8940\",\n \"networkType\": \"VSAN\",\n \"gateway\": \"10.0.4.253\"\n },\n {\n \"subnet\": \"10.0.8.0/24\",\n \"includeIpAddressRanges\": [\n {\n \"startIpAddress\": \"10.0.8.3\",\n \"endIpAddress\": \"10.0.8.50\"\n }\n ],\n \"vlanId\": \"0\",\n \"mtu\": \"8940\",\n \"networkType\": \"VMOTION\",\n \"gateway\": \"10.0.8.253\"\n }\n ],\n \"nsxtSpec\": {\n \"nsxtManagerSize\": \"medium\",\n \"nsxtManagers\": [\n {\n \"hostname\": \"sfo-m01-nsx01a\",\n \"ip\": \"10.0.0.31\"\n },\n {\n \"hostname\": \"sfo-m01-nsx01b\",\n \"ip\": \"10.0.0.32\"\n },\n {\n \"hostname\": \"sfo-m01-nsx01c\",\n \"ip\": \"10.0.0.33\"\n }\n ],\n \"rootNsxtManagerPassword\": \"xxxxxxx\",\n \"nsxtAdminPassword\": \"xxxxxxx\",\n \"nsxtAuditPassword\": \"xxxxxxx\",\n \"rootLoginEnabledForNsxtManager\": \"true\",\n \"sshEnabledForNsxtManager\": \"true\",\n \"overLayTransportZone\": {\n \"zoneName\": \"sfo-m01-tz-overlay01\",\n \"networkName\": \"net-overlay\"\n },\n \"vlanTransportZone\": {\n \"zoneName\": \"sfo-m01-tz-vlan01\",\n \"networkName\": \"net-vlan\"\n },\n \"vip\": \"10.0.0.30\",\n \"vipFqdn\": \"sfo-m01-nsx01\",\n \"nsxtLicense\": \"XXXXX-XXXXX-XXXXX-XXXXX-XXXXX\",\n \"transportVlanId\": 0,\n \"ipAddressPoolSpec\": {\n \"name\": \"sfo01-m01-cl01-tep01\",\n \"description\": \"ESXi Host Overlay TEP IP Pool\",\n \"subnets\": [\n {\n \"ipAddressPoolRanges\": [\n {\n \"start\": \"172.16.14.101\",\n \"end\": \"172.16.14.108\"\n }\n ],\n \"cidr\": \"172.16.14.0/24\",\n \"gateway\": \"172.16.14.1\"\n }\n ]\n }\n },\n \"vsanSpec\": {\n \"vsanName\": \"sfo-m01-cl01-ds-vsan01\",\n \"licenseFile\": \"XXXXX-XXXXX-XXXXX-XXXXX-XXXXX\",\n \"datastoreName\": \"sfo-m01-cl01-ds-vsan01\"\n },\n \"dvsSpecs\": [\n {\n \"mtu\": 8940,\n \"niocSpecs\": [\n {\n \"trafficType\": \"VSAN\",\n \"value\": \"HIGH\"\n },\n {\n \"trafficType\": \"VMOTION\",\n \"value\": \"LOW\"\n },\n {\n \"trafficType\": \"VDP\",\n \"value\": \"LOW\"\n },\n {\n \"trafficType\": \"VIRTUALMACHINE\",\n \"value\": \"HIGH\"\n },\n {\n \"trafficType\": \"MANAGEMENT\",\n \"value\": \"NORMAL\"\n },\n {\n \"trafficType\": \"NFS\",\n \"value\": \"LOW\"\n },\n {\n \"trafficType\": \"HBR\",\n \"value\": \"LOW\"\n },\n {\n \"trafficType\": \"FAULTTOLERANCE\",\n \"value\": \"LOW\"\n },\n {\n \"trafficType\": \"ISCSI\",\n \"value\": \"LOW\"\n }\n ],\n \"dvsName\": \"sfo-m01-cl01-vds01\",\n \"vmnics\": [\n \"vmnic0\",\n \"vmnic1\"\n ],\n \"networks\": [\n \"MANAGEMENT\",\n \"VSAN\",\n \"VMOTION\"\n ]\n }\n ],\n \"clusterSpec\": {\n \"clusterName\": \"sfo-m01-cl01\",\n \"clusterEvcMode\": \"\",\n \"resourcePoolSpecs\": [\n {\n \"cpuSharesLevel\": \"high\",\n \"cpuSharesValue\": 0,\n \"name\": \"sfo-m01-cl01-rp-sddc-mgmt\",\n \"memorySharesValue\": 0,\n \"cpuReservationPercentage\": 0,\n \"memoryLimit\": -1,\n \"memoryReservationPercentage\": 0,\n \"cpuReservationExpandable\": true,\n \"memoryReservationExpandable\": true,\n \"memorySharesLevel\": \"normal\",\n \"cpuLimit\": -1,\n \"type\": \"management\"\n },\n {\n \"cpuSharesLevel\": \"high\",\n \"cpuSharesValue\": 0,\n \"name\": \"sfo-m01-cl01-rp-sddc-network\",\n \"memorySharesValue\": 0,\n \"cpuReservationPercentage\": 0,\n \"memoryLimit\": -1,\n \"memoryReservationPercentage\": 0,\n \"cpuReservationExpandable\": true,\n \"memoryReservationExpandable\": true,\n \"memorySharesLevel\": \"normal\",\n \"cpuLimit\": -1,\n \"type\": \"network\"\n },\n {\n \"cpuSharesLevel\": \"normal\",\n \"cpuSharesValue\": 0,\n \"name\": \"sfo-m01-cl01-rp-sddc-compute\",\n \"memorySharesValue\": 0,\n \"cpuReservationPercentage\": 0,\n \"memoryLimit\": -1,\n \"memoryReservationPercentage\": 0,\n \"cpuReservationExpandable\": true,\n \"memoryReservationExpandable\": true,\n \"memorySharesLevel\": \"normal\",\n \"cpuLimit\": -1,\n \"type\": \"compute\"\n },\n {\n \"name\": \"sfo-m01-cl01-rp-user-compute\",\n \"type\": \"compute\",\n \"cpuReservationMhz\": 2100,\n \"cpuLimit\": -1,\n \"cpuReservationExpandable\": true,\n \"cpuSharesLevel\": \"normal\",\n \"memoryReservationMb\": 3128,\n \"memoryReservationExpandable\": true,\n \"memorySharesLevel\": \"normal\",\n \"memorySharesValue\": 0\n }\n ]\n },\n \"pscSpecs\": [\n {\n \"pscId\": \"psc-1\",\n \"pscSsoSpec\": {\n \"ssoDomain\": \"vsphere.local\"\n },\n \"adminUserSsoPassword\": \"xxxxxxx\"\n }\n ],\n \"vcenterSpec\": {\n \"vcenterIp\": \"10.0.0.6\",\n \"vcenterHostname\": \"sfo-m01-vc01\",\n \"licenseFile\": \"XXXXX-XXXXX-XXXXX-XXXXX-XXXXX\",\n \"rootVcenterPassword\": \"xxxxxxx\",\n \"vmSize\": \"tiny\"\n },\n \"hostSpecs\": [\n {\n \"credentials\": {\n \"username\": \"root\",\n \"password\": \"xxxxxxx\"\n },\n \"ipAddressPrivate\": {\n \"subnet\": \"255.255.252.0\",\n \"cidr\": \"\",\n \"ipAddress\": \"10.0.0.100\",\n \"gateway\": \"10.0.0.250\"\n },\n \"hostname\": \"sfo01-m01-esx01\",\n \"vSwitch\": \"vSwitch0\",\n \"serverId\": \"host-0\",\n \"association\": \"sfo-m01-dc01\"\n },\n {\n \"credentials\": {\n \"username\": \"root\",\n \"password\": \"xxxxxxx\"\n },\n \"ipAddressPrivate\": {\n \"subnet\": \"255.255.252.0\",\n \"cidr\": \"\",\n \"ipAddress\": \"10.0.0.101\",\n \"gateway\": \"10.0.0.250\"\n },\n \"hostname\": \"sfo01-m01-esx02\",\n \"vSwitch\": \"vSwitch0\",\n \"serverId\": \"host-1\",\n \"association\": \"sfo-m01-dc01\"\n },\n {\n \"credentials\": {\n \"username\": \"root\",\n \"password\": \"xxxxxxx\"\n },\n \"ipAddressPrivate\": {\n \"subnet\": \"255.255.255.0\",\n \"cidr\": \"\",\n \"ipAddress\": \"10.0.0.102\",\n \"gateway\": \"10.0.0.250\"\n },\n \"hostname\": \"sfo01-m01-esx03\",\n \"vSwitch\": \"vSwitch0\",\n \"serverId\": \"host-2\",\n \"association\": \"sfo-m01-dc01\"\n },\n {\n \"credentials\": {\n \"username\": \"root\",\n \"password\": \"xxxxxxx\"\n },\n \"ipAddressPrivate\": {\n \"subnet\": \"255.255.255.0\",\n \"cidr\": \"\",\n \"ipAddress\": \"10.0.0.103\",\n \"gateway\": \"10.0.0.250\"\n },\n \"hostname\": \"sfo01-m01-esx04\",\n \"vSwitch\": \"vSwitch0\",\n \"serverId\": \"host-3\",\n \"association\": \"sfo-m01-dc01\"\n }\n ]\n}\n"
}
}
-
Poll the task until "executionStatus" is not "IN_PROGRESS" using the "id" from the previous response.
-
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". -
Validate the input specification.
|
Note
|
Make changes to the input specification and re-validate using a new API invocation. |
-
Download the validation report (optional).
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/validations/74847adf-2315-4844-a14f-e5cdca1a5f3b/report' -i -u 'admin:VMwareInfra@1' -X GET \
-H 'Content-Type: application/octet-stream'
HTTP Request
GET /v1/sddcs/validations/74847adf-2315-4844-a14f-e5cdca1a5f3b/report HTTP/1.1
Content-Type: application/octet-stream
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: form-data; name="validation-report-26c27804-f837-4e4f-b50f-1625af792f0f"; filename="validation-report-26c27804-f837-4e4f-b50f-1625af792f0f"
|
Note
|
The report can be downloaded while the "executionStatus" is "IN_PROGRESS" or "COMPLETED" and the "resultStatus" is "SUCCEEDED" or "FAILED". |
-
Trigger the task using the valid input specification
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs' -i -u 'admin:VMwareInfra@1' -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"skipEsxThumbprintValidation" : true,
"managementPoolName" : "",
"sddcManagerSpec" : {
"hostname" : "sddcbsddc-1",
"ipAddress" : "172.18.93.28",
"netmask" : "255.255.255.0",
"licenseKey" : "xxxx-xxxxx-xxxxx-xxxxx",
"localUserPassword" : "xxxxxxxx",
"rootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"secondUserCredentials" : {
"username" : "vcf",
"password" : "xxxxxxxx"
}
},
"sddcId" : "MGMT",
"esxLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"taskName" : "workflowconfig/workflowspec-vxrail.json",
"ceipEnabled" : false,
"fipsEnabled" : false,
"ntpServers" : [ "sddc-ntp-server.rainpole.local" ],
"vxManagerSpec" : {
"vxManagerHostName" : "sddcbvxrm-1",
"defaultRootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"defaultAdminUserCredentials" : {
"username" : "mystic",
"password" : "xxxxxxxx"
}
},
"dnsSpec" : {
"subdomain" : "rainpole.local",
"domain" : "rainpole.local",
"nameserver" : "10.172.90.26"
},
"networkSpecs" : [ ],
"nsxtSpec" : {
"nsxtManagerSize" : "medium",
"nsxtManagers" : [ {
"hostname" : "sddcb-nsxt-1",
"ip" : "172.18.93.29"
}, {
"hostname" : "sddcb-nsxt-2",
"ip" : "172.18.93.41"
}, {
"hostname" : "sddcb-nsxt-3",
"ip" : "172.18.93.42"
} ],
"rootNsxtManagerPassword" : "xxxxxxxx",
"nsxtAdminPassword" : "xxxxxxxx",
"nsxtAuditPassword" : "xxxxxxxx",
"rootLoginEnabledForNsxtManager" : "true",
"sshEnabledForNsxtManager" : "true",
"overLayTransportZone" : {
"zoneName" : "MGMT-tz-overlay01",
"networkName" : "netName-overlay"
},
"vlanTransportZone" : {
"zoneName" : "MGMT-tz-vlan01",
"networkName" : "netName-vlan"
},
"vip" : "172.18.93.36",
"vipFqdn" : "sddcb-vip-nsxt-mgmt",
"nsxtLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"transportVlanId" : 1447,
"ipAddressPoolSpec" : {
"name" : "sfo01-m01-cl01-tep01",
"description" : "ESXi Host Overlay TEP IP Pool",
"subnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "172.16.14.101",
"end" : "172.16.14.108"
} ],
"cidr" : "172.16.14.0/24",
"gateway" : "172.16.14.1"
} ]
}
},
"vsanSpec" : {
"vsanName" : "VxRail-Virtual-SAN-Cluster",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"datastoreName" : "VxRail-Virtual-SAN-Datastore"
},
"dvsSpecs" : [ {
"dvsName" : "VMware HCIA Distributed Switch-2",
"vcenterId" : "vcenter-1",
"vmnics" : [ "vmnic1", "vmnic2" ],
"networks" : [ ],
"isUsedByNsxt" : true
} ],
"clusterSpec" : {
"clusterName" : "VxRail-Virtual-SAN-Cluster",
"vcenterName" : "vcenter-1",
"clusterEvcMode" : "",
"vmFolders" : {
"MANAGEMENT" : "MGMT-fd-mgmt",
"NETWORKING" : "MGMT-fd-nsx",
"EDGENODES" : "MGMT-fd-edge"
}
},
"pscSpecs" : [ {
"pscId" : "psc-1",
"vcenterId" : "vcenter-1",
"adminUserSsoPassword" : "xxxxxxxx",
"pscSsoSpec" : {
"ssoDomain" : "vsphere.local",
"isJoinSsoDomain" : false,
"ssoSiteName" : "MGMT"
}
} ],
"vcenterSpec" : {
"vcenterIp" : "172.18.93.26",
"vcenterHostname" : "sddcbvc-1",
"vcenterId" : "vcenter-1",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"rootVcenterPassword" : "xxxxxxxx"
},
"hostSpecs" : [ {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.10",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-001",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-1"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.11",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-002",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-2"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.12",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-003",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-3"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.13",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-004",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-4"
} ],
"excludedComponents" : [ "NSX-V", "AVN", "EBGP" ]
}'
HTTP Request
POST /v1/sddcs HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 4886
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
{
"skipEsxThumbprintValidation" : true,
"managementPoolName" : "",
"sddcManagerSpec" : {
"hostname" : "sddcbsddc-1",
"ipAddress" : "172.18.93.28",
"netmask" : "255.255.255.0",
"licenseKey" : "xxxx-xxxxx-xxxxx-xxxxx",
"localUserPassword" : "xxxxxxxx",
"rootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"secondUserCredentials" : {
"username" : "vcf",
"password" : "xxxxxxxx"
}
},
"sddcId" : "MGMT",
"esxLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"taskName" : "workflowconfig/workflowspec-vxrail.json",
"ceipEnabled" : false,
"fipsEnabled" : false,
"ntpServers" : [ "sddc-ntp-server.rainpole.local" ],
"vxManagerSpec" : {
"vxManagerHostName" : "sddcbvxrm-1",
"defaultRootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"defaultAdminUserCredentials" : {
"username" : "mystic",
"password" : "xxxxxxxx"
}
},
"dnsSpec" : {
"subdomain" : "rainpole.local",
"domain" : "rainpole.local",
"nameserver" : "10.172.90.26"
},
"networkSpecs" : [ ],
"nsxtSpec" : {
"nsxtManagerSize" : "medium",
"nsxtManagers" : [ {
"hostname" : "sddcb-nsxt-1",
"ip" : "172.18.93.29"
}, {
"hostname" : "sddcb-nsxt-2",
"ip" : "172.18.93.41"
}, {
"hostname" : "sddcb-nsxt-3",
"ip" : "172.18.93.42"
} ],
"rootNsxtManagerPassword" : "xxxxxxxx",
"nsxtAdminPassword" : "xxxxxxxx",
"nsxtAuditPassword" : "xxxxxxxx",
"rootLoginEnabledForNsxtManager" : "true",
"sshEnabledForNsxtManager" : "true",
"overLayTransportZone" : {
"zoneName" : "MGMT-tz-overlay01",
"networkName" : "netName-overlay"
},
"vlanTransportZone" : {
"zoneName" : "MGMT-tz-vlan01",
"networkName" : "netName-vlan"
},
"vip" : "172.18.93.36",
"vipFqdn" : "sddcb-vip-nsxt-mgmt",
"nsxtLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"transportVlanId" : 1447,
"ipAddressPoolSpec" : {
"name" : "sfo01-m01-cl01-tep01",
"description" : "ESXi Host Overlay TEP IP Pool",
"subnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "172.16.14.101",
"end" : "172.16.14.108"
} ],
"cidr" : "172.16.14.0/24",
"gateway" : "172.16.14.1"
} ]
}
},
"vsanSpec" : {
"vsanName" : "VxRail-Virtual-SAN-Cluster",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"datastoreName" : "VxRail-Virtual-SAN-Datastore"
},
"dvsSpecs" : [ {
"dvsName" : "VMware HCIA Distributed Switch-2",
"vcenterId" : "vcenter-1",
"vmnics" : [ "vmnic1", "vmnic2" ],
"networks" : [ ],
"isUsedByNsxt" : true
} ],
"clusterSpec" : {
"clusterName" : "VxRail-Virtual-SAN-Cluster",
"vcenterName" : "vcenter-1",
"clusterEvcMode" : "",
"vmFolders" : {
"MANAGEMENT" : "MGMT-fd-mgmt",
"NETWORKING" : "MGMT-fd-nsx",
"EDGENODES" : "MGMT-fd-edge"
}
},
"pscSpecs" : [ {
"pscId" : "psc-1",
"vcenterId" : "vcenter-1",
"adminUserSsoPassword" : "xxxxxxxx",
"pscSsoSpec" : {
"ssoDomain" : "vsphere.local",
"isJoinSsoDomain" : false,
"ssoSiteName" : "MGMT"
}
} ],
"vcenterSpec" : {
"vcenterIp" : "172.18.93.26",
"vcenterHostname" : "sddcbvc-1",
"vcenterId" : "vcenter-1",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"rootVcenterPassword" : "xxxxxxxx"
},
"hostSpecs" : [ {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.10",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-001",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-1"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.11",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-002",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-2"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.12",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-003",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-3"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.13",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-004",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-4"
} ],
"excludedComponents" : [ "NSX-V", "AVN", "EBGP" ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/sddcs/97f5c5fe-187f-46d3-b446-73e310187428
Content-Type: application/json
Content-Length: 2497
{
"id" : "97f5c5fe-187f-46d3-b446-73e310187428",
"name" : "Bringup",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-12-09T15:32:22.300Z",
"sddcSubTasks" : [ {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_VCDeployment_VcPlugin_DeployVcAction_4",
"processingStateDescription" : "Deploy vCenter Server",
"name" : "Deploy vCenter Server",
"description" : "Deploy vCenter Server",
"localizableNamePack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:21.942Z",
"updateTimestamp" : "2019-12-09T15:32:21.942Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "NSXConfiguration",
"processingStateDescription" : "Deploy and Configure NSX",
"name" : "Deploy NSX Manager",
"description" : "Deploy and Configure NSX for vSphere",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.012Z",
"updateTimestamp" : "2019-12-09T15:32:22.012Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_SDDCManagerConfiguration_SddcManagerContractPlugin_DeploySddcManagerOnClusterAction_1",
"processingStateDescription" : "Deploy SDDC Manager",
"name" : "Deploy SDDC Manager",
"description" : "Deploy SDDC Manager",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.083Z",
"updateTimestamp" : "2019-12-09T15:32:22.083Z"
} ]
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
|
Tip
|
Refer to: Get an SDDC. |
-
If the "status" is "COMPLETED_WITH_SUCCESS", the task is completed successfully.
-
If the "status" is "COMPLETED_WITH_FAILURE", the task can be re-executed.
|
Tip
|
Refer to: Retry an SDDC creation. |
2.3.2. Get the SDDCS
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs' -i -u 'admin:VMwareInfra@1' -X GET
HTTP Request
GET /v1/sddcs HTTP/1.1
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2634
{
"elements" : [ {
"id" : "97f5c5fe-187f-46d3-b446-73e310187428",
"name" : "Bringup",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-12-09T15:32:22.300Z",
"sddcSubTasks" : [ {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_VCDeployment_VcPlugin_DeployVcAction_4",
"processingStateDescription" : "Deploy vCenter Server",
"name" : "Deploy vCenter Server",
"description" : "Deploy vCenter Server",
"localizableNamePack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:21.942Z",
"updateTimestamp" : "2019-12-09T15:32:21.942Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "NSXConfiguration",
"processingStateDescription" : "Deploy and Configure NSX",
"name" : "Deploy NSX Manager",
"description" : "Deploy and Configure NSX for vSphere",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.012Z",
"updateTimestamp" : "2019-12-09T15:32:22.012Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_SDDCManagerConfiguration_SddcManagerContractPlugin_DeploySddcManagerOnClusterAction_1",
"processingStateDescription" : "Deploy SDDC Manager",
"name" : "Deploy SDDC Manager",
"description" : "Deploy SDDC Manager",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.083Z",
"updateTimestamp" : "2019-12-09T15:32:22.083Z"
} ]
} ]
}
2.3.3. Get an SDDC
Prerequisites
-
ID of the SDDC
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/97f5c5fe-187f-46d3-b446-73e310187428' -i -u 'admin:VMwareInfra@1' -X GET \
-H 'Accept: application/json'
HTTP Request
GET /v1/sddcs/97f5c5fe-187f-46d3-b446-73e310187428 HTTP/1.1
Accept: application/json
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2497
{
"id" : "97f5c5fe-187f-46d3-b446-73e310187428",
"name" : "Bringup",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-12-09T15:32:22.300Z",
"sddcSubTasks" : [ {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_VCDeployment_VcPlugin_DeployVcAction_4",
"processingStateDescription" : "Deploy vCenter Server",
"name" : "Deploy vCenter Server",
"description" : "Deploy vCenter Server",
"localizableNamePack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:21.942Z",
"updateTimestamp" : "2019-12-09T15:32:21.942Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "NSXConfiguration",
"processingStateDescription" : "Deploy and Configure NSX",
"name" : "Deploy NSX Manager",
"description" : "Deploy and Configure NSX for vSphere",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.012Z",
"updateTimestamp" : "2019-12-09T15:32:22.012Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_SDDCManagerConfiguration_SddcManagerContractPlugin_DeploySddcManagerOnClusterAction_1",
"processingStateDescription" : "Deploy SDDC Manager",
"name" : "Deploy SDDC Manager",
"description" : "Deploy SDDC Manager",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.083Z",
"updateTimestamp" : "2019-12-09T15:32:22.083Z"
} ]
}
2.3.4. Retry an SDDC creation
Used to retry a failed SDDC creation task/workflow.
Prerequisites
-
ID of the failed task
-
SDDC deployment details
|
Tip
|
Refer to: SddcSpec. |
|
Note
|
If the SDDC creation details are provided retry of the SDDC creation is performed with the updated information. |
Steps
-
Invoke the API without providing SDDC creation details
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/b285bfc6-8ef2-48d3-a8e2-4ccf921b1f1a' -i -u 'admin:VMwareInfra@1' -X PATCH \
-H 'Accept: application/json'
HTTP Request
PATCH /v1/sddcs/b285bfc6-8ef2-48d3-a8e2-4ccf921b1f1a HTTP/1.1
Accept: application/json
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2497
{
"id" : "97f5c5fe-187f-46d3-b446-73e310187428",
"name" : "Bringup",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-12-09T15:32:22.300Z",
"sddcSubTasks" : [ {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_VCDeployment_VcPlugin_DeployVcAction_4",
"processingStateDescription" : "Deploy vCenter Server",
"name" : "Deploy vCenter Server",
"description" : "Deploy vCenter Server",
"localizableNamePack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:21.942Z",
"updateTimestamp" : "2019-12-09T15:32:21.942Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "NSXConfiguration",
"processingStateDescription" : "Deploy and Configure NSX",
"name" : "Deploy NSX Manager",
"description" : "Deploy and Configure NSX for vSphere",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.012Z",
"updateTimestamp" : "2019-12-09T15:32:22.012Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_SDDCManagerConfiguration_SddcManagerContractPlugin_DeploySddcManagerOnClusterAction_1",
"processingStateDescription" : "Deploy SDDC Manager",
"name" : "Deploy SDDC Manager",
"description" : "Deploy SDDC Manager",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.083Z",
"updateTimestamp" : "2019-12-09T15:32:22.083Z"
} ]
}
-
Invoke the API by providing SDDC creation details
cURL Request
$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/b285bfc6-8ef2-48d3-a8e2-4ccf921b1f1a' -i -u 'admin:VMwareInfra@1' -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"skipEsxThumbprintValidation" : true,
"managementPoolName" : "",
"sddcManagerSpec" : {
"hostname" : "sddcbsddc-1",
"ipAddress" : "172.18.93.28",
"netmask" : "255.255.255.0",
"licenseKey" : "xxxx-xxxxx-xxxxx-xxxxx",
"localUserPassword" : "xxxxxxxx",
"rootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"secondUserCredentials" : {
"username" : "vcf",
"password" : "xxxxxxxx"
}
},
"sddcId" : "MGMT",
"esxLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"taskName" : "workflowconfig/workflowspec-vxrail.json",
"ceipEnabled" : false,
"fipsEnabled" : false,
"ntpServers" : [ "sddc-ntp-server.rainpole.local" ],
"vxManagerSpec" : {
"vxManagerHostName" : "sddcbvxrm-1",
"defaultRootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"defaultAdminUserCredentials" : {
"username" : "mystic",
"password" : "xxxxxxxx"
}
},
"dnsSpec" : {
"subdomain" : "rainpole.local",
"domain" : "rainpole.local",
"nameserver" : "10.172.90.26"
},
"networkSpecs" : [ ],
"nsxtSpec" : {
"nsxtManagerSize" : "medium",
"nsxtManagers" : [ {
"hostname" : "sddcb-nsxt-1",
"ip" : "172.18.93.29"
}, {
"hostname" : "sddcb-nsxt-2",
"ip" : "172.18.93.41"
}, {
"hostname" : "sddcb-nsxt-3",
"ip" : "172.18.93.42"
} ],
"rootNsxtManagerPassword" : "xxxxxxxx",
"nsxtAdminPassword" : "xxxxxxxx",
"nsxtAuditPassword" : "xxxxxxxx",
"rootLoginEnabledForNsxtManager" : "true",
"sshEnabledForNsxtManager" : "true",
"overLayTransportZone" : {
"zoneName" : "MGMT-tz-overlay01",
"networkName" : "netName-overlay"
},
"vlanTransportZone" : {
"zoneName" : "MGMT-tz-vlan01",
"networkName" : "netName-vlan"
},
"vip" : "172.18.93.36",
"vipFqdn" : "sddcb-vip-nsxt-mgmt",
"nsxtLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"transportVlanId" : 1447,
"ipAddressPoolSpec" : {
"name" : "sfo01-m01-cl01-tep01",
"description" : "ESXi Host Overlay TEP IP Pool",
"subnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "172.16.14.101",
"end" : "172.16.14.108"
} ],
"cidr" : "172.16.14.0/24",
"gateway" : "172.16.14.1"
} ]
}
},
"vsanSpec" : {
"vsanName" : "VxRail-Virtual-SAN-Cluster",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"datastoreName" : "VxRail-Virtual-SAN-Datastore"
},
"dvsSpecs" : [ {
"dvsName" : "VMware HCIA Distributed Switch-2",
"vcenterId" : "vcenter-1",
"vmnics" : [ "vmnic1", "vmnic2" ],
"networks" : [ ],
"isUsedByNsxt" : true
} ],
"clusterSpec" : {
"clusterName" : "VxRail-Virtual-SAN-Cluster",
"vcenterName" : "vcenter-1",
"clusterEvcMode" : "",
"vmFolders" : {
"MANAGEMENT" : "MGMT-fd-mgmt",
"NETWORKING" : "MGMT-fd-nsx",
"EDGENODES" : "MGMT-fd-edge"
}
},
"pscSpecs" : [ {
"pscId" : "psc-1",
"vcenterId" : "vcenter-1",
"adminUserSsoPassword" : "xxxxxxxx",
"pscSsoSpec" : {
"ssoDomain" : "vsphere.local",
"isJoinSsoDomain" : false,
"ssoSiteName" : "MGMT"
}
} ],
"vcenterSpec" : {
"vcenterIp" : "172.18.93.26",
"vcenterHostname" : "sddcbvc-1",
"vcenterId" : "vcenter-1",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"rootVcenterPassword" : "xxxxxxxx"
},
"hostSpecs" : [ {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.10",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-001",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-1"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.11",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-002",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-2"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.12",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-003",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-3"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.13",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-004",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-4"
} ],
"excludedComponents" : [ "NSX-V", "AVN", "EBGP" ]
}'
HTTP Request
PATCH /v1/sddcs/b285bfc6-8ef2-48d3-a8e2-4ccf921b1f1a HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 4886
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==
{
"skipEsxThumbprintValidation" : true,
"managementPoolName" : "",
"sddcManagerSpec" : {
"hostname" : "sddcbsddc-1",
"ipAddress" : "172.18.93.28",
"netmask" : "255.255.255.0",
"licenseKey" : "xxxx-xxxxx-xxxxx-xxxxx",
"localUserPassword" : "xxxxxxxx",
"rootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"secondUserCredentials" : {
"username" : "vcf",
"password" : "xxxxxxxx"
}
},
"sddcId" : "MGMT",
"esxLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"taskName" : "workflowconfig/workflowspec-vxrail.json",
"ceipEnabled" : false,
"fipsEnabled" : false,
"ntpServers" : [ "sddc-ntp-server.rainpole.local" ],
"vxManagerSpec" : {
"vxManagerHostName" : "sddcbvxrm-1",
"defaultRootUserCredentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"defaultAdminUserCredentials" : {
"username" : "mystic",
"password" : "xxxxxxxx"
}
},
"dnsSpec" : {
"subdomain" : "rainpole.local",
"domain" : "rainpole.local",
"nameserver" : "10.172.90.26"
},
"networkSpecs" : [ ],
"nsxtSpec" : {
"nsxtManagerSize" : "medium",
"nsxtManagers" : [ {
"hostname" : "sddcb-nsxt-1",
"ip" : "172.18.93.29"
}, {
"hostname" : "sddcb-nsxt-2",
"ip" : "172.18.93.41"
}, {
"hostname" : "sddcb-nsxt-3",
"ip" : "172.18.93.42"
} ],
"rootNsxtManagerPassword" : "xxxxxxxx",
"nsxtAdminPassword" : "xxxxxxxx",
"nsxtAuditPassword" : "xxxxxxxx",
"rootLoginEnabledForNsxtManager" : "true",
"sshEnabledForNsxtManager" : "true",
"overLayTransportZone" : {
"zoneName" : "MGMT-tz-overlay01",
"networkName" : "netName-overlay"
},
"vlanTransportZone" : {
"zoneName" : "MGMT-tz-vlan01",
"networkName" : "netName-vlan"
},
"vip" : "172.18.93.36",
"vipFqdn" : "sddcb-vip-nsxt-mgmt",
"nsxtLicense" : "xxxx-xxxxx-xxxxx-xxxxx",
"transportVlanId" : 1447,
"ipAddressPoolSpec" : {
"name" : "sfo01-m01-cl01-tep01",
"description" : "ESXi Host Overlay TEP IP Pool",
"subnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "172.16.14.101",
"end" : "172.16.14.108"
} ],
"cidr" : "172.16.14.0/24",
"gateway" : "172.16.14.1"
} ]
}
},
"vsanSpec" : {
"vsanName" : "VxRail-Virtual-SAN-Cluster",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"datastoreName" : "VxRail-Virtual-SAN-Datastore"
},
"dvsSpecs" : [ {
"dvsName" : "VMware HCIA Distributed Switch-2",
"vcenterId" : "vcenter-1",
"vmnics" : [ "vmnic1", "vmnic2" ],
"networks" : [ ],
"isUsedByNsxt" : true
} ],
"clusterSpec" : {
"clusterName" : "VxRail-Virtual-SAN-Cluster",
"vcenterName" : "vcenter-1",
"clusterEvcMode" : "",
"vmFolders" : {
"MANAGEMENT" : "MGMT-fd-mgmt",
"NETWORKING" : "MGMT-fd-nsx",
"EDGENODES" : "MGMT-fd-edge"
}
},
"pscSpecs" : [ {
"pscId" : "psc-1",
"vcenterId" : "vcenter-1",
"adminUserSsoPassword" : "xxxxxxxx",
"pscSsoSpec" : {
"ssoDomain" : "vsphere.local",
"isJoinSsoDomain" : false,
"ssoSiteName" : "MGMT"
}
} ],
"vcenterSpec" : {
"vcenterIp" : "172.18.93.26",
"vcenterHostname" : "sddcbvc-1",
"vcenterId" : "vcenter-1",
"licenseFile" : "xxxx-xxxxx-xxxxx-xxxxx",
"rootVcenterPassword" : "xxxxxxxx"
},
"hostSpecs" : [ {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.10",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-001",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-1"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.11",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-002",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-2"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.12",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-003",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-3"
}, {
"association" : "VxRail-Datacenter",
"ipAddressPrivate" : {
"ipAddress" : "172.18.93.13",
"cidr" : "172.18.93.0/24",
"gateway" : "172.18.93.1"
},
"hostname" : "sddcb-004",
"credentials" : {
"username" : "root",
"password" : "xxxxxxxx"
},
"vSwitch" : "",
"serverId" : "host-4"
} ],
"excludedComponents" : [ "NSX-V", "AVN", "EBGP" ]
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2497
{
"id" : "97f5c5fe-187f-46d3-b446-73e310187428",
"name" : "Bringup",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-12-09T15:32:22.300Z",
"sddcSubTasks" : [ {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_VCDeployment_VcPlugin_DeployVcAction_4",
"processingStateDescription" : "Deploy vCenter Server",
"name" : "Deploy vCenter Server",
"description" : "Deploy vCenter Server",
"localizableNamePack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.vcf.common.fsm.plugins.action.plugins.VcPlugin",
"messageKey" : "DeployVcAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:21.942Z",
"updateTimestamp" : "2019-12-09T15:32:21.942Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "NSXConfiguration",
"processingStateDescription" : "Deploy and Configure NSX",
"name" : "Deploy NSX Manager",
"description" : "Deploy and Configure NSX for vSphere",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.bringup.nsx.action63.NsxServicePluginActionPlugin63",
"messageKey" : "DeployNsxManager.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.012Z",
"updateTimestamp" : "2019-12-09T15:32:22.012Z"
}, {
"sddcId" : "97f5c5fe-187f-46d3-b446-73e310187428",
"processingStateName" : "_SDDCManagerConfiguration_SddcManagerContractPlugin_DeploySddcManagerOnClusterAction_1",
"processingStateDescription" : "Deploy SDDC Manager",
"name" : "Deploy SDDC Manager",
"description" : "Deploy SDDC Manager",
"localizableNamePack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.name"
},
"localizableDescriptionPack" : {
"component" : "com.vmware.evo.sddc.sddcmanager.SddcManagerContractPlugin",
"messageKey" : "DeploySddcManagerOnClusterAction.desc"
},
"status" : "INITIALIZED",
"creationTimestamp" : "2019-12-09T15:32:22.083Z",
"updateTimestamp" : "2019-12-09T15:32:22.083Z"
} ]
}
2.4. Customer Experience Improvement Program
2.4.1. Get CEIP Status
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/ceip' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/ceip HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 83
{
"status" : "ENABLED",
"instanceId" : "3f39d4a1-78d2-11e8-af85-f1cf26258cdc"
}
2.4.2. Update CEIP Status
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/ceip' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"status" : "ENABLE"
}'
HTTP Request
PATCH /v1/system/ceip HTTP/1.1
Content-Type: application/json
Content-Length: 25
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"status" : "ENABLE"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/3f39d4a1-78d2-11e8-af85-f1cf26258cdc
Content-Length: 79
{
"id" : "3f39d4a1-78d2-11e8-af85-f1cf26258cdc",
"status" : "IN_PROGRESS"
}
-
Track the task status using the "id" from the previous response. The GET URL is set in the header response and can be used directly. Refer to: Get a Task.
-
If the "status" is "IN_PROGRESS", the task is still in progress.
-
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", the task can be re-executed.
-
|
Tip
|
To retry task refer to: Retry a Task. |
2.5. Tasks
2.5.1. Get the Tasks
Prerequisites
None
Steps
-
Invoke the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tasks' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/tasks HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2520
{
"elements" : [ {
"id" : "e1ee0254-348d-43ce-9852-2485f12b6689",
"name" : "Enable VMware Customer Experience Improvement Program",
"status" : "Failed",
"creationTimestamp" : "2019-06-20T12:03:18.890Z",
"subTasks" : [ null, null, null, null ],
"errors" : [ {
"errorCode" : "ERROR_CODE_1",
"errorType" : "ERROR",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for error 1",
"referenceToken" : "J8RRKM"
}, {
"errorCode" : "ERROR_CODE_2",
"errorType" : "ERROR",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for error 2",
"referenceToken" : "J8RRKM"
}, {
"errorCode" : "ERROR_CODE_3",
"errorType" : "WARNING",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for warning 1",
"referenceToken" : "J8RRKM"
}, {
"errorCode" : "ERROR_CODE_4",
"errorType" : "WARNING",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for warning 2",
"referenceToken" : "J8RRKM"
} ],
"resources" : [ {
"resourceId" : "37e74bdf-f12d-40c3-8ffb-ccefafac9c36",
"type" : "HOST"
} ],
"isCancellable" : false
}, {
"id" : "65cc8768-abe7-44dc-ae8e-cffe48780cf2",
"name" : "Credentials rotate operation",
"status" : "Successful",
"creationTimestamp" : "2019-06-20T12:03:18.890Z",
"subTasks" : [ null ],
"errors" : [ {
"errorCode" : "ERROR_CODE_1",
"errorType" : "ERROR",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for error 1",
"referenceToken" : "J8RRKM"
}, {
"errorCode" : "ERROR_CODE_2",
"errorType" : "ERROR",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for error 2",
"referenceToken" : "J8RRKM"
}, {
"errorCode" : "ERROR_CODE_3",
"errorType" : "WARNING",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for warning 1",
"referenceToken" : "J8RRKM"
}, {
"errorCode" : "ERROR_CODE_4",
"errorType" : "WARNING",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for warning 2",
"referenceToken" : "J8RRKM"
} ],
"resources" : [ {
"resourceId" : "d6c30a25-b878-4ff6-9ff4-316f694ff2cf",
"type" : "HOST"
} ],
"isCancellable" : false
} ]
}
2.5.2. Get a Task
Prerequisites
-
ID of the task
Steps
-
Invoke the API by providing the ID of the task as input.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tasks/43773acc-6b75-47f6-8b1d-27e1aa52de88' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/tasks/43773acc-6b75-47f6-8b1d-27e1aa52de88 HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1163
{
"id" : "43773acc-6b75-47f6-8b1d-27e1aa52de88",
"name" : "Vi workload Domain Creation",
"status" : "FAILED",
"creationTimestamp" : "1970-01-20T00:23:47.753Z",
"subTasks" : [ null, null, null ],
"errors" : [ {
"errorCode" : "ERROR_CODE_1",
"errorType" : "ERROR",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for error 1",
"referenceToken" : "UTNEGU"
}, {
"errorCode" : "ERROR_CODE_2",
"errorType" : "ERROR",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for error 2",
"referenceToken" : "UTNEGU"
}, {
"errorCode" : "ERROR_CODE_3",
"errorType" : "WARNING",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for warning 1",
"referenceToken" : "UTNEGU"
}, {
"errorCode" : "ERROR_CODE_4",
"errorType" : "WARNING",
"arguments" : [ "arg1", "arg2", "arg3" ],
"message" : "Error Response message for warning 2",
"referenceToken" : "UTNEGU"
} ],
"resources" : [ {
"resourceId" : "cb3ecb44-8e6b-4c4c-a0ee-067bc03dc07e",
"type" : "HOST"
} ],
"isCancellable" : false
}
2.5.3. Retry a Task
Used to retry a failed task/workflow.
Prerequisites
-
ID of the failed task
Steps
-
Invoke the API by providing the ID of the task as input.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/tasks/513df83c-8466-4048-8d63-68f75246ce79' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
PATCH /v1/tasks/513df83c-8466-4048-8d63-68f75246ce79 HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
|
Note
|
The credentials' update/rotate password tasks cannot be retried using this API. Refer to Retry a failed credentials task for a given ID section. |
2.6. Hosts
2.6.1. Get the Hosts
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 4314
{
"elements" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
}, {
"id" : "8045e44e-974e-4f43-9862-7f0326782638",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx02.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.101",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"status" : "ASSIGNED",
"hybrid" : true
}, {
"id" : "8045e44e-974e-4f43-9862-7f0326782638",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx03.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.102",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"status" : "ASSIGNED",
"hybrid" : true
} ]
}
Get ASSIGNED Hosts
This API can be used to fetch all the hosts that are currently assigned to any domain and hence cannot be used for other domain tasks
Steps
-
Invoke the API by specifying the "status" as "ASSIGNED".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?status=ASSIGNED' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts?status=ASSIGNED HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1580
{
"elements" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
} ]
}
Get Hosts by Domain
This API can be used to fetch all the hosts that are currently assigned to a given domain.
Steps
-
Invoke the API by specifying the "domainId".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?domainId=377236f7-4965-4179-895e-eeb4eb9a6ad1' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts?domainId=377236f7-4965-4179-895e-eeb4eb9a6ad1 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1580
{
"elements" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
} ]
}
Get Hosts by Cluster
This API can be used to fetch all the hosts that are currently assigned to a given cluster.
Steps
-
Invoke the API by specifying the "clusterId".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?clusterId=4205afdd-94f5-403e-a051-1a9bba09ef40' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts?clusterId=4205afdd-94f5-403e-a051-1a9bba09ef40 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1580
{
"elements" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
} ]
}
Get Hosts by Storage Type
This API can be used to fetch all the hosts that are currently configured with the given storage type.
|
Note
|
Supported storage type is "VSAN". |
Steps
-
Invoke the API by specifying the "storageType".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?storageType=VSAN' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts?storageType=VSAN HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1580
{
"elements" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
} ]
}
Get Hosts by Datastore Name
This API can be used to fetch all the hosts that are currently configured with the given datastore.
Steps
-
Invoke the API by specifying the "datastoreName".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?datastoreName=datastore1' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts?datastoreName=datastore1 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1580
{
"elements" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
} ]
}
2.6.2. Get a Host
Prerequisites
-
ID of the host
Steps
-
Invoke the API by providing the ID of the host as input.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/c0703437-6746-470b-9e1c-f9d3bbc9b1c1' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts/c0703437-6746-470b-9e1c-f9d3bbc9b1c1 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1441
{
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
"esxiVersion" : "7.0.0-13006603",
"fqdn" : "sfo01-m01-esx01.rainpole.io",
"hardwareVendor" : "VMware, Inc.",
"hardwareModel" : "VMware Virtual Platform",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 4994.0,
"usedFrequencyMHz" : 0.0,
"cores" : 2,
"cpuCores" : [ {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
}, {
"frequencyMHz" : 2497.0,
"model" : "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz",
"manufacturer" : "Intel"
} ]
},
"memory" : {
"totalCapacityMB" : 79999.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 781250.0,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 390625.0,
"diskType" : "HDD"
}, {
"capacityMB" : 390625.0,
"diskType" : "FLASH"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"macAddress" : "02:00:1b:31:93:d2",
"speed" : 0
}, {
"deviceName" : "vmnic1",
"macAddress" : "02:00:1b:31:93:d3",
"speed" : 0
} ],
"domain" : {
"id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
},
"cluster" : {
"id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
},
"status" : "ASSIGNED",
"compatibleStorageType" : "VSAN",
"hybrid" : false
}
2.6.3. Get the unmanaged hosts based on a Criterion
This API is used to get the unmanaged hosts from vCenter that meets a specific criterion.
Prerequisites
-
The cluster in a domain to which hosts are to be added must exist.
-
There must be a host already added to the cluster VCenter.
Get the unmanaged hosts from vCenter based on a criterion
Steps
-
Get the ID of the cluster to which hosts are going to be added
-
TIP: Get the Clusters
-
Filter the response by cluster name and get the respective ID
-
Invoke the Get Hosts Criteria API to list all the criteria supported.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/criteria' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/criteria HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 183
{
"elements" : [ {
"name" : "UNMANAGED_HOSTS_IN_VCENTER",
"arguments" : { },
"description" : "All unmanaged hosts that are not in inventory but there in vCenter"
} ]
}
-
Pick one of the criterion and post a query with its name attribute
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/queries' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"name" : "UNMANAGED_HOSTS_IN_VCENTER"
}'
HTTP Request
POST /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/queries HTTP/1.1
Content-Type: application/json
Content-Length: 43
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"name" : "UNMANAGED_HOSTS_IN_VCENTER"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c
Content-Type: application/json
Content-Length: 168
{
"queryInfo" : {
"status" : "IN_PROGRESS",
"processing" : true,
"failure" : false,
"completed" : false
},
"result" : {
"elements" : [ ]
}
}
-
Read the tracking URL returned as Location header in the previous step.
-
Poll the tracking URL until the "status" is not "IN_PROGRESS".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/hosts/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 348
{
"queryInfo" : {
"status" : "COMPLETED",
"processing" : false,
"failure" : false,
"completed" : true
},
"result" : {
"elements" : [ {
"fqdn" : "sfo-w01-esx01.sfo.rainpole.io",
"ipAddresses" : [ {
"ipAddress" : "10.0.0.100",
"type" : "MANAGEMENT"
} ],
"hybrid" : false
} ]
}
}
2.6.4. Get the hosts discovered by HCI manager
This API is used to get the hosts discovered by the HCI manager.
Prerequisites
-
The hosts must be imaged and be discovered by HCI Manager
-
The HCI Manager must be discoverable by the SDDC Manager
-
The HCI Manager SSL FQDN and SSL Thumbprint
Steps to get the VCF unmanaged hosts discovered by HCI Manager
-
Enlist all the criteria available - invoke the Get Host Criterion API to list all the criteria supported.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/criteria' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts/criteria HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 535
{
"elements" : [ {
"name" : "HOST_COMPATIBLE_WITH_CLUSTER_USING_PNICS",
"arguments" : {
"storageType" : "Storage type of host",
"clusterId" : "ID of the cluster"
},
"description" : "Return all hosts that are compatible with a cluster"
}, {
"name" : "UNMANAGED_HOSTS_IN_HCIMGR",
"arguments" : {
"hciManagerFqdn" : "HCI Manager FQDN",
"hciManagerSslThumbprint" : "HCI Manager SSL Thumbprint"
},
"description" : "Return all the unmanaged hosts discovered by HCI manager"
} ]
}
-
Pick the UNMANAGED_HOSTS_IN_HCIMGR criterion and get inputs needed for host query
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/criteria/UNMANAGED_HOSTS_IN_HCIMGR' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts/criteria/UNMANAGED_HOSTS_IN_HCIMGR HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 247
{
"name" : "UNMANAGED_HOSTS_IN_HCIMGR",
"arguments" : {
"hciManagerFqdn" : "HCI Manager FQDN",
"hciManagerSslThumbprint" : "HCI Manager SSL Thumbprint"
},
"description" : "Return all the unmanaged hosts discovered by HCI manager"
}
-
Execute the hosts query criterion with the name, arguments and description attributes
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/queries' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"name" : "UNMANAGED_HOSTS_IN_HCIMGR",
"arguments" : {
"hciManagerFqdn" : "sfo01-m01-vxrm-2.rainpole.io",
"hciManagerSslThumbprint" : "2F:3F:C3:D6:A8:00...."
},
"description" : "Return all the unmanaged hosts discovered by HCI manager"
}'
HTTP Request
POST /v1/hosts/queries HTTP/1.1
Content-Type: application/json
Content-Length: 254
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"name" : "UNMANAGED_HOSTS_IN_HCIMGR",
"arguments" : {
"hciManagerFqdn" : "sfo01-m01-vxrm-2.rainpole.io",
"hciManagerSslThumbprint" : "2F:3F:C3:D6:A8:00...."
},
"description" : "Return all the unmanaged hosts discovered by HCI manager"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/hosts/queries/50fc2eee-a4ad-43a8-85ea-4ff21d3fe8e0
Content-Type: application/json
Content-Length: 183
{
"queryInfo" : {
"status" : "IN_PROGRESS",
"queryId" : "50fc2eee-a4ad-43a8-85ea-4ff21d3fe8e0",
"completed" : false,
"processing" : true,
"failure" : false
}
}
-
Read the task tracking URL returned in Location header from the previous step
-
Poll the tracking URL until the "status" is not "IN_PROGRESS". The results would be available in the results property of the response JSON
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/queries/23dbc8bc-4981-4006-bf2d-5f0c9467ab79' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/hosts/queries/23dbc8bc-4981-4006-bf2d-5f0c9467ab79 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 9996
{
"queryInfo" : {
"status" : "COMPLETED",
"completed" : true,
"processing" : false,
"failure" : false
},
"result" : {
"elements" : [ {
"serialNumber" : "7PH1XK20000000",
"esxiVersion" : "7.0.2-17630552",
"sshThumbprint" : "SHA256:BJx3DqKGSmEPkJ0znDC5TA8LQtaWbsCD0deiSkGfdV8",
"sslThumbprint" : "62:EF:8D:87:EA:7B:AD:92:90:6A:A2:CA:62:DF:08:82:27:44:BC:9C",
"hardwareVendor" : "Dell, Inc.",
"hardwareModel" : "VxRail E560",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "192.168.10.218",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 2095.0,
"usedFrequencyMHz" : 0.0,
"cores" : 32
},
"memory" : {
"totalCapacityMB" : 391806.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 8.001639084E12,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"speed" : 10000
}, {
"deviceName" : "vmnic1",
"speed" : 10000
}, {
"deviceName" : "vmnic2",
"speed" : 10000
}, {
"deviceName" : "vmnic3",
"speed" : 10000
}, {
"deviceName" : "vmnic4",
"speed" : 10000
}, {
"deviceName" : "vmnic5",
"speed" : 10000
} ],
"status" : "UNASSIGNED_USEABLE",
"hybrid" : false
}, {
"serialNumber" : "7PGXWK20000000",
"esxiVersion" : "7.0.2-17630552",
"sshThumbprint" : "SHA256:Dw25E7seW54B5WS9Z3+/+GjHiggbrvsWNtOEnAT4kQM",
"sslThumbprint" : "F0:D3:36:6A:DD:6A:21:BA:05:E3:A7:58:FC:2E:C7:CD:1B:8C:11:68",
"hardwareVendor" : "Dell, Inc.",
"hardwareModel" : "VxRail E560",
"isPrimary" : true,
"ipAddresses" : [ {
"ipAddress" : "192.168.10.207",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 2095.0,
"usedFrequencyMHz" : 0.0,
"cores" : 32
},
"memory" : {
"totalCapacityMB" : 391806.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 8.001639084E12,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"speed" : 10000
}, {
"deviceName" : "vmnic1",
"speed" : 10000
}, {
"deviceName" : "vmnic2",
"speed" : 10000
}, {
"deviceName" : "vmnic3",
"speed" : 10000
}, {
"deviceName" : "vmnic4",
"speed" : 10000
}, {
"deviceName" : "vmnic5",
"speed" : 10000
} ],
"status" : "UNASSIGNED_USEABLE",
"hybrid" : false
}, {
"serialNumber" : "7FVRHK20000000",
"esxiVersion" : "7.0.2-17630552",
"sshThumbprint" : "SHA256:1CnGAcC30TkNuQIe/CiRF89+OY47mKLTvOLVpnKQkSo",
"sslThumbprint" : "87:B5:B9:0F:57:4A:61:F2:03:4A:50:55:6C:F1:77:CD:DD:76:CC:77",
"hardwareVendor" : "Dell, Inc.",
"hardwareModel" : "VxRail E560",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "192.168.10.201",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 2095.0,
"usedFrequencyMHz" : 0.0,
"cores" : 32
},
"memory" : {
"totalCapacityMB" : 391806.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 8.001639084E12,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"speed" : 10000
}, {
"deviceName" : "vmnic1",
"speed" : 10000
}, {
"deviceName" : "vmnic2",
"speed" : 10000
}, {
"deviceName" : "vmnic3",
"speed" : 10000
}, {
"deviceName" : "vmnic4",
"speed" : 10000
}, {
"deviceName" : "vmnic5",
"speed" : 10000
} ],
"status" : "UNASSIGNED_USEABLE",
"hybrid" : false
}, {
"serialNumber" : "7PHWWK20000000",
"esxiVersion" : "7.0.2-17630552",
"sshThumbprint" : "SHA256:p1g9Pjtq/S+u3I6orWPAMOWEtdAewXEVR3usUTIxjCs",
"sslThumbprint" : "EF:56:9E:0B:13:A5:9C:13:08:01:EF:F6:53:7D:E9:DA:BC:A8:37:F6",
"hardwareVendor" : "Dell, Inc.",
"hardwareModel" : "VxRail E560",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "192.168.10.141",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 2095.0,
"usedFrequencyMHz" : 0.0,
"cores" : 32
},
"memory" : {
"totalCapacityMB" : 391806.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 8.001639084E12,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"speed" : 10000
}, {
"deviceName" : "vmnic1",
"speed" : 10000
}, {
"deviceName" : "vmnic2",
"speed" : 10000
}, {
"deviceName" : "vmnic3",
"speed" : 10000
}, {
"deviceName" : "vmnic4",
"speed" : 10000
}, {
"deviceName" : "vmnic5",
"speed" : 10000
} ],
"status" : "UNASSIGNED_USEABLE",
"hybrid" : false
}, {
"serialNumber" : "7FTZHK20000000",
"esxiVersion" : "7.0.2-17630552",
"sshThumbprint" : "SHA256:FuQtBoZu7/9+1qp/6d05v54uxLY1v8KhBXwb0Npf0CE",
"sslThumbprint" : "02:AE:62:97:CF:9A:34:C6:34:0D:0C:A7:FE:9F:E8:35:E0:BE:82:7E",
"hardwareVendor" : "Dell, Inc.",
"hardwareModel" : "VxRail E560",
"isPrimary" : false,
"ipAddresses" : [ {
"ipAddress" : "192.168.10.186",
"type" : "MANAGEMENT"
} ],
"cpu" : {
"frequencyMHz" : 2095.0,
"usedFrequencyMHz" : 0.0,
"cores" : 32
},
"memory" : {
"totalCapacityMB" : 391806.0,
"usedCapacityMB" : 0.0
},
"storage" : {
"totalCapacityMB" : 8.001639084E12,
"usedCapacityMB" : 0.0,
"disks" : [ {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 4.00088457E11,
"diskType" : "FLASH"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
}, {
"capacityMB" : 1.200243695E12,
"diskType" : "HDD"
} ]
},
"physicalNics" : [ {
"deviceName" : "vmnic0",
"speed" : 10000
}, {
"deviceName" : "vmnic1",
"speed" : 10000
}, {
"deviceName" : "vmnic2",
"speed" : 10000
}, {
"deviceName" : "vmnic3",
"speed" : 10000
}, {
"deviceName" : "vmnic4",
"speed" : 10000
}, {
"deviceName" : "vmnic5",
"speed" : 10000
} ],
"status" : "UNASSIGNED_UNUSEABLE",
"hybrid" : false
} ]
}
}
2.7. License Keys
2.7.1. Add a License Key
-
This API is used to add a license key.
-
Adding a license key which is already added , will give an error.
|
Tip
|
Refer to: Get a License Key to check if a license key is already present. |
-
Adding an incorrect (key size and format) or an invalid license key (invalid or expired), will give an error.
Prerequisites
-
License key
-
Product type
-
License key description
Steps
-
Invoke the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/license-keys' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "NSXT",
"description" : "NSXT license key"
}'
HTTP Request
POST /v1/license-keys HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 109
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "NSXT",
"description" : "NSXT license key"
}
HTTP Response
HTTP/1.1 201 Created
Location: /v1/license-keys/XX0XX-XX0XX-XX0XX-XX0XX-XX0XX
2.7.2. Get the License Keys
-
This API is used to get all the license keys.
-
This also gives the license key metrics like usage and validity of a license key.
-
License keys can be filtered based on product type and/or license key status.
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/license-keys' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/license-keys HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 912
{
"elements" : [ {
"id" : "4aaa5534-71c7-4147-a5e2-a6d592e9e987",
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "VCENTER",
"description" : "vCenter license key",
"isUnlimited" : false,
"licenseKeyUsage" : {
"total" : 5,
"remaining" : 4,
"used" : 1,
"licenseUnit" : "INSTANCE"
},
"licenseKeyValidity" : {
"licenseKeyStatus" : "ACTIVE",
"expiryDate" : "2029-05-23T16:12:53.001Z"
}
}, {
"id" : "9350d87b-d742-4f15-b790-21f0471b7b7d",
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "NSXT",
"description" : "NSX-T license key",
"isUnlimited" : false,
"licenseKeyUsage" : {
"total" : 15,
"remaining" : 14,
"used" : 1,
"licenseUnit" : "VM"
},
"licenseKeyValidity" : {
"licenseKeyStatus" : "ACTIVE",
"expiryDate" : "2029-05-23T16:12:53.001Z"
}
} ]
}
Get License Keys By Product Type
Steps
-
Invoke the API by specifying the _"productType".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/license-keys?productType=VCENTER,ESXI' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/license-keys?productType=VCENTER,ESXI HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 471
{
"elements" : [ {
"id" : "acc3f0c1-9119-44b2-8b9b-e125163a816e",
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "VCENTER",
"description" : "vCenter license key",
"isUnlimited" : false,
"licenseKeyUsage" : {
"total" : 5,
"remaining" : 4,
"used" : 1,
"licenseUnit" : "INSTANCE"
},
"licenseKeyValidity" : {
"licenseKeyStatus" : "ACTIVE",
"expiryDate" : "2029-05-23T16:12:53.001Z"
}
} ]
}
Get License Keys By Status Of The License Key
Steps
-
Invoke the API by specifying the _"licenseKeyStatus".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/license-keys?licenseKeyStatus=ACTIVE,NEVER_EXPIRES' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/license-keys?licenseKeyStatus=ACTIVE,NEVER_EXPIRES HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 471
{
"elements" : [ {
"id" : "921bbb3d-d5af-45c9-91cf-657965ee2a00",
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "VCENTER",
"description" : "vCenter license key",
"isUnlimited" : false,
"licenseKeyUsage" : {
"total" : 5,
"remaining" : 4,
"used" : 1,
"licenseUnit" : "INSTANCE"
},
"licenseKeyValidity" : {
"licenseKeyStatus" : "ACTIVE",
"expiryDate" : "2029-05-23T16:12:53.001Z"
}
} ]
}
2.7.3. Get a License Key
-
This API is used to get the license key metrics like usage and validity of a license key.
-
If the license key does not exist, you will get an error.
Prerequisites
-
License key
Steps
-
Invoke the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/license-keys/XX0XX-XX0XX-XX0XX-XX0XX-XX0XX' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/license-keys/XX0XX-XX0XX-XX0XX-XX0XX-XX0XX HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 416
{
"id" : "bc93581e-0b61-46e6-ac4c-229b6b8486d9",
"key" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"productType" : "VCENTER",
"description" : "vCenter license key",
"isUnlimited" : false,
"licenseKeyUsage" : {
"total" : 5,
"remaining" : 4,
"used" : 1,
"licenseUnit" : "INSTANCE"
},
"licenseKeyValidity" : {
"licenseKeyStatus" : "ACTIVE",
"expiryDate" : "2029-05-23T16:12:53.001Z"
}
}
2.7.4. Delete a License Key
-
This API is used to delete a license key.
|
Warning
|
Deleting a license key which is in use, will give an error. |
Prerequisites
-
License key
Steps
-
Invoke the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/license-keys/XX0XX-XX0XX-XX0XX-XX0XX-XX0XX' -i -X DELETE \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/license-keys/XX0XX-XX0XX-XX0XX-XX0XX-XX0XX HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 204 No Content
2.8. 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.
2.8.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.
Prerequisites
-
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)
-
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/ff2f74aa-f4e6-49ac-b988-d1443c092e3a
Content-Type: application/json
Content-Length: 110
{
"id" : "ff2f74aa-f4e6-49ac-b988-d1443c092e3a",
"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/df08fad5-f7d6-48d6-ad05-2be423ef67ed' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/validations/df08fad5-f7d6-48d6-ad05-2be423ef67ed 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" : "8ac7153c-ada3-48e3-b42e-bb7541bd377e",
"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".
NoteMake 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.
TipRefer 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.8.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.
-
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.
-
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" } }NoteTo 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
-
-
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
-
TIP: For NSX-T clusters refer to Get the NSX-T Clusters
-
-
Adding license key for NSXt and vSAN datastore
-
TIP: For license refer to Get a License Key
-
-
-
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/e67fc388-cedf-46c4-9f85-e4b639105d5c
Content-Type: application/json
Content-Length: 110
{
"id" : "e67fc388-cedf-46c4-9f85-e4b639105d5c",
"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/8614d4cb-e54b-44fd-87ae-c26db37b3a3f' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/8614d4cb-e54b-44fd-87ae-c26db37b3a3f 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" : "e890aa3f-c422-4e21-86ab-8c1147224403",
"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".
NoteMake 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.
TipRefer 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.8.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 |
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" } }NoteTo 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.
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/4c83628e-69d3-4551-b615-46689668758e
Content-Type: application/json
Content-Length: 110
{
"id" : "4c83628e-69d3-4551-b615-46689668758e",
"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/df08fad5-f7d6-48d6-ad05-2be423ef67ed' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/validations/df08fad5-f7d6-48d6-ad05-2be423ef67ed 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" : "8ac7153c-ada3-48e3-b42e-bb7541bd377e",
"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".
NoteMake 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.
TipRefer 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.8.4. Get the Domains
Prerequisites
None
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"
}
}
}
} ]
}
2.8.5. Get a Domain
Prerequisites
-
ID of the domain
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"
}
}
}
}
2.8.6. Get Domain Endpoints
Prerequisites
-
ID of the domain
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/aa9f1ae9-1866-4db7-bbdb-5bf576eff535/endpoints' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/aa9f1ae9-1866-4db7-bbdb-5bf576eff535/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"
} ]
}
2.8.7. Rename a Domain
Prerequisites
-
Domain must exist.
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" : "bfb8535d-18a7-4537-ad38-5e1ec6ce16f7",
"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"
}
2.8.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. |
Prerequisites
-
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. |
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/41b25529-f7a6-4682-a098-b9d8e7975b30
Content-Length: 161
{
"id" : "41b25529-f7a6-4682-a098-b9d8e7975b30",
"name" : "Removing domain",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:02:34.974Z"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.9. Clusters
2.9.1. Create a Cluster
After you add the VxRail primary cluster, additional clusters can be added to expand the domain.
Prerequisites
-
The following data is required
-
Domain Identifier in which the cluster is to be created
-
Cluster details
-
Name of the new cluster that will be added to the specified workload domain
-
VxRail Manager Details
-
admin and root credentials
-
-
VSAN license key
-
Host details
-
Hostname of ESXi host which is part of the cluster
-
IpAddress of the same ESXi host which is part of the cluster
-
Password of ESXi host which is part of the cluster
-
-
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. Multiple port groups with transport type PUBLIC can be created.
-
-
-
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
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
{ "nsxTClusterSpec" : { "geneveVlanId" : 2, "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. For more information on fetching the NSXT Cluster details, refer to NSX-T Clusters
{ "nsxTClusterSpec" : { "geneveVlanId" : 2, "ipAddressPoolSpec" : { "name" : "static-ip-pool-01" } } }NoteTo 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
-
-
-
Workload Domain must be provisioned.
|
Note
|
NSX-T Manager(s) are configured when domain is created. |
-
Host configuration must have minimum two active vmNics.
-
A DHCP server must be configured for NSX-T VTEPS
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 cluster spec as shown in the curl payload below using the information from previous call
-
Validate the input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"domainId" : "915d5e3a-0565-4472-9870-2b693922d6cf",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"vxRailDetails" : {
"rootCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
},
"adminCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
}
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"advancedOptions" : {
"evcMode" : "",
"highAvailability" : {
"enabled" : false
}
}
} ]
}
}'
HTTP Request
POST /v1/clusters/validations HTTP/1.1
Content-Type: application/json
Content-Length: 2028
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"domainId" : "915d5e3a-0565-4472-9870-2b693922d6cf",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"vxRailDetails" : {
"rootCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
},
"adminCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
}
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"advancedOptions" : {
"evcMode" : "",
"highAvailability" : {
"enabled" : false
}
}
} ]
}
}
HTTP Response
HTTP/1.1 200 OK
Location: /v1/clusters/validations/6a3ca286-b907-417b-8083-7d1c5b2ed6d6
Content-Type: application/json
Content-Length: 142
{
"id" : "6a3ca286-b907-417b-8083-7d1c5b2ed6d6",
"description" : "Validating Cluster Creation Spec",
"executionStatus" : "IN_PROGRESS"
}
-
Get Validation response of the cluster specification with id obtained from previous spec validation call
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/validations/3b275672-10b8-432a-a257-024b69ba2315' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/validations/3b275672-10b8-432a-a257-024b69ba2315 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" : "3b275672-10b8-432a-a257-024b69ba2315",
"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".
NoteMake 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/clusters' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"domainId" : "187da3d8-46bc-4ef2-928a-73fd46c6b6de",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"vxRailDetails" : {
"rootCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
},
"adminCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
}
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"advancedOptions" : {
"evcMode" : "",
"highAvailability" : {
"enabled" : false
}
}
} ],
"skipFailedHosts" : true
}
}'
HTTP Request
POST /v1/clusters HTTP/1.1
Content-Type: application/json
Content-Length: 2058
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"domainId" : "187da3d8-46bc-4ef2-928a-73fd46c6b6de",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"vxRailDetails" : {
"rootCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
},
"adminCredentials" : {
"credentialType" : "SSH",
"username" : "admin",
"password" : "VMware123!"
}
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"advancedOptions" : {
"evcMode" : "",
"highAvailability" : {
"enabled" : false
}
}
} ],
"skipFailedHosts" : true
}
}
HTTP Response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 341
{
"errorCode" : "PUBLIC_VXRAIL_CLUSTER_CREATION_CANNOT_SKIP_FAILED_HOSTS",
"arguments" : [ ],
"message" : "Failed ESXi Hosts cannot be skipped during VxRail Cluster creation",
"remediationMessage" : "Remove the optional field \"skipFailedHosts\" from the \"computeSpec\" in the Cluster creation spec",
"referenceToken" : "AJSUQI"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.9.2. Create a Cluster with Workflow Optimization
After you add the VxRail primary cluster, additional clusters can be added to expand the domain.
Prerequisites
-
The following data is required
-
Domain Identifier in which the cluster is to be created
-
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 domain 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 domain creation. For more information on fetching the NSXT Cluster details, refer to NSX-T Clusters
{ "ipAddressPoolSpec" : { "name" : "static-ip-pool-01" } }NoteTo 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
-
-
-
Workload Domain must be provisioned.
|
Note
|
NSX-T Manager(s) are configured when domain is created. |
-
Host configuration must have minimum two active vmNics
Steps to perform Optimized Cluster Creation
-
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 the hosts discovered by HCI Manager of the cluster which is to be created
|
Tip
|
Refer to: Get the hosts discovered by HCI manager |
-
Create a cluster spec as shown in the curl payload below using the information from previous call
-
Validate the input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"domainId" : "f0dae1d5-ac8f-410b-b67a-b354f1b585d5",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"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.135",
"dnsName" : "sfo-w01-cl02-vxrm-3.sfo.rainpole.io",
"nicProfile" : "TWO_HIGH_SPEED"
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"skipThumbprintValidation" : false
} ]
}
}'
HTTP Request
POST /v1/clusters/validations HTTP/1.1
Content-Type: application/json
Content-Length: 2792
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"domainId" : "f0dae1d5-ac8f-410b-b67a-b354f1b585d5",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"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.135",
"dnsName" : "sfo-w01-cl02-vxrm-3.sfo.rainpole.io",
"nicProfile" : "TWO_HIGH_SPEED"
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"skipThumbprintValidation" : false
} ]
}
}
HTTP Response
HTTP/1.1 200 OK
Location: /v1/clusters/validations/6b1ed35d-802a-4fe2-b957-3c77a23623d3
Content-Type: application/json
Content-Length: 142
{
"id" : "6b1ed35d-802a-4fe2-b957-3c77a23623d3",
"description" : "Validating Cluster Creation Spec",
"executionStatus" : "IN_PROGRESS"
}
-
Get Validation response of the cluster specification with id obtained from previous spec validation call
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/validations/3b275672-10b8-432a-a257-024b69ba2315' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/validations/3b275672-10b8-432a-a257-024b69ba2315 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" : "3b275672-10b8-432a-a257-024b69ba2315",
"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".
NoteMake 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/clusters' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"domainId" : "cdb9c23d-4630-42f9-aeb4-e98ec5c9a879",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"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.135",
"dnsName" : "sfo-w01-cl02-vxrm-3.sfo.rainpole.io",
"nicProfile" : "TWO_HIGH_SPEED"
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"skipThumbprintValidation" : false
} ]
}
}'
HTTP Request
POST /v1/clusters HTTP/1.1
Content-Type: application/json
Content-Length: 2792
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"domainId" : "cdb9c23d-4630-42f9-aeb4-e98ec5c9a879",
"computeSpec" : {
"clusterSpecs" : [ {
"name" : "sfo-w01-cl02",
"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.135",
"dnsName" : "sfo-w01-cl02-vxrm-3.sfo.rainpole.io",
"nicProfile" : "TWO_HIGH_SPEED"
},
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"datastoreSpec" : {
"vsanDatastoreSpec" : {
"licenseKey" : "XXXX-XXXX"
}
},
"networkSpec" : {
"vdsSpecs" : [ {
"name" : "sfo-w01-cl02-vds01",
"isUsedByNsxt" : true,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl02-vds01-pg-mgmt",
"transportType" : "MANAGEMENT"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vsan",
"transportType" : "VSAN"
}, {
"name" : "sfo-w01-cl02-vds01-pg-vmotion",
"transportType" : "VMOTION"
} ]
} ],
"nsxClusterSpec" : {
"nsxTClusterSpec" : {
"geneveVlanId" : 1,
"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"
} ]
}
}
}
},
"skipThumbprintValidation" : false
} ]
}
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/75737713-d1eb-40d4-8f13-a5d49322c5f1
Content-Length: 166
{
"id" : "75737713-d1eb-40d4-8f13-a5d49322c5f1",
"name" : "Add Cluster Workflow",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:01:36.884Z"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.9.3. Get the Clusters
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 710
{
"elements" : [ {
"id" : "8045e44e-974e-4f43-9862-7f0326782655",
"name" : "sfo-m01-cl01",
"primaryDatastoreName" : "sfo-m01-cl01-ds-vsan01",
"primaryDatastoreType" : "VSAN",
"hosts" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
}, {
"id" : "c0703431-6742-470b-9e1d-f9d3bbc9b1c9"
} ],
"isStretched" : false
}, {
"id" : "2345e44e-974e-4f43-9862-7f0326782898",
"name" : "sfo-w04-cl01",
"primaryDatastoreName" : "sfo-w04-cl01-ds-vsan01",
"primaryDatastoreType" : "VSAN",
"hosts" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
}, {
"id" : "c0703431-6742-470b-9e1d-f9d3bbc9b1c9"
} ],
"isStretched" : true
} ]
}
Get the Stretched Clusters
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters?isStretched=true' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters?isStretched=true HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 365
{
"elements" : [ {
"id" : "2345e44e-974e-4f43-9862-7f0326782898",
"name" : "sfo-w04-cl01",
"primaryDatastoreName" : "sfo-w04-cl01-ds-vsan01",
"primaryDatastoreType" : "VSAN",
"hosts" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
}, {
"id" : "c0703431-6742-470b-9e1d-f9d3bbc9b1c9"
} ],
"isStretched" : true
} ]
}
Get the Vanilla Clusters
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters?isStretched=false' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters?isStretched=false HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 366
{
"elements" : [ {
"id" : "8045e44e-974e-4f43-9862-7f0326782655",
"name" : "sfo-m01-cl01",
"primaryDatastoreName" : "sfo-m01-cl01-ds-vsan01",
"primaryDatastoreType" : "VSAN",
"hosts" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
}, {
"id" : "c0703431-6742-470b-9e1d-f9d3bbc9b1c9"
} ],
"isStretched" : false
} ]
}
2.9.4. Get the unmanaged clusters by criterion
This API is used to get the unmanaged clusters from vCenter that meets a specific criterion.
Prerequisites
-
Domain should already been created.
-
There must be a cluster already added to the VCenter.
-
The following data is required
-
ID of the created domain
Get the unmanaged clusters from vCenter based on a criterion
Steps
-
Get the ID of the created domain
-
TIP: Get the Domains
-
Filter the response by VxRail Domain name and get the respective ID
-
-
Invoke the Get clusters Criteria API to list all the criteria supported.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/criteria' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/criteria HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 359
{
"elements" : [ {
"name" : "UNMANAGED_CLUSTERS_IN_VCENTER",
"arguments" : { },
"description" : "All unmanaged clusters that are not in inventory but there in vCenter"
}, {
"name" : "UNMANAGED_CLUSTER_IN_VCENTER",
"arguments" : { },
"description" : "Specific unmanaged cluster that is not in inventory but there in vCenter"
} ]
}
-
Pick one of the criterion and post a query with its name attribute
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/queries' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"name" : "UNMANAGED_CLUSTERS_IN_VCENTER"
}'
HTTP Request
POST /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/queries HTTP/1.1
Content-Type: application/json
Content-Length: 46
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"name" : "UNMANAGED_CLUSTERS_IN_VCENTER"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c
Content-Type: application/json
Content-Length: 224
{
"queryInfo" : {
"status" : "IN_PROGRESS",
"queryId" : "622671d0ab32-2d54bb6c-637a-49a4-a94c",
"failure" : false,
"completed" : false,
"processing" : true
},
"result" : {
"elements" : [ ]
}
}
-
Read the tracking URL returned as Location header in the previous step.
-
Poll the tracking URL until the "status" is not "IN_PROGRESS".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 285
{
"queryInfo" : {
"status" : "COMPLETED",
"failure" : false,
"completed" : true,
"processing" : false
},
"result" : {
"elements" : [ {
"name" : "sfo-w01-cl01",
"primaryDatastoreName" : "vsan-ds",
"primaryDatastoreType" : "VSAN"
} ]
}
}
2.9.5. Get a Cluster
Prerequisites
-
ID of the cluster
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/8045e44e-974e-4f43-9862-7f0326782655' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/8045e44e-974e-4f43-9862-7f0326782655 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 321
{
"id" : "8045e44e-974e-4f43-9862-7f0326782655",
"name" : "sfo-m01-cl01",
"primaryDatastoreName" : "sfo-m01-cl01-ds-vsan01",
"primaryDatastoreType" : "VSAN",
"hosts" : [ {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
}, {
"id" : "c0703431-6742-470b-9e1d-f9d3bbc9b1c9"
} ],
"isStretched" : false
}
Get list of VDSes of a cluster
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/vdses' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/vdses HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1984
[ {
"id" : "bbcb8e27-2af5-4662-9631-d7982e132bbc",
"name" : "sfo-w01-cl01-vds01",
"isUsedByNsxt" : true,
"mtu" : 1500,
"portGroups" : [ {
"name" : "sfo-w01-cl01-vds01-pg-mgmt",
"transportType" : "MANAGEMENT",
"portBindingType" : "EPHEMERAL",
"vlanId" : 0
}, {
"name" : "sfo-w01-cl01-vds01-pg-vsan",
"transportType" : "VSAN",
"portBindingType" : "STATIC",
"vlanId" : 0
}, {
"name" : "sfo-w01-cl01-vds01-pg-vmotion",
"transportType" : "VMOTION",
"portBindingType" : "STATIC",
"vlanId" : 0
} ],
"niocBandwidthAllocations" : [ {
"type" : "vsan",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "high"
}
}
}, {
"type" : "vmotion",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "low"
}
}
}, {
"type" : "vdp",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "low"
}
}
}, {
"type" : "nfs",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "low"
}
}
}, {
"type" : "hbr",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "low"
}
}
}, {
"type" : "iSCSI",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "low"
}
}
}, {
"type" : "virtualMachine",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "high"
}
}
}, {
"type" : "management",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "normal"
}
}
}, {
"type" : "faultTolerance",
"niocTrafficResourceAllocation" : {
"sharesInfo" : {
"shares" : 0,
"level" : "low"
}
}
} ]
} ]
2.9.6. Get an unmanaged cluster by criterion
This API is used to get the unmanaged cluster by cluster name from vCenter that meets a specific criterion.
Prerequisites
-
Domain should already been created.
-
There must be a cluster already added to the VCenter.
-
The following data is required
-
ID of the created domain
-
List of unmanaged clusters with names
-
|
Tip
|
Refer to: Get the unmanaged clusters by criterion. |
-
Choose one cluster name that need to be imported
-
Get the unmanaged cluster from vCenter for domain update based on a criterion*
Steps
-
Get the ID of the created domain
-
TIP: Get the Domains
-
Filter the response by VxRail Domain name and get the respective ID
-
-
Invoke the Get Clusters Criteria API to list all the criteria supported.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/criteria' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/criteria HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 359
{
"elements" : [ {
"name" : "UNMANAGED_CLUSTERS_IN_VCENTER",
"arguments" : { },
"description" : "All unmanaged clusters that are not in inventory but there in vCenter"
}, {
"name" : "UNMANAGED_CLUSTER_IN_VCENTER",
"arguments" : { },
"description" : "Specific unmanaged cluster that is not in inventory but there in vCenter"
} ]
}
-
Pick one of the criterion and post a query with its name attribute
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/VxRail-Cluster-1/queries' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"name" : "UNMANAGED_CLUSTER_IN_VCENTER"
}'
HTTP Request
POST /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/VxRail-Cluster-1/queries HTTP/1.1
Content-Type: application/json
Content-Length: 45
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"name" : "UNMANAGED_CLUSTER_IN_VCENTER"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/VxRail-Cluster-1/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c
Content-Type: application/json
Content-Length: 224
{
"queryInfo" : {
"status" : "IN_PROGRESS",
"queryId" : "622671d0ab32-2d54bb6c-637a-49a4-a94c",
"failure" : false,
"completed" : false,
"processing" : true
},
"result" : {
"elements" : [ ]
}
}
-
Read the tracking URL returned as Location header in the previous step.
-
Poll the tracking URL until the "status" is not "IN_PROGRESS".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/VxRail-Cluster-1/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/2d54bb6c-637a-49a4-a94c-622671d0ab32/clusters/VxRail-Cluster-1/queries/622671d0ab32-2d54bb6c-637a-49a4-a94c HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1721
{
"queryInfo" : {
"status" : "COMPLETED",
"failure" : false,
"completed" : true,
"processing" : false
},
"result" : {
"elements" : [ {
"name" : "sfo-w01-cl01",
"primaryDatastoreName" : "vsan-ds",
"primaryDatastoreType" : "VSAN",
"hosts" : [ {
"ipAddress" : "10.0.0.100",
"fqdn" : "sfo-w01-esx01.sfo.rainpole.io",
"vmNics" : [ {
"name" : "vmnic2",
"linkSpeedMB" : 10000,
"isInUse" : false,
"isAutoNegotiateSupported" : false,
"isActive" : true
}, {
"name" : "vmnic3",
"linkSpeedMB" : 10000,
"isInUse" : false,
"isAutoNegotiateSupported" : false,
"isActive" : true
}, {
"name" : "vmnic0",
"linkSpeedMB" : 10000,
"isInUse" : true,
"isAutoNegotiateSupported" : false,
"isActive" : true
}, {
"name" : "vmnic1",
"linkSpeedMB" : 10000,
"isInUse" : true,
"isAutoNegotiateSupported" : false,
"isActive" : true
} ]
} ],
"vdsSpecs" : [ {
"name" : "sfo-w01-cl01-vds01",
"isUsedByNsxt" : false,
"portGroupSpecs" : [ {
"name" : "sfo-w01-cl01-vds01-pg-mgmt",
"transportType" : "MANAGEMENT",
"activeUplinks" : null
}, {
"name" : "sfo-w01-cl01-vds01-pg-vsan",
"transportType" : "VSAN",
"activeUplinks" : null
}, {
"name" : "sfo-w01-cl01-vds01-pg-vmotion",
"transportType" : "VMOTION",
"activeUplinks" : null
} ],
"niocBandwidthAllocationSpecs" : null
} ]
} ]
}
}
2.9.7. Expand a Cluster
Importing an individual host into a vcf cluster adds that host to the vcf cluster. You can import multiple hosts at a time to a cluster.
Prerequisites
-
The following data is required
-
ID of the cluster
-
For each host
-
ip address of the host
-
username of the host
-
password of the host
-
-
-
The cluster in a domain to which hosts are to be added must exist.
-
There must be a host already added to the cluster VCenter.
-
Ensure that the host you want to add is in an active state.
-
Prefer to use get unmanaged hosts calls to get the valid hosts ready for addition using query API
|
Tip
|
Refer to: Get the unmanaged hosts based on a Criterion. |
Steps
-
Validate the input specification async.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.0",
"hostName" : "sfo-w01-esx04",
"username" : "test",
"password" : "pass"
} ]
}
}'
HTTP Request
POST /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations HTTP/1.1
Content-Type: application/json
Content-Length: 241
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.0",
"hostName" : "sfo-w01-esx04",
"username" : "test",
"password" : "pass"
} ]
}
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/0afeb970-c2e7-44ac-93c6-0e48175ce6c4
Content-Type: application/json
Content-Length: 143
{
"id" : "0afeb970-c2e7-44ac-93c6-0e48175ce6c4",
"description" : "Validating Cluster Expansion Spec",
"executionStatus" : "IN_PROGRESS"
}
-
Get Validation response of the cluster expansion specification from id obtained from previous spec validation call
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/36c11b35-d2d8-47a8-8ab1-0cbec76a6914' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/36c11b35-d2d8-47a8-8ab1-0cbec76a6914 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" : "36c11b35-d2d8-47a8-8ab1-0cbec76a6914",
"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".
NoteMake 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/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.0",
"hostName" : "sfo-w01-esx04",
"username" : "test",
"password" : "pass"
} ]
}
}'
HTTP Request
PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 241
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.0",
"hostName" : "sfo-w01-esx04",
"username" : "test",
"password" : "pass"
} ]
}
}
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.
TipRefer 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. |
Related APIs
Validate the input spec for operations on a cluster
Update a Cluster by adding or removing Hosts, Stretching a standard vSAN cluster, Unstretching a stretched cluster or by marking for deletion
Get the Hosts
Get a Host
Get the Tasks
Get a Task
Retry a Task
Get the unmanaged hosts based on a Criterion
2.9.8. Compact a Cluster
When a host is removed from a cluster in a domain, the vSAN members are reduced. Ensure that you have enough hosts remaining to facilitate the configured vSAN availability. Failure to do so might result in the datastore being marked as read-only or in data loss.
Prerequisites
-
For each host to be removed
-
ID of the host
-
Steps
-
Validate the input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterCompactionSpec" : {
"hosts" : [ {
"id" : "cca3c20d-27ce-4066-9c92-6a4c0d41485b"
} ]
}
}'
HTTP Request
POST /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations HTTP/1.1
Content-Type: application/json
Content-Length: 115
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterCompactionSpec" : {
"hosts" : [ {
"id" : "cca3c20d-27ce-4066-9c92-6a4c0d41485b"
} ]
}
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 296
{
"id" : "60d00e64-e36d-4e07-bff9-f32539f9fd43",
"description" : "Validating Cluster Compaction Spec",
"executionStatus" : "COMPLETED",
"resultStatus" : "SUCCEEDED",
"validationChecks" : [ {
"description" : "ClusterCompactionSpecValidation",
"resultStatus" : "SUCCEEDED"
} ]
}
-
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".
NoteMake 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/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterCompactionSpec" : {
"hosts" : [ {
"id" : "9f72f2ea-d7f9-49fc-850c-89cca4b6187a"
} ]
}
}'
HTTP Request
PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 115
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterCompactionSpec" : {
"hosts" : [ {
"id" : "9f72f2ea-d7f9-49fc-850c-89cca4b6187a"
} ]
}
}
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.
TipRefer 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.9.9. Prepare for Stretch
Prepare a Standard VxRail vSAN cluster prior to converting it to a Stretched cluster. This will ensure that the VMs on the existing hosts (availability zone) of the cluster do not get migrated to the hosts (second availability zone) that get added to the cluster.
|
Note
|
A cluster cannot be stretched if it has remote vSAN datastores configured. If so, unmount the remote vSAN datastores from vCenter and then try the prepare stretch operation. Also, remote vSAN datastores cannot be configured on stretched clusters. Please refer to the 'VMware Cloud Foundation Administration Guide' for more details. |
Prerequisites
-
The following data is required
-
ID of the cluster
-
Boolean indicating the cluster has been marked for prepare.
-
-
The cluster must exist and the id should be valid.
-
The cluster must not be stretched.
Steps
-
Trigger the Prepare for Stretch task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"prepareForStretch" : true
}'
HTTP Request
PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 32
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"prepareForStretch" : true
}
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.
-
Track the task status using the "id" from the previous response.
-
If the "status" is "IN_PROGRESS", the task is still in progress.
-
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.9.10. Stretch a Cluster
Convert a Standard VxRail vSAN cluster to a Stretched cluster
|
Note
|
A cluster cannot be stretched if it has remote vSAN datastores configured. If so, unmount the remote vSAN datastores from vCenter and then try the stretch operation. Also, remote vSAN datastores cannot be configured on stretched clusters. Please refer to the 'VMware Cloud Foundation Administration Guide' for more details. |
Prerequisites
-
The Witness VM is not managed by SDDC and should be added to the datacenter corresponding to the cluster provided. Please refer to the 'Deploying a vSAN Witness Appliance' section in the 'VMware Cloud Foundation Administration Guide'.
-
The vMotion, vSAN, and VXLAN networks require L3 routing between the availability zones. vSAN networks must also have L3 routing to the vSAN network of the witness host. Please refer to the 'Prerequisites for Stretching a Cluster' section in the 'VMware Cloud Foundation Administration Guide'.
-
Hosts in the second availability zone being used for stretch should not already be a part of SDDC and should be added to the given VxRail cluster through the VxRail cluster expansion flow in vCenter. For more information to expand a VxRail cluster, contact Dell EMC Support.
-
The 'Prepare for Stretch' API should be executed before starting with the Stretch workflow.
-
A valid 'Stretched Cluster' license should be applied to the VxRail vSAN Cluster before executing stretch.
-
The following data is required
-
ID of the cluster
-
For each host in the second availability zone which needs to be used for the stretch operation
-
IP Address of the host
-
Hostname (fqdn) of the host
-
SSH Username
-
SSH Password
-
-
For the witness VM
-
vSAN IP
-
IP address or the fqdn
-
If the witness is managed in vCenter by the fqdn, the the same needs to be provided, else the IP address.
-
-
vSAN subnet cidr
-
-
For each availability zone
-
vSAN Gateway IP
-
vSAN subnet cidr
-
-
Secondary availability zone vLAN ID
-
-
The cluster should not be stretched and the id provided should be valid.
-
You must have a valid ESXi license specified with adequate sockets available for the host to be added.
-
Ensure that the given host should be in active state.
-
Underlying physical network should have proper MTUs and vSAN/vMotion connectivity between availability zones and the witness.
Steps
-
Validate the input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterStretchSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
},
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"secondaryAzOverlayVlanId" : 0
}
}'
HTTP Request
POST /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations HTTP/1.1
Content-Type: application/json
Content-Length: 608
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterStretchSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
},
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"secondaryAzOverlayVlanId" : 0
}
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/e726da5c-42bd-47b1-a4f1-d288bde2b036
Content-Type: application/json
Content-Length: 145
{
"id" : "e726da5c-42bd-47b1-a4f1-d288bde2b036",
"description" : "Stretch Cluster Validation Workflow",
"executionStatus" : "IN_PROGRESS"
}
-
If the "executionStatus" is "IN_PROGRESS", the spec validation task is still in progress.
-
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".
NoteMake 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/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterStretchSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
},
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"secondaryAzOverlayVlanId" : 0
}
}'
HTTP Request
PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 608
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterStretchSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
},
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"secondaryAzOverlayVlanId" : 0
}
}
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.
-
Track the task status using the "id" from the previous response.
-
If the "status" is "IN_PROGRESS", the task is still in progress.
-
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.9.11. Expand a Stretched Cluster
The expansion workflow on a VxRail stretched cluster adds new hosts from a different availability zone to VCF. The hosts that are part of the expansion are already a part of the VxRail cluster.You can import multiple hosts at a time to a cluster.
Prerequisites
-
Hosts in the second availability zone being used for expansion should not already be a part of SDDC and should be added to the given VxRail cluster through the VxRail cluster expansion flow in vCenter. For more information to expand a VxRail cluster, contact Dell EMC Support. Please refer to the 'Cluster Spanning for VMware Cloud Foundation on VxRail' section in the 'VMware Cloud Foundation Administration Guide' for more information on expanding clusters that need cluster spanning.
-
The Witness VM is not managed by SDDC and should be added to the datacenter corresponding to the cluster provided. Please refer to the 'Deploying a vSAN Witness Appliance' section in the 'VMware Cloud Foundation Administration Guide'.
-
The vMotion, vSAN, and VXLAN networks require L3 routing between the availability zones. vSAN networks must also have L3 routing to the vSAN network of the witness host. Please refer to the 'Prerequisites for Stretching a Cluster' section in the 'VMware Cloud Foundation Administration Guide'.
-
The following data is required
-
ID of the cluster
-
For each host in the second availability zone which needs to be used for the expansion operation
-
IP Address of the host
-
Hostname (fqdn) of the host
-
SSH Username
-
SSH Password
-
Name of the availability zone which the new host belongs to
-
The availability zone name can be fetched from the vCenter
-
-
-
For the witness VM
-
vSAN IP
-
IP address or the fqdn
-
If the witness is managed in vCenter by the fqdn, the the same needs to be provided, else the IP address.
-
-
vSAN subnet cidr
-
-
For each availability zone
-
vSAN Gateway IP
-
vSAN subnet cidr
-
-
-
The cluster should be stretched and the id provided should be valid.
-
You must have a valid ESXi license specified with adequate sockets available for the host to be added.
-
Ensure that the given host should be in active state.
-
Underlying physical network should have proper MTUs and vSAN/vMotion connectivity between availability zones and the witness.
Steps
-
Validate the input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX",
"azName" : "azName"
} ],
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
}
}
}'
HTTP Request
POST /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations HTTP/1.1
Content-Type: application/json
Content-Length: 601
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX",
"azName" : "azName"
} ],
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
}
}
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations/18acdf8d-22cd-4e79-b43f-f2458687c20b
Content-Type: application/json
Content-Length: 142
{
"id" : "18acdf8d-22cd-4e79-b43f-f2458687c20b",
"description" : "Validate Expand Cluster Workflow",
"executionStatus" : "IN_PROGRESS"
}
-
If the "executionStatus" is "IN_PROGRESS", the spec validation task is still in progress.
-
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".
NoteMake 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/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX",
"azName" : "azName"
} ],
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
}
}
}'
HTTP Request
PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 601
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"clusterExpansionSpec" : {
"hostSpecs" : [ {
"licenseKey" : "XX0XX-XX0XX-XX0XX-XX0XX-XX0XX",
"ipAddress" : "10.0.0.104",
"hostName" : "sfo-w01-esx04",
"username" : "root",
"password" : "XXXX-XXXX",
"azName" : "azName"
} ],
"vsanNetworkSpecs" : [ {
"vsanGatewayIP" : "10.0.8.1",
"vsanCidr" : "10.0.8.0/24"
}, {
"vsanGatewayIP" : "10.0.12.1",
"vsanCidr" : "10.0.12.0/24"
} ],
"witnessSpec" : {
"vsanIp" : "10.0.4.88",
"fqdn" : "witness-vsan.sfo.rainpole.io",
"vsanCidr" : "10.0.4.0/24"
}
}
}
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.
-
Track the task status using the "id" from the previous response.
-
If the "status" is "IN_PROGRESS", the task is still in progress.
-
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.9.12. Delete a Cluster
|
Warning
|
Datastores on the ESXi hosts in the cluster that will be deleted are destroyed. |
|
Note
|
You cannot delete the last cluster in a domain. Instead, the domain can be deleted. A cluster cannot be deleted if it has remote vSAN datastores configured. If so, unmount the remote vSAN datastores from vCenter and then retry cluster deletion. Please refer to the 'VMware Cloud Foundation On Dell EMC VxRail Administration Guide' for more details. |
Prerequisites
-
The following data is required
-
ID of the cluster to be deleted
-
-
Ensure that a cluster with the given ID exists.
-
The cluster has been marked for deletion.
-
Migrate or backup the VMs and data on the data store associated with the cluster to another location.
Steps
-
Initialize the deletion.
|
Warning
|
It is not possible to delete a cluster without having marked it for deletion. This 2-step deletion ensures that a cluster is not deleted accidentally. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"markForDeletion" : true
}'
HTTP Request
PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 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
-
Trigger the deletion.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X DELETE \
-H 'Accept-Language: de' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Accept-Language: de
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/f2a24fec-8027-47e6-bdce-a5f0d7ff8a35
Content-Length: 160
{
"id" : "f2a24fec-8027-47e6-bdce-a5f0d7ff8a35",
"name" : "Remove Cluster",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:01:41.551Z"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.10. AVNs
2.10.1. Validate AVN Creation
-
Validating the Application virtual networks (AVNs) specification before creation.
-
AVNs are used in deploying vRealize vRealize Suite components.
-
AVNs are backed by overlay segments using the encapsulation protocol of NSX-T.
-
AVNs use a single IP network address space, to span across data centers.
Prerequisites
The following data is required for the Validate AVN Creation Spec:
-
TODO
|
Tip
|
Refer to: AvnsCreationSpec. |
Steps
-
Validate the input specification using Validate AVN Creation Spec.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/avns/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterId" : "52309268-2a1f-4c2c-b8ea-3dd78b6d5677",
"avns" : [ {
"name" : "sfo-m01-seg01",
"regionType" : "REGION_A",
"subnet" : "192.168.20.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.20.1",
"mtu" : 9000,
"routerName" : "sfo-m01-seg01-t0-gw01"
}, {
"name" : "xreg-m01-seg01",
"regionType" : "X_REGION",
"subnet" : "192.168.30.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.30.1",
"mtu" : 9000,
"routerName" : "xreg-m01-seg01-t0-gw01"
} ]
}'
HTTP Request
POST /v1/avns/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 535
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterId" : "52309268-2a1f-4c2c-b8ea-3dd78b6d5677",
"avns" : [ {
"name" : "sfo-m01-seg01",
"regionType" : "REGION_A",
"subnet" : "192.168.20.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.20.1",
"mtu" : 9000,
"routerName" : "sfo-m01-seg01-t0-gw01"
}, {
"name" : "xreg-m01-seg01",
"regionType" : "X_REGION",
"subnet" : "192.168.30.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.30.1",
"mtu" : 9000,
"routerName" : "xreg-m01-seg01-t0-gw01"
} ]
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 235
{
"id" : "69650333-5295-4f8e-8f7a-78ccb706226b",
"executionStatus" : "COMPLETED",
"resultStatus" : "SUCCEEDED",
"validationChecks" : [ {
"description" : "AVNsCreationSpecValidation",
"resultStatus" : "SUCCEEDED"
} ]
}
2.10.2. Create AVN
-
Creating Application virtual networks (AVNs).
-
AVNs are used in deploying vRealize vRealize Suite components.
-
AVNs are backed by overlay segments using the encapsulation protocol of NSX-T.
-
AVNs use a single IP network address space, to span across data centers.
Prerequisites
The following data is required for the Create AVNs:
-
TODO
|
Tip
|
Refer to: AvnsCreationSpec. |
Steps
-
Invoke the Create AVNs. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/avns' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterId" : "52309268-2a1f-4c2c-b8ea-3dd78b6d5677",
"avns" : [ {
"name" : "sfo-m01-seg01",
"regionType" : "REGION_A",
"subnet" : "192.168.20.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.20.1",
"mtu" : 9000,
"routerName" : "sfo-m01-seg01-t0-gw01"
}, {
"name" : "xreg-m01-seg01",
"regionType" : "X_REGION",
"subnet" : "192.168.30.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.30.1",
"mtu" : 9000,
"routerName" : "xreg-m01-seg01-t0-gw01"
} ]
}'
HTTP Request
POST /v1/avns HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 535
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterId" : "52309268-2a1f-4c2c-b8ea-3dd78b6d5677",
"avns" : [ {
"name" : "sfo-m01-seg01",
"regionType" : "REGION_A",
"subnet" : "192.168.20.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.20.1",
"mtu" : 9000,
"routerName" : "sfo-m01-seg01-t0-gw01"
}, {
"name" : "xreg-m01-seg01",
"regionType" : "X_REGION",
"subnet" : "192.168.30.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.30.1",
"mtu" : 9000,
"routerName" : "xreg-m01-seg01-t0-gw01"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/9227e7d9-8401-44de-9b80-a7ef169faf5b
Content-Length: 209
{
"id" : "9227e7d9-8401-44de-9b80-a7ef169faf5b",
"name" : "Deploying Overlay AVNs for default cluster of management domain",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:09:24.094Z"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.10.3. Get the AVNs
This API is used to fetch all configured AVNs
Prerequisites
None
Steps
-
Invoke the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/avns' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/avns HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 312
[ {
"id" : "sfo-m01-seg01",
"name" : "sfo-m01-seg01",
"regionType" : "REGION_A",
"subnet" : "192.168.20.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.20.1",
"mtu" : 9000,
"portGroupName" : "sfo-m01-seg01-pg",
"domainName" : "rainpole.io",
"routerName" : "sfo-m01-seg01-t0-gw01"
} ]
2.10.4. Get the AVNs by RegionType
This API is used to fetch all configured AVNs for a given region type
Prerequisites
-
RegionType of the AVN
Steps
-
Invoke the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/avns?regionType=X_REGION' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/avns?regionType=X_REGION HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 316
[ {
"id" : "xreg-m01-seg01",
"name" : "xreg-m01-seg01",
"regionType" : "X_REGION",
"subnet" : "192.168.30.0",
"subnetMask" : "255.255.255.0",
"gateway" : "192.168.30.1",
"mtu" : 9000,
"portGroupName" : "xreg-m01-seg01-pg",
"domainName" : "rainpole.io",
"routerName" : "xreg-m01-seg01-t0-gw01"
} ]
2.11. vRealize Suite Lifecycle Manager
2.11.1. vRealize Suite Lifecycle Manager Deployment
To deploy and manage the vRealize Suite products after the initial greenfield deploy of VMware Cloud Foundation, you must first deploy vRealize Suite Lifecycle Manager. To guarantee the success of the vRealize Suite Lifecycle Manager deployment operation, you should pre-validate the deployment input.
Prerequisites
-
The following data is required:
-
Application Virtual Networks are configured
-
Unique vRealize Suite Lifecycle Manager hostname and corresponding IP address from the X-Region Application Virtual Network
-
vRealize Suite Lifecycle Manager API and root passwords
-
Free IP address from the X-Region Application Virtual Network for the Standalone Tier 1 router
-
-
Additional prerequisites:
-
The vRealize Suite Lifecycle Manager bundle needs to be downloaded and applied on the SDDC Manager
-
Application Virtual Network should have connectivity to the management VLAN
-
|
Note
|
vRealize Suite Lifecycle Manager deployment is not available if vRealize Suite Lifecycle Manager is successfully deployed as only one instance of it is allowed in the system. In this case, calling the API will produce an error and the user will be provided with information about the allowed HTTP methods for the given endpoint. This information can be found in the "allow" field from the response headers. |
Steps
-
Assemble the vRealize Suite Lifecycle Manager deployment input specification.
|
Tip
|
Refer to VrslcmDeploymentSpec |
-
Trigger the vRealize Suite Lifecycle Manager deployment input specification validations. For help using the vRealize Suite Lifecycle Manager validation API refer to: Get the status of the validations for vRealize Lifecycle Manager deployment
|
Warning
|
The triggered validations return a response containing a validation report ID. With that ID, poll the vRealize Suite Lifecycle Manager validations API. While the validations are running, the "executionStatus" is "IN_PROGRESS". You should poll the API until the "executionStatus" is "COMPLETED". |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vrslcms/validations/77c17ee9-7fa6-455f-ace6-602e43c76887' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/vrslcms/validations/77c17ee9-7fa6-455f-ace6-602e43c76887 HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 170
{
"id" : "9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c",
"description" : "Validating vRealize Suite Lifecycle Manager input parameters",
"executionStatus" : "IN_PROGRESS"
}
-
Once the validations are completed, you can get the overall result of the validations and a detailed list with all checks that have been done and the corresponding status of each check.
-
In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".
-
In case of only warnings in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "FAILED_WITH_WARNINGS".
-
In case of errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "FAILED".
-
|
Tip
|
The validation checks have two severity levels - warning and error. If a failed validation check is marked as an error, the issue must be resolved before proceeding with the deployment. If the issue is marked as a warning, you are advised to look at it and do the best to fix it. You could ignore it and proceed on your own risk without fixing it, but this might affect the deployment and make it fail at a later stage. NOTE: Make changes to the input specification and re-validate using a new API invocation |
-
Once there are no errors and warnings in the validation response, you can proceed with the vRealize Suite Lifecycle Manager deployment. Although the warnings are not forced to be resolved, you should give the best to resolve the uncovered issues by the validations.
-
Trigger the vRealize Suite Lifecycle Manager deployment. This will start a long-running task whose details can be obtained form the HTTP response.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vrslcms' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"fqdn" : "vrslcm.vrack.vsphere.local",
"sshPassword" : "VMware123!",
"apiPassword" : "VMware123!"
}'
HTTP Request
POST /v1/vrslcms HTTP/1.1
Content-Type: application/json
Content-Length: 107
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"fqdn" : "vrslcm.vrack.vsphere.local",
"sshPassword" : "VMware123!",
"apiPassword" : "VMware123!"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c
Allow: GET
Content-Type: application/json
Content-Length: 131
{
"id" : "9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
-
Track the task status using the "id" from the previous response. The GET URL is set in the header response and can be used directly. Refer to: Get a Task.
-
If the "status" is "IN_PROGRESS", the task is still in progress.
-
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. |
-
If the workflow fails after trying to restart the task, perform the vRealize Suite Lifecycle Manager rollback
|
Tip
|
Refer to: vRealize Suite Lifecycle Manager Rollback. |
2.11.2. vRealize Suite Lifecycle Manager Rollback
When vRealize Suite Lifecycle Manager deployment fails, you can perform rollback to get the environment in a clean state and start a fresh vRealize Suite Lifecycle Manager deployment.
Prerequisites
-
Failed vRealize Suite Lifecycle Manager deployment operation.
|
Note
|
vRealize Suite Lifecycle Manager rollback is not available if vRealize Suite Lifecycle Manager is successfully deployed. In this case, calling the API will produce an error and the user will be provided with information about the allowed HTTP methods for the given endpoint. This information can be found in the "allow" field from the response headers. |
Steps
-
Trigger the vRealize Suite Lifecycle Manager rollback.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vrslcm' -i -X DELETE \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/vrslcm HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c
Content-Type: application/json
Content-Length: 131
{
"id" : "9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
-
Track the task status using the "id" from the previous response. The GET URL is set in the header response and can be used directly.
TipRefer to: Get a Task. -
If the "status" is "IN_PROGRESS", the task is still in progress.
-
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.12. Workspace ONE Access for vRealize
2.12.1. Workspace ONE Access for vRealize
In order to have Workspace ONE Access you need to first deploy vRealize Suite Lifecycle Manager. After vRealize Suite Lifecycle Manager is deployed please refer to its public API documentation to deploy Workspace ONE Access.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager, Get all existing Workspace ONE Access instances |
Steps
-
Deploy vRealize Suite Lifecycle Manager.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
2.13. vRealize Automation
2.13.1. vRealize Automation
In order to have vRealize Automation you need to first deploy vRealize Suite Lifecycle Manager and then Workspace ONE Access. After vRealize Suite Lifecycle Manager is deployed please refer to its public API documentation to deploy Workspace ONE Access and vRealize Automation.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager, Get all existing vRealize Automation instances |
Steps
-
Deploy vRealize Suite Lifecycle Manager.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating vRealize Automation environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
-
Refer to vRealize Automation Public API documentation for connection vRealize Automation to workload domains.
2.14. vRealize Operations
2.14.1. vRealize Operations Manager
In order to have vRealize Operations Manager you need to first deploy vRealize Suite Lifecycle Manager and then Workspace ONE Access. After vRealize Suite Lifecycle Manager is deployed please refer to its public API documentation to deploy Workspace ONE Access and vRealize Operations Manager.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager, Get all existing vRealize Operations instances |
Steps
-
Deploy vRealize Suite Lifecycle Manager.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating vRealize Operations Manager environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
-
vRealize Operations Manager is being automatically connected to the management domain after deployment.
-
Refer to Connect vRealize Operations to workload domain for connecting vRealize Operations Manager to workload domains.
2.14.2. Connect vRealize Operations to workload domain
You can connect vRealize Operations product deployment in Cloud Foundation to your workload domains.
Prerequisites
-
Before you can connect the management domain or workload domains to vRealize Operations, it must be deployed and in "ACTIVE" state.
|
Tip
|
For more information refer to Get all existing vRealize Operations instances |
Steps
-
Assemble the vRealize Operations domain specification.
|
Tip
|
Refer to DomainIntegration |
-
Trigger the vRealize Operations domain connection.
|
Tip
|
For help using the vRealize Log Insight domain connection API refer to: Connect/disconnect workload domains with vRealize Operations |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vrops/domains' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"domainId" : "f527bacd-fbca-47c6-a7fd-98ce4a48834f",
"status" : "ENABLED"
}'
HTTP Request
PUT /v1/vrops/domains HTTP/1.1
Content-Type: application/json
Content-Length: 81
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"domainId" : "f527bacd-fbca-47c6-a7fd-98ce4a48834f",
"status" : "ENABLED"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c
Content-Type: application/json
Content-Length: 131
{
"id" : "9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
|
Note
|
This operation is a long-running task which details can be obtained form the HTTP response. |
-
Track the task status using the "id" from the previous response.
TipRefer to: Get a Task. -
If the "status" is "IN_PROGRESS", the task is still in progress.
-
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", the task can be re-executed.
-
|
Tip
|
For task re-execution refer to: Retry a Task. |
|
Note
|
To see the domain connection status of vRealize Operations refer to: Gets vRealize Operations integration status for workload domains |
2.15. vRealize Log Insight
2.15.1. vRealize Log Insight
In order to have vRealize Log Insight you need to first deploy vRealize Suite Lifecycle Manager and then Workspace ONE Access. After vRealize Suite Lifecycle Manager is deployed please refer to its public API documentation to deploy Workspace ONE Access and vRealize Log Insight.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager, Get all existing vRealize Log Insight instances |
Steps
-
Deploy vRealize Suite Lifecycle Manager.
|
Tip
|
Refer to Deploy vRealize Suite Lifecycle Manager |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
-
Refer to vRealize Suite Lifecycle Manager Public API documentation for creating vRealize Log Insight environment.
|
Tip
|
Refer to vRSLCM create environment API guide |
-
vRealize Log Insight is being automatically connected to the management domain after deployment.
-
Refer to Connect vRealize Log Insight to workload domains for connection vRealize Log Insight to workload domains.
2.15.2. Connect vRealize Log Insight to workload domains
You can connect vRealize Log Insight product deployment in Cloud Foundation to your workload domains.
Prerequisites
-
Verify that the vRealize Log Insight cluster is online and operational.
|
Tip
|
Refer to Get all existing vRealize Log Insight instances |
Steps
-
Assemble the vRealize Log Insight domain specification.
|
Tip
|
Refer to Vrli |
-
Trigger the vRealize Log Insight domain connection.
|
Tip
|
For help using the vRealize Log Insight domain connection API refer to: Connects vRealize Log Insight with domain |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vrli/domains' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"domainId" : "1fa1a121-1408-4d98-8b7e-ac93fb6c0be8",
"status" : "ENABLED"
}'
HTTP Request
PUT /v1/vrli/domains HTTP/1.1
Content-Type: application/json
Content-Length: 81
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"domainId" : "1fa1a121-1408-4d98-8b7e-ac93fb6c0be8",
"status" : "ENABLED"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c
Allow: PUT
Content-Type: application/json
Content-Length: 130
{
"id" : "9b56b98b-ba62-42cb-9ac1-f65e2d20ff9c",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
|
Note
|
This operation is a long-running task which details can be obtained form the HTTP response. |
-
Track the task status using the "id" from the previous response.
TipRefer to: Get a Task. -
If the "status" is "IN_PROGRESS", the task is still in progress.
-
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", the task can be re-executed.
-
|
Tip
|
For task re-execution refer to: Retry a Task. |
2.16. Backup and Restore
Back up and restore solution is provided to backup SDDC manager and configure NSX manager backup.
2.16.1. Configure backup of SDDC manager and NSX manager
It is essential to review the basic principles in a file-based solution for backup. In such a solution, the state of a product is periodically exported to a file that is stored in a domain different than the one where the product is running. If the product needs to be restored, the OVA is re-deployed and a selected backup-file is used to restore the state.
NSX Manager files are backed up by default in the SDDC Manager VM which also has to be backed up. You can configure an external SFTP server as a backup location which is the recommended solution. NSX Manager is backed up every 1 hour
This section provides the steps to configure NSX backup location and the SDDC Manager backup location to an external SFTP server along with encryption configuration for both SDDC Manager and NSX Manager backup.
Backup of SDDC manager can be scheduled by setting the schedule for SDDC Manager in the configuration. The state change driven backups are enabled by default with SDDC Manager scheduled backups and can not be enabled when the scheduled backups are disabled. User must disable state change driven backups when disabling scheduled backups. User can also set a backup retention policy for SDDC Manager backups. When the scheduled backups of SDDC Manager are enabled, the below default retention policy is set for SDDC Manager backups.
{"numberOfMostRecentBackups" : 10, "numberOfDaysOfHourlyBackups" : 2, "numberOfDaysOfDailyBackups" : 15}
SDDC Manager’s backup retention policy is designed to retain as many latest backups as possible and also to retain optimal number of backups for a long period of time. Using this policy, user can retain a given number of most recent backups, and hourly backups(only the latest backup is retained in an hour) for a given number of days, and daily backups(only the latest backup is retained per day) for a given number of days. For example, as per the above default policy, the very recent 10 backups will be retained, and on top of that hourly backups will be retained for last 2 days, and on top of that daily backups will be retained for last 15 days.
Prerequisites
-
Encryption
-
Twelve or more characters.
-
At least one upper-case letter.
-
At least two digits.
-
At least one special character.
-
|
Note
|
SDDC Manager does not store previously-used passphrases. You must store the passphrase in a secure location separate from the backup files and from the Cloud Foundation environment you are protecting. |
-
FTP server details to save the backup file :
-
IP or FQDN of the server
-
port
-
protocol, which is SFTP
-
username
-
password
-
ssh fingerprint
-
directory path to save the backup file
-
-
SDDC manager schedule details :
-
Frequency of the schedule
-
Schedule details
-
-
The user credentials should have the role of an ADMIN
|
Tip
|
To get fingerprint execute the below command |
ssh-keygen -lf <(ssh-keyscan -t ssh-rsa -p <port-number> <server-IP-address> 2>/dev/null)
|
Note
|
Fingerprint should be SHA-256 RSA key. |
Steps
-
Trigger the task using the valid input specification.
|
Note
|
To trigger the API, the user should have a role of an ADMIN in VCF. |
|
Note
|
Resource Type allowed for scheduling backup is SDDC_MANAGER. |
|
Note
|
Only absolute path is accepted for directory path |
|
Note
|
Scheduling frequency WEEKLY takes the fields daysOfTheWeek, hoursOfTheDay and minuteOfTheHour. Scheduling frequency HOURLY takes the field minuteOfTheHour. |
|
Tip
|
Refer to Security section to set the role as ADMIN for the user. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/backup-configuration' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"encryption" : {
"passphrase" : "VMwareBackup@1"
},
"backupLocations" : [ {
"server" : "10.92.33.23",
"port" : 22,
"protocol" : "SFTP",
"username" : "backup",
"password" : "FTPServer@1",
"directoryPath" : "/vmware/backup",
"sshFingerprint" : "SHA256:w2NgXhG2XXXXXXXX"
} ],
"backupSchedules" : [ {
"resourceType" : "SDDC_MANAGER",
"takeScheduledBackups" : true,
"frequency" : "WEEKLY",
"daysOfWeek" : [ "SUNDAY", "THURSDAY" ],
"hourOfDay" : 12,
"minuteOfHour" : 34,
"takeBackupOnStateChange" : true,
"retentionPolicy" : {
"numberOfMostRecentBackups" : 15,
"numberOfDaysOfHourlyBackups" : 10,
"numberOfDaysOfDailyBackups" : 20
}
} ]
}'
HTTP Request
PUT /v1/system/backup-configuration HTTP/1.1
Content-Type: application/json
Content-Length: 732
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"encryption" : {
"passphrase" : "VMwareBackup@1"
},
"backupLocations" : [ {
"server" : "10.92.33.23",
"port" : 22,
"protocol" : "SFTP",
"username" : "backup",
"password" : "FTPServer@1",
"directoryPath" : "/vmware/backup",
"sshFingerprint" : "SHA256:w2NgXhG2XXXXXXXX"
} ],
"backupSchedules" : [ {
"resourceType" : "SDDC_MANAGER",
"takeScheduledBackups" : true,
"frequency" : "WEEKLY",
"daysOfWeek" : [ "SUNDAY", "THURSDAY" ],
"hourOfDay" : 12,
"minuteOfHour" : 34,
"takeBackupOnStateChange" : true,
"retentionPolicy" : {
"numberOfMostRecentBackups" : 15,
"numberOfDaysOfHourlyBackups" : 10,
"numberOfDaysOfDailyBackups" : 20
}
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/eaa2f41b-846d-4cd7-8203-c38c71b2ea47
Content-Type: application/json
Content-Length: 210
{
"id" : "eaa2f41b-846d-4cd7-8203-c38c71b2ea47",
"name" : "Configure backup on VCF Components and register backup locations",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.
-
|
Note
|
The SFTP server credentials are saved before configuring any NSX managers. In case configuring the NSX manager failed, an attempt is still made to configure as many NSX managers as possible before failing the task. |
|
Tip
|
Refer to: Retry a Task. |
2.16.2. Edit the Backup Configuration
Prerequisites
-
The configuration which has to be edited (Backup location or Encryption or Backup schedules or all).
-
User credentials with role as an ADMIN in VCF.
|
Note
|
In case you are editing the passphrase, you must store the passphrase in a secure location separate from the backup files and from the Cloud Foundation environment. The encryption passphrase is mapped to the backup file. Editing the passphrase will not update the configured passphrase for previously backed up file. |
|
Note
|
In case you are editing the backup location, previously collected NSX backups must be manually migrated to the new location. All the parameters of backup location have to be given as input while editing the backup location. |
|
Note
|
Editing backup configuration updates all the NSX manager’s backup configuration. |
Steps
-
Invoke the API
|
Tip
|
To get the current backup configuration Refer to: Get the Backup Configuration |
-
The example shown is to edit only the backup location whereas encryption and backup schedule is unchanged.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/backup-configuration' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"backupLocations" : [ {
"server" : "10.92.33.24",
"port" : 22,
"protocol" : "SFTP",
"username" : "backup",
"password" : "FTPServer@2",
"directoryPath" : "/vmware/backup",
"sshFingerprint" : "SHA256:w2NgXhG2XXXXXXXX"
} ]
}'
HTTP Request
PATCH /v1/system/backup-configuration HTTP/1.1
Content-Type: application/json
Content-Length: 255
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"backupLocations" : [ {
"server" : "10.92.33.24",
"port" : 22,
"protocol" : "SFTP",
"username" : "backup",
"password" : "FTPServer@2",
"directoryPath" : "/vmware/backup",
"sshFingerprint" : "SHA256:w2NgXhG2XXXXXXXX"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/be576da8-c606-4ecc-9f54-40688d46c576
Content-Type: application/json
Content-Length: 210
{
"id" : "be576da8-c606-4ecc-9f54-40688d46c576",
"name" : "Configure backup on VCF Components and register backup locations",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
-
The example shown is to edit only the backup schedule whereas backup location and encryption is unchanged.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/backup-configuration' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"backupSchedules" : [ {
"resourceType" : "SDDC_MANAGER",
"takeScheduledBackups" : true,
"frequency" : "WEEKLY",
"daysOfWeek" : [ "MONDAY" ],
"hourOfDay" : 12,
"minuteOfHour" : 23,
"takeBackupOnStateChange" : true,
"retentionPolicy" : {
"numberOfMostRecentBackups" : 15,
"numberOfDaysOfHourlyBackups" : 10,
"numberOfDaysOfDailyBackups" : 20
}
} ]
}'
HTTP Request
PATCH /v1/system/backup-configuration HTTP/1.1
Content-Type: application/json
Content-Length: 407
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"backupSchedules" : [ {
"resourceType" : "SDDC_MANAGER",
"takeScheduledBackups" : true,
"frequency" : "WEEKLY",
"daysOfWeek" : [ "MONDAY" ],
"hourOfDay" : 12,
"minuteOfHour" : 23,
"takeBackupOnStateChange" : true,
"retentionPolicy" : {
"numberOfMostRecentBackups" : 15,
"numberOfDaysOfHourlyBackups" : 10,
"numberOfDaysOfDailyBackups" : 20
}
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/92d85df1-c3c2-4fd6-9f36-299b90a06cd5
Content-Type: application/json
Content-Length: 209
{
"id" : "92d85df1-c3c2-4fd6-9f36-299b90a06cd5",
"name" : "Configure backup on VCF Components and register backup schedule",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.16.3. Get the Backup Configuration
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/backup-configuration' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/backup-configuration HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 603
{
"backupLocations" : [ {
"server" : "10.92.33.24",
"port" : 22,
"protocol" : "SFTP",
"username" : "backup",
"directoryPath" : "/vmware/backup"
} ],
"backupSchedules" : [ {
"resourceType" : "SDDC_MANAGER",
"takeScheduledBackups" : true,
"frequency" : "WEEKLY",
"daysOfWeek" : [ "MONDAY" ],
"hourOfDay" : 12,
"minuteOfHour" : 23,
"takeBackupOnStateChange" : true,
"retentionPolicy" : {
"numberOfMostRecentBackups" : 15,
"numberOfDaysOfHourlyBackups" : 10,
"numberOfDaysOfDailyBackups" : 20
}
} ],
"isConfigured" : true
}
|
Note
|
"isConfigured" notifies if the backup has been configured. |
|
Note
|
Encryption details which was configured is not returned due to security reasons. |
2.16.4. Initiate Backup of SDDC Manager
Back up the SDDC Manager VM regularly to avoid downtime and data loss in case of a system failure. If the SDDC Manager VM does fail, you can restore VM to the last backup
In case you need to restore the SDDC Manager VM, you select the backup file to restore and download the appropriate OVA file. You can deploy this OVA either through vCenter Server or the OVF tool. You then load the state on the newly deployed SDDC Manager VM.
Prerequisites
-
The following action needs to be performed
-
Backup must be configured
-
-
Computer that runs the backup automation script (or where you manually run the APIs). This computer may also be used to coordinate and support a restore operation. It can also host the FTP server required to protect the NSX Manager instances.
-
Reliable and secure storage volume on which the backup files are stored. The computer and the storage need to be in a different fault domain.
|
Note
|
Only resourceType:SDDC_MANAGER is supported currently. |
|
Tip
|
Refer to: Configure backup of SDDC manager and NSX manager |
Steps
-
Trigger the task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/backups/tasks' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"elements" : [ {
"resourceType" : "SDDC_MANAGER"
} ]
}'
HTTP Request
POST /v1/backups/tasks HTTP/1.1
Content-Type: application/json
Content-Length: 64
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"elements" : [ {
"resourceType" : "SDDC_MANAGER"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: 3b48ffc5-fafd-46e5-88ee-ce3ccc4d7a93
Content-Type: application/json
Content-Length: 252
{
"id" : "3b48ffc5-fafd-46e5-88ee-ce3ccc4d7a93",
"name" : "SDDC Manager Backup Operation",
"status" : "IN_PROGRESS",
"resources" : [ {
"type" : "BACKUP",
"name" : "vcf-backup-sddc-manager-vrack-vsphere-local-2019-07-29-12-02-46"
} ]
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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.
-
-
The backup files are saved in the /nfs/vmware/vcf/nfs-mount/sddc-manager-backup directory on the SDDC Manager VM.
-
In this example, the full filename of the backup file will be vcf-backup-sddc-manager-vrack-vsphere-local-2019-07-29-12-02-46.tar.gz
|
Tip
|
To inspect the contents of a backup tar file, use the decrypt command described in Initiate Restore of SDDC Manager |
|
Note
|
Make sure to copy the backup file to a known location along with the corresponding passphrases. |
2.16.5. Initiate Restore of SDDC Manager
In case of a failure, you can restore SDDC Manager from a saved backup.
Prerequisites
-
Backup file name and location of the backup file
-
Encryption passphrase used to encrypt the backup file
|
Note
|
Only resourceType:SDDC_MANAGER is supported currently |
Steps
-
Power off the original SDDC Manager VM.
-
Rename the VM to something like sddc-manager-original using the management domain vCenter Server.
-
Identify the backup file to be used for the restore operation.
|
Tip
|
In most cases, you should select the most recently taken backup. |
-
The backup file contains sensitive data about your Cloud Foundation instance, including passwords in plain text. It is recommended you control access to the decrypted files and securely delete them when you are done with the restore operation.
-
Using a computer that has access to the secure secondary storage where the backup files are stored, navigate to the backup file and extract the contents of the encrypted tar file using the following command.
OPENSSL_FIPS=1 openssl enc -d -aes-256-cbc -md sha256 -in filename-of-selected-file | tar -xz
-
At the prompt, enter the passphrase that you configured before backing up SDDC Manager.
-
The extracted metadata.json file contains the networking details and fips enablement details required for new SDDC manager deployment in further steps.
-
In order to restore SDDC Manager, you need to deploy the SDDC Manager OVA.
-
The link to download the OVA is found in the metadata.json file in the backup file.
-
Download the SDDC Manager OVA from the link provided.
-
Deploy SDDC Manager VM from vCenter Server or with the OVF Tool either in fips or non fips mode as specified in the metadata.json.
-
Deploy SDDC Manager VM from vCenter server
-
Log in to the management domain vCenter Server using a web browser that is running on a system that has access to the downloaded SDDC Manager OVA.
-
In the vSphere Client, expand SDDC-Datacenter > SDDC-Cluster1.
-
Right-click on Mgmt-ResourcePool and select Deploy OVF Template.
-
The Deploy OVF Template wizard appears.
-
Use the local file option and choose the downloaded SDDC Manager OVA
-
Specify the VM name as sddc-manager.
-
Select the location of the SDDC Manager VM as SDDC-Datacenter > Management VMs and click Next.
-
Specify the compute resource destination. See the metadata.json file for the name of the pool and click Next.
-
Verify the template details and click Next.
-
Read the license terms and click the checkbox at the bottom of the page to accept the license agreements.
-
On the storage page, keep the vSAN datastore selection. The datastore name is in the metadata.json file and click Next.
-
On the networks page:
-
Do not change the default setting for Source Network.
-
In Destination Network, select the port group that is listed in the metadata.json file.
-
Do not change the default setting for IP allocation and IP protocol.
-
-
Click Next.
-
For the fields on the Customize template page, refer to the metadata.json file. Note the following:
-
Specify the backup user password from the security_password_vault.jsonfile.
-
For the root, vcf, and admin user accounts, you can re-use the same passwords from the original SDDC Manager deployment or assign new ones. For password considerations, refer to the About the Deployment Parameter Workbook section in the VMware Cloud Foundation Deployment Guide.
-
Select the fips mode if the fips_enabled flag is set to true in metadata.json
-
Specify the Hostname. See the metadata.json file for the hostname.
-
Leave the DNS and NTP fields empty
-
(Optional) Existing PSC Settings section.
-
Specify the Networking Properties(ip, netmask, and gateway) referring to the metadata.json file.
-
-
Click Next.
-
Review the OVF details and click Finish. The OVF deployment begins. You can view the details in the Tasks pane.
-
Power on the newly deployed SDDC Manager VM and wait for the vCenter Server UI to report its IP address has been assigned.
-
SSH in to the SDDC Manager and log in as the vcf user.
-
-
Deploy SDDC Manager VM with the OVF tool
-
Install the OVF tool on a system that has access to the SDDC Manager OVA that you downloaded.
-
Prerequisites
-
Download the OVF tool and install it on a system that has access to the SDDC Manager OVA that you downloaded
-
Retrieve the DNS name or IP address of a host from the management domain.
-
Log into the management domain vCenter Server
-
navigate to the management domain cluster
-
select an active host that is not reporting any vSAN errors
-
-
Retrieve the root password for the selected host. Search for the host’s DNS name in the security_password_vault.json, which displays the root password.
-
-
Run the following command with information from the metadata.json file.
For non-fips mode
ovftool --noSSLVerify --skipManifestCheck --powerOn --diskMode=thin --acceptAllEulas -- allowExtraConfig --ipProtocol=IPv4 --ipAllocationPolicy=fixedPolicy --datastore=datastoreName -- name=sddc-manager --X:injectOvfEnv --X:waitForIp --prop:ROOT_PASSWORD=Password -- prop:VCF_PASSWORD=Password --prop:LOCAL_USER_PASSWORD=Password --prop:BACKUP_PASSWORD=Password --prop:vami.gateway.SDDC-Manager=gatewayIP --prop:vami.ip0.SDDC-Manager=SDDC_Manager_IP -- prop:vami.netmask0.SDDC-Manager=networkMask --prop:vami.hostname=hostName -- prop:vami.searchpath.SDDC-Manager=searchPath --prop:vami.domain.SDDC-Manager=domain -- network=portGroupName --prop:guestinfo.ntp="ntp" --prop:vami.DNS.SDDC-Manager="dns" --X:logFile=./ovftool.log --X:logLevel=verbose OVA_filename vi://root:password_for_selected_host>@host_DNS_name_or_ IP
For the fips mode
ovftool --noSSLVerify --skipManifestCheck --powerOn --diskMode=thin --acceptAllEulas -- allowExtraConfig --ipProtocol=IPv4 --ipAllocationPolicy=fixedPolicy --datastore=datastoreName -- name=sddc-manager --X:injectOvfEnv --X:waitForIp --prop:ROOT_PASSWORD=Password -- prop:VCF_PASSWORD=Password --prop:LOCAL_USER_PASSWORD=Password --prop:FIPS_ENABLE=True --prop:BACKUP_PASSWORD=Password --prop:vami.gateway.SDDC-Manager=gatewayIP --prop:vami.ip0.SDDC-Manager=SDDC_Manager_IP -- prop:vami.netmask0.SDDC-Manager=networkMask --prop:vami.hostname=hostName -- prop:vami.searchpath.SDDC-Manager=searchPath --prop:vami.domain.SDDC-Manager=domain -- network=portGroupName --prop:guestinfo.ntp="ntp" --prop:vami.DNS.SDDC-Manager="dns" --X:logFile=./ovftool.log --X:logLevel=verbose OVA_filename vi://root:password_for_selected_host>@host_DNS_name_or_ IP
OUTPUT:
Opening OVA source: /mnt/iso/sddc-foundation-bundle-4.0.0.0-16156896/sddc_manager_ova/VCF-SDDC-Manager-Appliance-4.0.0.0-16156896_OVF10.ova The manifest does not validate Opening VI target: vi://[email protected]:443/ Deploying to VI: vi://[email protected]:443/ Transfer Completed Powering on VM: sddc-manager Task Completed Waiting for IP address... Received IP address: 10.0.0.4 Completed successfully
NoteRefer to attribute "fips_enabled" in metadata.json for the FIPS mode -
Navigate to the management domain vCenter Server.
-
Move the sddc-manager VM into the Management VM folder.
-
Move the sddc-manager VM into the Management Resource Pool. The name of this pool is available in the metadata.json file.
-
To confirm that SDDC Manager has been deployed correctly, ssh in to the VM as the vcf user.
-
-
-
Take a snapshot of the SDDC Manager VM.
-
Copy the encrypted backup file to the /tmp directory on the SDDC Manager VM.
-
Trigger the task using the valid input specification.
|
Note
|
This API follows the Token-Based Authentication scheme. To invoke this API, a token is required. Generate token using the local account by providing the correct password of local user that was supplied during the deployment of SDDC Manager VM with the OVF tool. Note that the username of local account is admin@local Here is the example command on how to generate token using local account: curl -d '{"username" : "admin@local", "password" : "Password"}' -H "Content-Type: application/json" -X POST http://sfo-vcf01.rainpole.io/v1/tokens |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/restores/tasks' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"elements" : [ {
"resourceType" : "SDDC_MANAGER"
} ],
"backupFile" : "/tmp/backup.tar.gz",
"encryption" : {
"passphrase" : "VMwareBackup@1"
}
}'
HTTP Request
POST /v1/restores/tasks HTTP/1.1
Content-Type: application/json
Content-Length: 163
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"elements" : [ {
"resourceType" : "SDDC_MANAGER"
} ],
"backupFile" : "/tmp/backup.tar.gz",
"encryption" : {
"passphrase" : "VMwareBackup@1"
}
}
HTTP Response
HTTP/1.1 202 Accepted
Location: 56c7c235-9451-4f16-ba56-e1ad227b8e76
Content-Type: application/json
Content-Length: 79
{
"id" : "56c7c235-9451-4f16-ba56-e1ad227b8e76",
"status" : "IN_PROGRESS"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
|
Note
|
This API follows the Token-Based Authentication scheme. To invoke this API, a token is required. Generate token using the local account by providing the correct password of local user that was supplied during the deployment of SDDC Manager VM with the OVF tool. Note that the username of local account is admin@local Here is the example command on how to generate token using local account: curl -d '{"username" : "admin@local", "password" : "Password"}' -H "Content-Type: application/json" -X POST http://sfo-vcf01.rainpole.io/v1/tokens |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/restores/tasks/d14d42ea-3061-4874-a2ed-651253db37a3' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/restores/tasks/d14d42ea-3061-4874-a2ed-651253db37a3 HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2545
{
"id" : "875ca777-32af-4aed-8241-bfc58f1f9602",
"name" : "SDDC Manager Restore Operation",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:14:45.306Z",
"subTasks" : [ {
"name" : "ExtractSDDCManagerBackup",
"description" : "Decrypt and Extract Backup and Validate SDDC Manager for Restore operation",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:14:46.132Z",
"completionTimestamp" : "2020-05-26T17:14:51.712Z"
}, {
"name" : "StopSDDCManagerServices",
"description" : "Stop all VCF SDDC Manager Services",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:14:51.714Z",
"completionTimestamp" : "2020-05-26T17:15:23.950Z"
}, {
"name" : "RestoreSDDCManagerConfiguration",
"description" : "Restore SDDC Manager Configuration files",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:15:23.954Z",
"completionTimestamp" : "2020-05-26T17:15:24.638Z"
}, {
"name" : "RestoreSDDCManagerDatabase",
"description" : "Restore SDDC Manager Database",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:15:24.642Z",
"completionTimestamp" : "2020-05-26T17:16:11.931Z"
}, {
"name" : "StartSDDCManagerServices",
"description" : "Start and Validate all VCF SDDC Manager Services",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:16:11.940Z",
"completionTimestamp" : "2020-05-26T17:19:57.841Z"
}, {
"name" : "RestoreSDDCSystemConfiguration",
"description" : "Restore SDDC Manager System Configuration",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:19:57.846Z",
"completionTimestamp" : "2020-05-26T17:20:45.278Z"
}, {
"name" : "PostRestoreRemediation",
"description" : "Post Restore Remediation",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:20:45.475Z",
"completionTimestamp" : "2020-05-26T17:20:51.559Z"
}, {
"name" : "PostRestoreNfsRefresh",
"description" : "Refresh NFS post restore",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:20:51.563Z",
"completionTimestamp" : "2020-05-26T17:21:05.918Z"
}, {
"name" : "UnquiesceSystem",
"description" : "Unquiesce the system after Restore operation",
"status" : "SUCCESSFUL",
"creationTimestamp" : "2020-05-26T17:21:05.922Z",
"completionTimestamp" : "2020-05-26T17:21:06.013Z"
} ],
"errors" : [ ],
"resources" : [ ],
"resolutionStatus" : "UNRESOLVED",
"isCancellable" : false
}
-
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED" , perform the following steps to retry.
-
Copy the contents of /var/log/vmware/vcf/sddc-support/ to a filesystem that is external to SDDC Manager. This preserves the restore log file.
-
Revert the SDDC Manager VM to the snapshot taken in step 12.
-
Take a new snapshot.
-
Perform steps 13 - 16.
-
If this attempt fails, contact VSDDC ManagerMware Support.
-
-
Verify SDDC Manager VM operations after restore:
-
SSH in to the SDDC Manager as the vcf user.
-
Run the following command:
sudo /opt/vmware/sddc-support/sos --health-check
-
When prompted, enter the vcf user password.
-
A green status indicates that the health is normal, yellow provides a warning that attention might be required, and red indicates that the component needs immediate attention. Possible reasons for yellow or red status are that you used an SDDC Manager backup with unresolved workflows, you used a backup taken before a workflow was completed successfully, you restored other products in addition to SDDC Manager, or some components are not operational. Call VMware Support if you need help with resolving the yellow or red status
-
If the status was green,
-
Download the applicable install and upgrade bundles.
-
Download the upgrade bundles applicable to your environment.
-
-
2.17. Depot Settings
2.17.1. Get Depot Settings
Online:
-
Get Depot Settings is used to retrieve the existing My VMware and Dell EMC Support Accounts' information.
Offline:
-
Get Depot Settings returns account information.
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/depot' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/settings/depot HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 364
{
"vmwareAccount" : {
"username" : "acmeuser",
"password" : "acmepassword",
"status" : "DEPOT_CONNECTION_SUCCESSFUL",
"message" : "Depot Status: Success"
},
"dellEmcSupportAccount" : {
"username" : "vxrailUser",
"password" : "vxrailPassword",
"status" : "DEPOT_CONNECTION_SUCCESSFUL",
"message" : "Depot Status: Success"
}
}
2.17.2. Update Depot Settings
Online:
-
Update Depot Settings is used to update SDDC Manager with the My VMware and Dell EMC Support Account. This account is used for Downloading Upgrade/Install Bundles (Please refer to Update Bundle for Downloading).
Offline:
-
Use the Bundle Transfer Utility tool (Please refer to the VMware Cloud Foundation documentation for more information) to manually download the bundles from the depot on your local computer and then copy them to SDDC Manager. Once the bundles are available in the SDDC Manager. Use the Upload a Bundle API to upload it to SDDC Manager.
Prerequisites
The following data is required for updating My VMware Account information:
-
Username of My VMware Account.
-
Password of My VMware Account.
The following data is required for updating Dell EMC Support Account information:
-
Username of Dell EMC Support Account.
-
Password of Dell EMC Support Account.
|
Tip
|
Refer to: DepotSettings and DepotAccount. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/depot' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"vmwareAccount" : {
"username" : "acmeuser",
"password" : "acmepassword"
},
"dellEmcSupportAccount" : {
"username" : "dellEmcUser",
"password" : "dellEmcPassword"
}
}'
HTTP Request
PUT /v1/system/settings/depot HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 192
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"vmwareAccount" : {
"username" : "acmeuser",
"password" : "acmepassword"
},
"dellEmcSupportAccount" : {
"username" : "dellEmcUser",
"password" : "dellEmcPassword"
}
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 364
{
"vmwareAccount" : {
"username" : "acmeuser",
"password" : "acmepassword",
"status" : "DEPOT_CONNECTION_SUCCESSFUL",
"message" : "Depot Status: Success"
},
"dellEmcSupportAccount" : {
"username" : "vxrailUser",
"password" : "vxrailPassword",
"status" : "DEPOT_CONNECTION_SUCCESSFUL",
"message" : "Depot Status: Success"
}
}
2.18. Prechecks
2.18.1. Perform System Precheck
Precheck System is used to perform the required system level health checks and upgrade pre-checks for an upgrade to be successful. Make sure to run these checks before performing any upgrade.
|
Tip
|
Refer to: Get the Upgradables to query for the list of upgradables which can be used for performing Domain, Cluster level checks. |
Prerequisites
The following data is required:
-
Resource ID. Ex: Domain ID, Cluster ID.
-
Resource Type. Ex: DOMAIN, CLUSTER.
|
Tip
|
Refer to: PrecheckSpec and Resource. |
|
Note
|
Supported Resource Type’s are DOMAIN, CLUSTER. For Cluster level checks, the Cluster ID’s can be retrieved based on the Host’s that are available for upgrade, Refer to: Get the Hosts and Get the Clusters API’s. |
Steps
-
Invoke the API. This API returns a precheck task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/prechecks' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"resources" : [ {
"resourceId" : "bbd38966-8537-46f1-9a54-06fbfe7079c6",
"type" : "DOMAIN"
} ]
}'
HTTP Request
POST /v1/system/prechecks HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 110
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"resources" : [ {
"resourceId" : "bbd38966-8537-46f1-9a54-06fbfe7079c6",
"type" : "DOMAIN"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/system/prechecks/tasks/b8a00d3e-1e61-4258-ac96-386091d21aaa
Content-Length: 667
{
"id" : "b8a00d3e-1e61-4258-ac96-386091d21aaa",
"name" : "Precheck Task",
"type" : "PRECHECK",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:09.321Z",
"completionTimestamp" : "2022-01-24T13:10:09.321Z",
"subTasks" : [ {
"name" : "Upgrade - DOMAIN ",
"description" : "Upgrade - DOMAIN ",
"status" : "PENDING",
"creationTimestamp" : "2022-01-24T13:10:09.321Z",
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
} ]
} ],
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
} ],
"isCancellable" : false
}
-
Poll the status of the task using the precheck task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get System Precheck Task. |
2.18.2. Get System Precheck Task
Get Precheck Task by ID is used to retrieve a precheck task.
Prerequisites
-
ID of the precheck task
Steps
-
Invoke the API. This API returns a precheck task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/prechecks/tasks/b8a00d3e-1e61-4258-ac96-386091d21aaa' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 667
{
"id" : "b8a00d3e-1e61-4258-ac96-386091d21aaa",
"name" : "Precheck Task",
"type" : "PRECHECK",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:09.902Z",
"completionTimestamp" : "2022-01-24T13:10:09.902Z",
"subTasks" : [ {
"name" : "Upgrade - DOMAIN ",
"description" : "Upgrade - DOMAIN ",
"status" : "PENDING",
"creationTimestamp" : "2022-01-24T13:10:09.902Z",
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
} ]
} ],
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
} ],
"isCancellable" : false
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 667
{
"id" : "b8a00d3e-1e61-4258-ac96-386091d21aaa",
"name" : "Precheck Task",
"type" : "PRECHECK",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:09.902Z",
"completionTimestamp" : "2022-01-24T13:10:09.902Z",
"subTasks" : [ {
"name" : "Upgrade - DOMAIN ",
"description" : "Upgrade - DOMAIN ",
"status" : "PENDING",
"creationTimestamp" : "2022-01-24T13:10:09.902Z",
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
} ]
} ],
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
} ],
"isCancellable" : false
}
2.19. Bundles
2.19.1. Upload a Bundle
Offline:
-
Upload a Bundle is used to upload Bundles which are downloaded using Bundle Transfer Utility tool.
|
Tip
|
Please refer to the VMware Cloud Foundation documentation for more information on the Bundle Transfer Utility tool. |
Prerequisites
-
Bundle file path.
-
Bundle manifest file path.
-
Bundle manifest signature file path.
|
Tip
|
Refer to: BundleUploadSpec. |
Steps
-
Invoke the API. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"bundleFilePath" : "/home/vcf/bundles/bundle-11237.tar",
"manifestFilePath" : "/home/vcf/bundles/bundle-11237.manifest",
"signatureFilePath" : "/home/vcf/bundles/bundle-11237.manifest.sig"
}'
HTTP Request
POST /v1/bundles HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 198
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"bundleFilePath" : "/home/vcf/bundles/bundle-11237.tar",
"manifestFilePath" : "/home/vcf/bundles/bundle-11237.manifest",
"signatureFilePath" : "/home/vcf/bundles/bundle-11237.manifest.sig"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/c953c02b-4fac-4ef6-84f0-f22ec0f82cbc
Content-Length: 366
{
"id" : "c953c02b-4fac-4ef6-84f0-f22ec0f82cbc",
"name" : "Upload BUNDLE - PSC:6.7.0-13010631 VCENTER:6.7.0-13010631",
"type" : "BUNDLE_UPLOAD",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:10.934Z",
"resources" : [ {
"resourceId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"type" : "BUNDLE"
} ],
"isCancellable" : false
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.19.2. Upload a Partner Bundle
Offline:
-
Upload a Bundle is used to upload partner Bundles.
|
Tip
|
Please refer to the VMware Cloud Foundation documentation for more information. |
Prerequisites
-
Partner bundle version.
-
Partner bundle metadata file path.
-
Software compatibility sets file path.
|
Tip
|
Refer to: BundleUploadSpec. |
Steps
-
Invoke the API. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"compatibilitySetsFilePath" : "/home/vcf/bundles/softwareCompatibilitySets.json",
"partnerExtensionSpec" : {
"partnerBundleVersion" : "4.7.410-26262335",
"partnerBundleMetadataFilePath" : "/home/vcf/bundles/partnerBundleMetadata.json"
}
}'
HTTP Request
POST /v1/bundles HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 254
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"compatibilitySetsFilePath" : "/home/vcf/bundles/softwareCompatibilitySets.json",
"partnerExtensionSpec" : {
"partnerBundleVersion" : "4.7.410-26262335",
"partnerBundleMetadataFilePath" : "/home/vcf/bundles/partnerBundleMetadata.json"
}
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/c953c02b-4fac-4ef6-84f0-f22ec0f82cbc
Content-Length: 346
{
"id" : "c953c02b-4fac-4ef6-84f0-f22ec0f82cbc",
"name" : "Upload BUNDLE - VXRAIL:6.7.0-13006603",
"type" : "BUNDLE_UPLOAD",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:09.942Z",
"resources" : [ {
"resourceId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"type" : "BUNDLE"
} ],
"isCancellable" : false
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.19.3. Update Software compatibility sets
Offline:
-
Update software compatibility sets for Bundles is used to update software compatibility sets for Bundles.
|
Tip
|
Please refer to the VMware Cloud Foundation documentation for more information. |
Prerequisites
-
Software compatibility sets file path.
|
Tip
|
Refer to: BundleUpdateSpec. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles/' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"compatibilitySetsFilePath" : "/home/vcf/bundles/softwareCompatibilitySets.json"
}'
HTTP Request
PATCH /v1/bundles/ HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 86
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"compatibilitySetsFilePath" : "/home/vcf/bundles/softwareCompatibilitySets.json"
}
HTTP Response
HTTP/1.1 202 Accepted
2.19.4. Get the Bundles
-
Get the Bundles is used to get all the bundles.
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/bundles HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1499
{
"elements" : [ {
"id" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"type" : "VMWARE_SOFTWARE",
"description" : "ESX update bundle - 13004448(67EP7)==>13010696 (vsphere67U2)",
"version" : "253.0.0-111959",
"severity" : null,
"vendor" : "VMware",
"releasedDate" : "2019-05-10T10:29:10.645Z",
"isCumulative" : false,
"isCompliant" : null,
"sizeMB" : 453.0,
"downloadStatus" : "SUCCESSFUL",
"components" : [ {
"description" : "ESX_HOST Update Bundle",
"vendor" : "VMware",
"releasedDate" : "2019-05-10T10:29:10.645Z",
"toVersion" : "6.7.0-13006603",
"fromVersion" : "6.7.0-13004448",
"imageType" : "PATCH",
"id" : "a65d9d83-88b9-475f-a2ba-ee5d9be34f8d",
"type" : "HOST"
} ]
}, {
"id" : "0c8800bb-a57d-41d7-bd5b-ca777d7db6cb",
"type" : "VMWARE_SOFTWARE",
"description" : "vCenter update bundle",
"version" : "253.0.0-111959",
"severity" : null,
"vendor" : "VMware",
"releasedDate" : "2019-05-10T10:29:10.645Z",
"isCumulative" : false,
"isCompliant" : null,
"sizeMB" : 453.0,
"downloadStatus" : "SUCCESSFUL",
"components" : [ {
"description" : "vCenter Update Bundle",
"vendor" : "VMware",
"releasedDate" : "2019-05-10T10:29:10.645Z",
"toVersion" : "6.7.0-13006603",
"fromVersion" : "6.7.0-13004448",
"imageType" : "PATCH",
"id" : "a67d9d83-88b9-475f-a2ba-ee5d9be34f4d",
"type" : "VCENTER"
} ]
} ]
}
2.19.5. Get a Bundle
-
Get a Bundle is used to get a specific bundle.
Prerequisites
-
ID of the Bundle
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles/50b4e0b7-85b8-4328-ba2f-e92c6c9483f0' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/bundles/50b4e0b7-85b8-4328-ba2f-e92c6c9483f0 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 674
{
"id" : "0c8800bb-a57d-41d7-bd5b-ca777d7db6cb",
"type" : "VMWARE_SOFTWARE",
"description" : "vCenter update bundle",
"version" : "253.0.0-111959",
"severity" : null,
"vendor" : "VMware",
"releasedDate" : "2019-05-10T10:29:10.645Z",
"isCumulative" : false,
"isCompliant" : null,
"sizeMB" : 453.0,
"downloadStatus" : "SUCCESSFUL",
"components" : [ {
"description" : "vCenter Update Bundle",
"vendor" : "VMware",
"releasedDate" : "2019-05-10T10:29:10.645Z",
"toVersion" : "6.7.0-13006603",
"fromVersion" : "6.7.0-13004448",
"imageType" : "PATCH",
"id" : "a67d9d83-88b9-475f-a2ba-ee5d9be34f4d",
"type" : "VCENTER"
} ]
}
2.19.6. Update Bundle for Downloading
Online:
-
Update a Bundle for downloading from depot is used to Download Bundles from the depot.
|
Tip
|
Refer to: Update Depot Settings to configure My VMware and Dell EMC Support Account in SDDC Manager. |
Prerequisites
-
ID of the bundle to be downloaded.
|
Tip
|
Refer to: BundleUpdateSpec and BundleDownloadSpec. |
Steps
-
Invoke the API. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles/50b4e0b7-85b8-4328-ba2f-e92c6c9483f0' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"bundleDownloadSpec" : {
"downloadNow" : true
}
}'
HTTP Request
PATCH /v1/bundles/50b4e0b7-85b8-4328-ba2f-e92c6c9483f0 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 59
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"bundleDownloadSpec" : {
"downloadNow" : true
}
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/cfaf5d75-e5a8-4afa-b62b-7621bfa9feaa
Content-Length: 370
{
"id" : "cfaf5d75-e5a8-4afa-b62b-7621bfa9feaa",
"name" : "Download BUNDLE - PSC:6.7.0-13010631 VCENTER:6.7.0-13010631",
"type" : "BUNDLE_DOWNLOAD",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:09.753Z",
"resources" : [ {
"resourceId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"type" : "BUNDLE"
} ],
"isCancellable" : false
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.20. Manifests
2.20.1. Get latest supported LCM manifest
-
Get manifest is used to get the latest supported LCM manifest
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/manifests' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/manifests HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1960
{
"version" : 1,
"sequenceNumber" : 2,
"creationTime" : "2022-01-24T13:10:10.090Z",
"publishedDate" : "2022-01-24T13:10:10.090Z",
"releases" : [ {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "9dd12bcc-a723-4791-874a-12443be4e99c",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "2568d3a1-4d51-4c44-a0cc-4e93ed345c4a",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "5d2b1a63-e1f9-41fc-a0c0-619ed7336b37",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "ccbc0c99-1953-4061-9e61-e791af7b817b",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "8cf0f31f-b15a-401e-b572-d56cb6f11179",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ],
"recalledBundles" : [ ]
}
2.20.2. Save/Upload supported LCM manifest with updated sequence number to LCM.
-
Save/Load manifest is used to save/upload supported LCM manifest with updated sequence number to LCM.
Prerequisites
-
Manifest Version
-
Sequence Number
-
Creation time of the manifest file
-
Collection of Releases till date
|
Tip
|
Refer to: Manifest. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/manifests' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"version" : 1,
"sequenceNumber" : 2,
"creationTime" : "2022-01-24T13:10:07.995Z",
"publishedDate" : "2022-01-24T13:10:07.995Z",
"releases" : [ {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "f5987edc-bb69-47e6-9207-81b859c350ee",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "74949f0a-d7c5-49bb-afba-052bd539b059",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "331a03ad-8de1-4435-a4c1-a0fa9c0610a0",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "5c95d051-3558-451a-9f08-0240f240c1c3",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "fee28b98-18af-42c5-b286-e5cb43a83306",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ],
"recalledBundles" : [ ]
}'
HTTP Request
POST /v1/manifests HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 1956
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"version" : 1,
"sequenceNumber" : 2,
"creationTime" : "2022-01-24T13:10:07.995Z",
"publishedDate" : "2022-01-24T13:10:07.995Z",
"releases" : [ {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "f5987edc-bb69-47e6-9207-81b859c350ee",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "74949f0a-d7c5-49bb-afba-052bd539b059",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "331a03ad-8de1-4435-a4c1-a0fa9c0610a0",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "5c95d051-3558-451a-9f08-0240f240c1c3",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "fee28b98-18af-42c5-b286-e5cb43a83306",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ],
"recalledBundles" : [ ]
}
HTTP Response
HTTP/1.1 202 Accepted
2.21. Releases
2.21.1. Get all releases
-
Get Releases is used to get the information for all the VMware Cloud Foundation releases along with the versions of each product within the given release.
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/releases' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/releases HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 4380
{
"elements" : [ {
"product" : "vcf",
"version" : "3.0.0",
"description" : "VMware Cloud Foundation 3.0.0 Release",
"releaseDate" : "2018-09-20T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "3.0.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "6.5.0-9451637",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "6.5.0-9298722",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_MANAGER",
"version" : "6.4.1-8599035",
"publicName" : "NSX-V Data Center"
}, {
"name" : "VROPS",
"version" : "6.7.0-8183617",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "39056527-0b9c-4e93-9f79-0e538c108d97",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "2.3.0"
}, {
"bundleId" : "9851aa0c-762c-4a22-b7a6-a6c8488ec7cf",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "2.3.0"
}, {
"bundleId" : "cf27c5f1-be86-4c7b-bd9f-75af362569fe",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "2.3.0"
}, {
"bundleId" : "1eb3910b-b12e-4be4-a421-b3a0e292ddcc",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "2.3.0"
}, {
"bundleId" : "02c4571f-bed2-495d-b96a-42fcb81a1f26",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "2.3.0"
} ]
}, {
"product" : "vcf",
"version" : "3.5.0",
"description" : "VMware Cloud Foundation 3.5.0 Release",
"releaseDate" : "2018-12-13T08:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "3.5.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "6.7.0-10244745",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "6.7.0-10764712",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_MANAGER",
"version" : "6.4.4-11197766",
"publicName" : "NSX-V Data Center"
}, {
"name" : "VROPS",
"version" : "7.0.0-10098133",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ ]
}, {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "a4409804-6fe5-4794-831e-32d3827f2f4a",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "f38e181a-704b-416f-a3d0-5e5c295a5a37",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "9cd144f1-b89e-4e01-b4dd-19dfecf55b16",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "8e44b00d-8448-441c-9f43-cc5b45e7afc9",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "6d70ce17-ff96-4fb1-ac04-e60aa71d18cb",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ]
}
2.21.2. Get release for a given version
-
This API is used to get the release for a specified version.
Prerequisites
-
Version of the Release
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/releases?versionEq=4.1.0' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/releases?versionEq=4.1.0 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1797
{
"elements" : [ {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "a9c2edcc-5805-4861-93f6-cdf8a8c86ab4",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "15e4ac2b-2c7c-4a10-8b1c-df36bb696211",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "e827a881-3526-4418-b83d-2844b743e295",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "b2ea1cd1-8f2f-4c9a-89db-da7bd1fda79b",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "7259df4d-a190-4b41-b092-0b95a7658126",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ]
}
2.21.3. Get future releases for a given version
-
This API is used to get all future releases for a given version.
Prerequisites
-
Version of a Release
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/releases?versionGt=2.3.0' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/releases?versionGt=2.3.0 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2610
{
"elements" : [ {
"product" : "vcf",
"version" : "3.5.0",
"description" : "VMware Cloud Foundation 3.5.0 Release",
"releaseDate" : "2018-12-13T08:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "3.5.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "6.7.0-10244745",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "6.7.0-10764712",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_MANAGER",
"version" : "6.4.4-11197766",
"publicName" : "NSX-V Data Center"
}, {
"name" : "VROPS",
"version" : "7.0.0-10098133",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ ]
}, {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "28e9e839-a0f4-451f-bb5b-76f781624e0c",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "3138bf7a-28db-49c2-9ff0-fb4da72901a6",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "d844b6b5-caa3-4712-8863-994a6746316a",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "51743451-416a-4773-86ab-59e3776a62a5",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "04aa05da-6a4b-4ce9-aa38-f94f5090c740",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ]
}
2.21.4. Get applicable target releases for a given version
-
This API is used to get all applicable target releases for a given version.
Prerequisites
-
Version of a Release
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/releases?applicableForVersion=2.3.0' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/releases?applicableForVersion=2.3.0 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1797
{
"elements" : [ {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "97a44e86-07f0-4320-b8ed-e4ad0b35d890",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "5e58ddec-e09c-438f-ab76-ad16c31c2e45",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "a6288adb-96ba-4ded-a659-1e7bdd427c16",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "bc080b3f-7d20-447f-b3f3-424e6554098b",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "8449e6ef-206d-4a97-affe-181ae3716058",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ]
}
2.21.5. Get Current Release for Domain
-
This API is used to get the release for a specified domain ID.
Prerequisites
-
ID of a domain
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/releases?domainId=mgmt-domain-1' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/releases?domainId=mgmt-domain-1 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1797
{
"elements" : [ {
"product" : "vcf",
"version" : "4.1.0",
"description" : "VMware Cloud Foundation 4.1.0 Release",
"releaseDate" : "2020-10-06T07:00:00.000Z",
"bom" : [ {
"name" : "DOMAIN_MANAGER",
"version" : "4.1.0",
"publicName" : "SDDC Manager"
}, {
"name" : "VCENTER",
"version" : "7.0.1-16860138",
"publicName" : "vCenter Server Appliance"
}, {
"name" : "HOST",
"version" : "7.0.1-16850804",
"publicName" : "VMware ESXi"
}, {
"name" : "NSX_T_MANAGER",
"version" : "3.0.2-16887200",
"publicName" : "NSX-T Data Center"
}, {
"name" : "VROPS",
"version" : "8.1.1-16522874",
"publicName" : "VMware vRealize Operations Manager"
} ],
"sku" : [ ],
"updates" : [ ],
"patchBundles" : [ {
"bundleId" : "8cf7274f-dc0a-47a0-bca1-b161492e11c0",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "7db810a7-4dc6-4582-8a5f-31dc9e5cfc3c",
"bundleType" : "EVORACK",
"bundleElements" : [ "SDDC_MANAGER_VCF" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "591cbaec-a838-479d-b120-2cf9d0860847",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "VCENTER" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "6a8a8112-f6cf-4f0b-9a52-fb052e7878ac",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "ESX_HOST" ],
"cumulativeFromVcfVersion" : "3.7.0"
}, {
"bundleId" : "2685b3ac-7ae6-435a-9968-618b55eae987",
"bundleType" : "VMWARE_SOFTWARE",
"bundleElements" : [ "NSX_MANAGER" ],
"cumulativeFromVcfVersion" : "3.7.0"
} ]
} ]
}
2.22. Upgradables
2.22.1. Get the Upgradables
Get the Upgradables provides the list of upgradables in the system. Each upgradable provides information about the bundle, resource and its associated software components that can be prechecked and upgraded. The upgradables can be of different types ex: AVAILABLE, PENDING, SCHEDULED etc.
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/upgradables' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/upgradables HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 369
{
"elements" : [ {
"bundleId" : "63351466-0b4e-412a-aec0-464978513674",
"bundleType" : "VXRAIL",
"resource" : {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
},
"softwareComponents" : [ {
"id" : "41c246b1-3cf4-4f9b-8020-df912fe11a69",
"type" : "VXRAIL"
} ],
"status" : "AVAILABLE"
} ]
}
2.22.2. Get the Upgradables for a Domain
This API provides the list of upgradables for a given domain. Each upgradable provides information about the bundle, resource and its associated software components that can be prechecked and upgraded. The upgradables can be of different types ex: AVAILABLE, PENDING, SCHEDULED etc.
Prerequisites
-
ID of a domain
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/upgradables/domains/96355926-18c9-4151-aaf1-f4d85dc9143e' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/upgradables/domains/96355926-18c9-4151-aaf1-f4d85dc9143e HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 290
{
"elements" : [ {
"bundleId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"bundleType" : "SDDC_MANAGER",
"resource" : {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
},
"softwareComponents" : [ ],
"status" : "AVAILABLE"
} ]
}
2.22.3. Get the Target VCF Release Upgradables for a Domain
This API provides the list of upgradables for a given domain and target VCF release. Each upgradable provides information about the bundle, resource and its associated software components that can be prechecked and upgraded. The upgradables can be of different types ex: AVAILABLE, PENDING, SCHEDULED etc.
Prerequisites
-
ID of a domain
-
Version of a Target Release
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/upgradables/domains/96355926-18c9-4151-aaf1-f4d85dc9143e?targetVersion=4.1.0.0' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/upgradables/domains/96355926-18c9-4151-aaf1-f4d85dc9143e?targetVersion=4.1.0.0 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 290
{
"elements" : [ {
"bundleId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"bundleType" : "SDDC_MANAGER",
"resource" : {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
},
"softwareComponents" : [ ],
"status" : "AVAILABLE"
} ]
}
2.23. Version Aliases
2.23.1. Get Version Aliases
-
Get Version Alias Configuration is used to get version alias configuration.
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/version-aliases' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/settings/version-aliases HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 177
{
"elements" : [ {
"bundleComponentType" : "VCENTER",
"versionAliases" : [ {
"version" : "6.7.0-14765156",
"aliases" : [ "6.7.0-14765268" ]
} ]
} ]
}
2.23.2. Update Version Aliases
Update Version Alias Configurations
-
Update Version Alias Configurations is used to update multiple version alias configurations.
Prerequisites
-
Bundle component type
-
One or more version aliases
|
Tip
|
Refer to: VersionAliasesForBundleComponentTypeSpec |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/version-aliases' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"versionAliasesForBundleComponentTypes" : [ {
"bundleComponentType" : "VCENTER",
"versionAliases" : [ {
"version" : "6.7.0-14765156",
"aliases" : [ "6.7.0-14765268" ]
} ]
} ],
"forceUpdate" : true
}'
HTTP Request
PUT /v1/system/settings/version-aliases HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 230
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"versionAliasesForBundleComponentTypes" : [ {
"bundleComponentType" : "VCENTER",
"versionAliases" : [ {
"version" : "6.7.0-14765156",
"aliases" : [ "6.7.0-14765268" ]
} ]
} ],
"forceUpdate" : true
}
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 177
{
"elements" : [ {
"bundleComponentType" : "VCENTER",
"versionAliases" : [ {
"version" : "6.7.0-14765156",
"aliases" : [ "6.7.0-14765268" ]
} ]
} ]
}
Update Version Alias Configuration
* Update Version Alias Configuration is used to update a specific version alias configuration.
Prerequisites
-
Bundle component type
-
Version
-
Alias specification
|
Tip
|
Refer to: AliasSpec |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/version-aliases/VCENTER/6.7.0-14765156' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"aliases" : [ "6.7.0-14765268" ],
"forceUpdate" : true
}'
HTTP Request
PUT /v1/system/settings/version-aliases/VCENTER/6.7.0-14765156 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 62
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"aliases" : [ "6.7.0-14765268" ],
"forceUpdate" : true
}
HTTP Response
HTTP/1.1 200 OK
Content-Disposition: inline;filename=f.txt
Content-Type: application/json
Content-Length: 177
{
"elements" : [ {
"bundleComponentType" : "VCENTER",
"versionAliases" : [ {
"version" : "6.7.0-14765156",
"aliases" : [ "6.7.0-14765268" ]
} ]
} ]
}
2.23.3. Delete Version Aliases
Delete Version Aliases
-
Delete Version Alias Configuration is used to delete version alias configurations by bundle component type, version and alias version.
Prerequisites
-
Bundle component type
-
Bundle component version
-
One or more alias versions to be removed
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/version-aliases/VCENTER/6.7.0-14765156' -i -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '[ "6.7.0-14765268" ]'
HTTP Request
DELETE /v1/system/settings/version-aliases/VCENTER/6.7.0-14765156 HTTP/1.1
Content-Type: application/json
Content-Length: 20
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
[ "6.7.0-14765268" ]
HTTP Response
HTTP/1.1 204 No Content
Delete Version Alias by Type and Version
-
Delete Version Alias Configuration is used to delete a version alias configuration by bundle component type and version.
Prerequisites
-
Bundle component type
-
Bundle component version
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/version-aliases/VCENTER/6.7.0-14765156' -i -X DELETE \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/system/settings/version-aliases/VCENTER/6.7.0-14765156 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 204 No Content
Delete Version Alias by Type
-
Delete Version Alias for a bundle component type is used to delete a version alias configuration by bundle component type.
Prerequisites
-
Bundle component type
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/settings/version-aliases/VCENTER' -i -X DELETE \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/system/settings/version-aliases/VCENTER HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 204 No Content
2.24. Upgrades
2.24.1. Perform Upgrade
Perform Upgrade is used to perform upgrades. Upgrades are sequential. So in order to upgrade to a release, your environment must be on the version before that release. Upgrades are applied on a workload domain basis. The management domain contains the core infrastructure, so you must upgrade the management domain before upgrading the other workload domains. You must upgrade all required components to keep your system in an optimum state.
|
Note
|
Performing upgrades are supported on VMware Cloud Foundation 3.5 BOM resources and above. |
Steps to Perform Upgrade.
-
Download the required bundle.
-
Online bundle download - Please refer https://docs.vmware.com/en/VMware-Cloud-Foundation/4.0/com.vmware.vcf.vxrail.admin.doc/GUID-BBA9A158-8447-4684-9AA9-1D214D3EB09A.html for more information.
-
Get Depot Settings API is used to retrieve the existing My VMware Account information as well as Dell EMC depot.
-
Update Depot Settings API is used to update the existing My VMware Account information as well as Dell EMC depot.
-
Update Bundle for Downloading API to Download Bundles from VMware depot account and Dell EMC depot.
-
-
Offline bundle download - If customer site does not have internet access (dark site) then Bundle Transfer Utility can be used to download bundles. Please refer https://docs.vmware.com/en/VMware-Cloud-Foundation/4.0/vcf-40-lifecycle/GUID-8FA44ACE-8F04-47DA-845E-E0863094F7B0.html for more information.
-
Execute Upload a Bundle API to upload it to SDDC Manager.
-
Execute Upload a Partner Bundle API to upload partner Bundles..
-
Execute Update Software compatibility sets API to update software compatibility sets for Bundles.
-
-
-
Execute Get the Upgradables API to retrieve the list of upgradables (bundle and resource detail) in the system.
-
Execute Prechecks API to perform required system level health checks.
-
Perform upgrade and monitor the upgrade progress.
2.24.2. Domain Upgrade
Prerequisites
-
Bundle ID.
-
Resource Type. Ex: DOMAIN.
-
One or more Resource upgrade specifications.
-
Each Resource upgrade specification should contain.
-
Resource ID. Ex: Domain ID.
-
Upgrade scheduled time or Upgrade now option.
-
-
A boolean for parallel ESXi upgrade (default is 'true')
|
Tip
|
Refer to: UpgradeSpec and ResourceUpgradeSpec. |
Steps
-
Invoke the API. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/upgrades' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"bundleId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"resourceType" : "DOMAIN",
"parallelUpgrade" : true,
"resourceUpgradeSpecs" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"scheduledTimestamp" : "2022-01-24T13:10:08.179Z",
"upgradeNow" : false,
"enableQuickboot" : true
} ]
}'
HTTP Request
POST /v1/upgrades HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 321
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"bundleId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"resourceType" : "DOMAIN",
"parallelUpgrade" : true,
"resourceUpgradeSpecs" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"scheduledTimestamp" : "2022-01-24T13:10:08.179Z",
"upgradeNow" : false,
"enableQuickboot" : true
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/1f53e082-5fea-459f-8a70-e32263ad0afa
Content-Length: 478
{
"id" : "1f53e082-5fea-459f-8a70-e32263ad0afa",
"name" : "Upgrade DOMAIN - [acme-domain] using BUNDLE - PSC:6.7.0-13010631 VCENTER:6.7.0-13010631",
"type" : "UPGRADE",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:08.179Z",
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
}, {
"resourceId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"type" : "BUNDLE"
} ],
"isCancellable" : false
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.24.3. Cluster Upgrade
|
Note
|
For Cluster level upgrades, the Cluster ID’s can be retrieved based on the Host’s that are available for upgrade, Refer to: Get the Hosts and Get the Clusters API’s. |
Prerequisites
-
Bundle ID.
-
Resource Type. Ex: CLUSTER.
-
One or more Resource upgrade specifications.
-
Each Resource upgrade specification should contain.
-
Resource ID. Ex: Cluster ID.
-
Upgrade scheduled time or Upgrade now option.
-
-
A boolean for parallel ESXi upgrade (default is 'true')
|
Tip
|
Refer to: UpgradeSpec and ResourceUpgradeSpec. |
Steps
-
Invoke the API. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/upgrades' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"bundleId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"resourceType" : "CLUSTER",
"parallelUpgrade" : true,
"resourceUpgradeSpecs" : [ {
"resourceId" : "29c933b5-254f-4b9a-a6be-89080051953a",
"scheduledTimestamp" : "2022-01-24T14:10:10.570Z",
"upgradeNow" : false,
"enableQuickboot" : true
} ]
}'
HTTP Request
POST /v1/upgrades HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 322
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"bundleId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"resourceType" : "CLUSTER",
"parallelUpgrade" : true,
"resourceUpgradeSpecs" : [ {
"resourceId" : "29c933b5-254f-4b9a-a6be-89080051953a",
"scheduledTimestamp" : "2022-01-24T14:10:10.570Z",
"upgradeNow" : false,
"enableQuickboot" : true
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/1f53e082-5fea-459f-8a70-e32263ad0afa
Content-Length: 456
{
"id" : "1f53e082-5fea-459f-8a70-e32263ad0afa",
"name" : "Upgrade DOMAIN - [acme-domain] using BUNDLE - HOST:6.7.0-13006603",
"type" : "UPGRADE",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-01-24T13:10:10.569Z",
"resources" : [ {
"resourceId" : "96355926-18c9-4151-aaf1-f4d85dc9143e",
"type" : "DOMAIN"
}, {
"resourceId" : "50b4e0b7-85b8-4328-ba2f-e92c6c9483f0",
"type" : "BUNDLE"
} ],
"isCancellable" : false
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.25. Credentials
2.25.1. Get the Credentials
This API is used to fetch all credentials known to the system.
Prerequisites
-
Resource type, name, IP address, accountType or the domain name associated with the resource is required to filter the results. For allowable resource type values, refer : Get the Credentials
-
"pageNumber" and "pageSize" filters are recommended to be additionally used for limiting response content and also improving response time.
Get All Credentials in Page
Steps
-
Invoke the API by specifying the "pageNumber" and "pageSize" filters.
|
Tip
|
Other filters like "resourceName", "resourceIp", "resourceType" and "domainName" can be additionally used as search criteria. |
|
Tip
|
If no value for "pageNumber" and "pageSize" filters is specified, the API returns all known records in a single page. |
|
Tip
|
Page number starts with 0. |
|
Tip
|
A page size value equal to 0 will return all known records in a single page. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials?pageNumber=0&pageSize=15' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials?pageNumber=0&pageSize=15 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 7985
{
"elements" : [ {
"id" : "f4ad9718-642c-4287-bbd5-55ce5b7d78df",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "bdda36f1-84f7-4a43-8934-801322c2d44c",
"resourceName" : "sfo01-m01-esx01.rainpole.io",
"resourceIp" : "10.0.0.100",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "38a90755-8cab-47ca-9a22-3b5752ab1e76",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "99997af0-7685-4db4-acce-2c479238144f",
"resourceName" : "sfo01-m01-esx03.rainpole.io",
"resourceIp" : "10.0.0.102",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "b6df3d29-b355-4c1b-be1b-ddbc39facc2e",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "6d5b9a8d-fec3-457b-a5c6-02b4b9f34929",
"resourceName" : "sfo01-m01-esx04.rainpole.io",
"resourceIp" : "10.0.0.103",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "cd2fa0c8-ac55-4211-bc7e-31872fbb4ce0",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "cab0e2de-b9c7-4180-85d2-8b301ce4deb8",
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceIp" : "10.0.0.6",
"resourceType" : "VCENTER",
"domainName" : "MGMT"
}
}, {
"id" : "86881c05-58f8-42a2-ab36-3de79b9d631a",
"credentialType" : "SSO",
"accountType" : "USER",
"username" : "[email protected]",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "df14599a-b31b-48bf-82bd-bdb69932f553",
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceIp" : "10.0.0.6",
"resourceType" : "PSC",
"domainName" : "MGMT"
}
}, {
"id" : "f3833c44-1b34-4300-9a82-ddc32fdd9bdc",
"credentialType" : "SSO",
"accountType" : "SERVICE",
"username" : "[email protected]",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "ec637ee6-58e2-4840-9a9d-43d4799283c9",
"resourceName" : "sfo01m01vcenter01.sfo01.rainpole.local",
"resourceIp" : "10.0.0.6",
"resourceType" : "VCENTER",
"domainName" : "MGMT"
}
}, {
"id" : "b37e112d-d873-4530-baff-9ebc245fea24",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "1bf7bdad-9a91-4455-8f55-ad8848ddc897",
"resourceName" : "sfo01-m01-nsx01.rainpole.io",
"resourceIp" : "10.0.0.9",
"resourceType" : "NSXT_MANAGER",
"domainName" : "MGMT"
}
}, {
"id" : "533492b6-5f17-4f0d-b255-c3f0a7ac578a",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "c0aaedd3-7797-46df-b79e-dd2732eb94cd",
"resourceName" : "sfo01-m01-nsx01.rainpole.io",
"resourceIp" : "10.0.0.9",
"resourceType" : "NSXT_MANAGER",
"domainName" : "MGMT"
}
}, {
"id" : "2ba42761-afe3-4157-a72c-91e7a6ff1d99",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "431d4334-2153-4108-9a5d-ca7704a9c078",
"resourceName" : "sfo-vrli01.rainpole.io",
"resourceIp" : "10.0.0.15",
"resourceType" : "VRLI",
"domainName" : "MGMT"
}
}, {
"id" : "da112681-cedb-47b2-a059-b0c99a2df6f9",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "4484fe03-a55e-45a8-b440-92b197035f0e",
"resourceName" : "sfo-vrli01b.rainpole.io",
"resourceIp" : "10.0.0.16",
"resourceType" : "VRLI",
"domainName" : "MGMT"
}
}, {
"id" : "3c0c362b-713d-46e2-a6e4-61f42d921cf2",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "cd41ef8f-3e0a-4553-938e-9f4049679a54",
"resourceName" : "xreg-vrops01a.rainpole.io",
"resourceIp" : "10.0.1.33",
"resourceType" : "VROPS",
"domainName" : "MGMT"
}
}, {
"id" : "fc274561-4237-4a54-8950-797b86eb81d2",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "27dd9ff8-7eea-4465-be06-5ffa09232b06",
"resourceName" : "xreg-vrops01.rainpole.io",
"resourceIp" : "10.0.0.31",
"resourceType" : "VROPS",
"domainName" : "MGMT"
}
}, {
"id" : "89318a53-3035-47aa-b1fa-de3f76916eba",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "c4c7e8c9-5795-4363-aa9a-fc5488d307dd",
"resourceName" : "xreg-vrslcm01.rainpole.io",
"resourceIp" : "10.0.0.32",
"resourceType" : "VRSLCM",
"domainName" : "MGMT"
}
}, {
"id" : "cf937d46-db26-4a77-8aae-edebf5300476",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin@localhost",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.386Z",
"modificationTimestamp" : "2022-02-04T08:58:46.386Z",
"resource" : {
"resourceId" : "a2fd2a51-72f2-4f78-96b3-371b07671bc4",
"resourceName" : "xreg-vrslcm01.rainpole.io",
"resourceIp" : "10.0.0.32",
"resourceType" : "VRSLCM",
"domainName" : "MGMT"
}
} ],
"pageMetadata" : {
"pageNumber" : 0,
"pageSize" : 15,
"totalElements" : 15,
"totalPages" : 1
}
}
Get All Credentials
Steps
-
Invoke the API.
|
Tip
|
For a scaled environment, it is always recommended to provide "resourceType" filter for avoiding timeouts. |
|
Tip
|
"pageNumber" and "pageSize" filters are recommended to be additionally used for limiting response content and also improving response time. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 7985
{
"elements" : [ {
"id" : "65677bbb-631e-4953-8a69-5b1d364d97fa",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "9d7b51d7-857e-4a0f-a2ee-d3b7d781d78f",
"resourceName" : "sfo01-m01-esx01.rainpole.io",
"resourceIp" : "10.0.0.100",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "d5d70fe0-e5f9-4d48-8a9c-5e2fd1c57826",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "ac816f8d-1192-4fff-a9fa-63ec38bedced",
"resourceName" : "sfo01-m01-esx03.rainpole.io",
"resourceIp" : "10.0.0.102",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "fd037b52-4de2-4b5a-a3b6-921adf03f092",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "56ca8725-e45e-42d5-9570-ff1e12367afc",
"resourceName" : "sfo01-m01-esx04.rainpole.io",
"resourceIp" : "10.0.0.103",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "e2fbe38a-697b-4540-a052-f97280e92c26",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "cab0e2de-b9c7-4180-85d2-8b301ce4deb8",
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceIp" : "10.0.0.6",
"resourceType" : "VCENTER",
"domainName" : "MGMT"
}
}, {
"id" : "a0c95d74-9f36-4099-aca4-1faacbc80214",
"credentialType" : "SSO",
"accountType" : "USER",
"username" : "[email protected]",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "6f762a81-e1d7-420c-b2a1-28b79c6b69c8",
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceIp" : "10.0.0.6",
"resourceType" : "PSC",
"domainName" : "MGMT"
}
}, {
"id" : "4a21d50f-edc7-4da4-b8c7-43af1e2f4cc7",
"credentialType" : "SSO",
"accountType" : "SERVICE",
"username" : "[email protected]",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "4d1e02a6-deae-4ad7-ba3e-b9e03cb0fb62",
"resourceName" : "sfo01m01vcenter01.sfo01.rainpole.local",
"resourceIp" : "10.0.0.6",
"resourceType" : "VCENTER",
"domainName" : "MGMT"
}
}, {
"id" : "3d7b9d5a-449e-48a1-ab36-d3b45f07fb88",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "a82ad6a5-0861-4f7d-8990-c87ec724b6be",
"resourceName" : "sfo01-m01-nsx01.rainpole.io",
"resourceIp" : "10.0.0.9",
"resourceType" : "NSXT_MANAGER",
"domainName" : "MGMT"
}
}, {
"id" : "506538e7-1bb7-406e-a213-14261f7ad7a4",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "b8e51181-f532-4e9a-8491-9577c6898c3e",
"resourceName" : "sfo01-m01-nsx01.rainpole.io",
"resourceIp" : "10.0.0.9",
"resourceType" : "NSXT_MANAGER",
"domainName" : "MGMT"
}
}, {
"id" : "c592a123-9fe7-4438-9a8f-08dbefec2b68",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "bc567a29-2f99-4858-9f77-142105ce0d3f",
"resourceName" : "sfo-vrli01.rainpole.io",
"resourceIp" : "10.0.0.15",
"resourceType" : "VRLI",
"domainName" : "MGMT"
}
}, {
"id" : "b5bdcbd4-ad4a-4a6c-bb3e-f22bba31df83",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "cc2d4b75-a713-40d2-8a94-32790910434f",
"resourceName" : "sfo-vrli01b.rainpole.io",
"resourceIp" : "10.0.0.16",
"resourceType" : "VRLI",
"domainName" : "MGMT"
}
}, {
"id" : "f3d9bd3e-bcb0-4ad9-8ce9-e86a5c56c65f",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "162f7a0a-d7b2-433f-ad67-8c6dd7f05bbd",
"resourceName" : "xreg-vrops01a.rainpole.io",
"resourceIp" : "10.0.1.33",
"resourceType" : "VROPS",
"domainName" : "MGMT"
}
}, {
"id" : "9e80b1a7-348c-4cfe-ad63-75d4405530d3",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "5784343f-3efe-44fc-b204-789163f9e017",
"resourceName" : "xreg-vrops01.rainpole.io",
"resourceIp" : "10.0.0.31",
"resourceType" : "VROPS",
"domainName" : "MGMT"
}
}, {
"id" : "c24cf678-d518-4966-bf31-e9cf804d2031",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "20bd63d5-fdc2-4829-b89f-7338ae76a9c3",
"resourceName" : "xreg-vrslcm01.rainpole.io",
"resourceIp" : "10.0.0.32",
"resourceType" : "VRSLCM",
"domainName" : "MGMT"
}
}, {
"id" : "410eafe0-9094-4558-a22b-6f9136d104c8",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin@localhost",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.579Z",
"modificationTimestamp" : "2022-02-04T08:58:44.579Z",
"resource" : {
"resourceId" : "20a711eb-7d48-4406-87bc-527a243080ef",
"resourceName" : "xreg-vrslcm01.rainpole.io",
"resourceIp" : "10.0.0.32",
"resourceType" : "VRSLCM",
"domainName" : "MGMT"
}
} ],
"pageMetadata" : {
"pageNumber" : 0,
"pageSize" : 15,
"totalElements" : 15,
"totalPages" : 1
}
}
Get Credentials by "resourceName"
This API can be used to fetch the credentials associated with a resource with a specific name.
Steps
-
Invoke the API by specifying the "resourceName".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials?resourceName=sfo01-mo1-esx02.rainpole.io' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials?resourceName=sfo01-mo1-esx02.rainpole.io HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 656
{
"elements" : [ {
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.292Z",
"modificationTimestamp" : "2022-02-04T08:58:46.292Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
} ],
"pageMetadata" : {
"pageNumber" : 0,
"pageSize" : 1,
"totalElements" : 1,
"totalPages" : 1
}
}
Get Credentials by "resourceIp"
This API can be used to fetch the credentials associated with a resource with a specific IP address.
Steps
-
Invoke the API by specifying the "resourceIp".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials?resourceIp=10.0.0.101' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials?resourceIp=10.0.0.101 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 656
{
"elements" : [ {
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:45.025Z",
"modificationTimestamp" : "2022-02-04T08:58:45.025Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
} ],
"pageMetadata" : {
"pageNumber" : 0,
"pageSize" : 1,
"totalElements" : 1,
"totalPages" : 1
}
}
Get Credentials by "resourceType"
This API can be used to fetch the credentials associated with all the resources with a specific resource type.
Steps
-
Invoke the API by specifying the "resourceType".
|
Tip
|
"pageNumber" and "pageSize" filters are recommended to be additionally used for limiting response content and also improving response time. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials?resourceType=ESXI' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials?resourceType=ESXI HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2219
{
"elements" : [ {
"id" : "63ba8b05-e1bf-4656-b1e0-b3be85dbe12c",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.422Z",
"modificationTimestamp" : "2022-02-04T08:58:44.422Z",
"resource" : {
"resourceId" : "c4e5736b-efde-4c8d-a6b7-7e8ad333a907",
"resourceName" : "sfo01-m01-esx01.rainpole.io",
"resourceIp" : "10.0.0.100",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.422Z",
"modificationTimestamp" : "2022-02-04T08:58:44.422Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "2a663629-bedc-4fd7-b88c-9c251e9100a5",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.422Z",
"modificationTimestamp" : "2022-02-04T08:58:44.422Z",
"resource" : {
"resourceId" : "be347ae5-ddb3-412d-94c3-0e2be13d90cc",
"resourceName" : "sfo01-m01-esx03.rainpole.io",
"resourceIp" : "10.0.0.102",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "1d293e9d-51bf-44db-8f81-5a2858c102a2",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:44.422Z",
"modificationTimestamp" : "2022-02-04T08:58:44.422Z",
"resource" : {
"resourceId" : "e5b23c4c-4e2c-4c18-a029-60b06b3be5ad",
"resourceName" : "sfo01-m01-esx04.rainpole.io",
"resourceIp" : "10.0.0.103",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
} ],
"pageMetadata" : {
"pageNumber" : 0,
"pageSize" : 4,
"totalElements" : 4,
"totalPages" : 1
}
}
Get Credentials by "domainName"
This API can be used to fetch the credentials associated with all the resources belonging to a specific domain.
Steps
-
Invoke the API by specifying the "domainName".
|
Tip
|
"pageNumber" and "pageSize" filters are recommended to be additionally used for limiting response content and also improving response time. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials?domainName=MGMT' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials?domainName=MGMT HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 7985
{
"elements" : [ {
"id" : "e0eecd08-96b4-474b-a53c-a7195780acc1",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "5b26f6fb-0ef1-424f-8605-7e80f4375da2",
"resourceName" : "sfo01-m01-esx01.rainpole.io",
"resourceIp" : "10.0.0.100",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "7215d184-ad7e-4c85-9e5c-0f0d6911fc8c",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "fe3a4c7e-6978-4521-b185-efd50f36fbea",
"resourceName" : "sfo01-m01-esx03.rainpole.io",
"resourceIp" : "10.0.0.102",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "21ebfa93-cd18-4787-8432-2afbc5ca5fa0",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "c3074412-f35d-4183-85d3-483908e5179a",
"resourceName" : "sfo01-m01-esx04.rainpole.io",
"resourceIp" : "10.0.0.103",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}, {
"id" : "dd17aa9a-d754-4080-b9e4-3ea42a7f139d",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "cab0e2de-b9c7-4180-85d2-8b301ce4deb8",
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceIp" : "10.0.0.6",
"resourceType" : "VCENTER",
"domainName" : "MGMT"
}
}, {
"id" : "6a1bd2f6-0c8f-4d7a-8d09-10f55a19e4ab",
"credentialType" : "SSO",
"accountType" : "USER",
"username" : "[email protected]",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "99631353-b535-4536-b51c-f86969b1f43a",
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceIp" : "10.0.0.6",
"resourceType" : "PSC",
"domainName" : "MGMT"
}
}, {
"id" : "e0d7b15d-d8c5-4437-b875-f187ac07f617",
"credentialType" : "SSO",
"accountType" : "SERVICE",
"username" : "[email protected]",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "4801329c-d80d-46c6-9ea6-e9430cd345e9",
"resourceName" : "sfo01m01vcenter01.sfo01.rainpole.local",
"resourceIp" : "10.0.0.6",
"resourceType" : "VCENTER",
"domainName" : "MGMT"
}
}, {
"id" : "04e3d233-cb5a-4171-b361-79071d07d0bf",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "d9cc41d2-6e7e-4e3e-8e50-c9ae345d1fa8",
"resourceName" : "sfo01-m01-nsx01.rainpole.io",
"resourceIp" : "10.0.0.9",
"resourceType" : "NSXT_MANAGER",
"domainName" : "MGMT"
}
}, {
"id" : "9f8e6617-e9af-4397-8093-9aa08903e3ea",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "450f16e4-3af9-41c2-9adc-ae64586f7d6c",
"resourceName" : "sfo01-m01-nsx01.rainpole.io",
"resourceIp" : "10.0.0.9",
"resourceType" : "NSXT_MANAGER",
"domainName" : "MGMT"
}
}, {
"id" : "4dedb258-ea8e-4922-b26e-857cd5a78ed3",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "0001e631-3509-423a-8f57-3d0cd2a07ce0",
"resourceName" : "sfo-vrli01.rainpole.io",
"resourceIp" : "10.0.0.15",
"resourceType" : "VRLI",
"domainName" : "MGMT"
}
}, {
"id" : "bba9c50e-3468-485e-8c8d-3decb140e94e",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "ce414bd1-8ac2-4ac5-986a-81041b3e8020",
"resourceName" : "sfo-vrli01b.rainpole.io",
"resourceIp" : "10.0.0.16",
"resourceType" : "VRLI",
"domainName" : "MGMT"
}
}, {
"id" : "c6c48312-ce28-4463-91f0-f68b10f2eef0",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "f7864b65-2fdd-44e4-8afc-41d1305b9c03",
"resourceName" : "xreg-vrops01a.rainpole.io",
"resourceIp" : "10.0.1.33",
"resourceType" : "VROPS",
"domainName" : "MGMT"
}
}, {
"id" : "67a74666-03c6-4579-9783-5e6fffabd867",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "c77b4805-00b1-43bf-98ff-965d09d790a9",
"resourceName" : "xreg-vrops01.rainpole.io",
"resourceIp" : "10.0.0.31",
"resourceType" : "VROPS",
"domainName" : "MGMT"
}
}, {
"id" : "03b27b70-568d-4b35-ab42-62166eaf77ad",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "38e4c222-55b0-4043-9daa-7cf7e821b7d6",
"resourceName" : "xreg-vrslcm01.rainpole.io",
"resourceIp" : "10.0.0.32",
"resourceType" : "VRSLCM",
"domainName" : "MGMT"
}
}, {
"id" : "2695efa6-c1e4-460e-a296-473028b5eb2f",
"credentialType" : "API",
"accountType" : "USER",
"username" : "admin@localhost",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.215Z",
"modificationTimestamp" : "2022-02-04T08:58:46.215Z",
"resource" : {
"resourceId" : "c4a50432-90d6-4969-8674-a860cdb2c3de",
"resourceName" : "xreg-vrslcm01.rainpole.io",
"resourceIp" : "10.0.0.32",
"resourceType" : "VRSLCM",
"domainName" : "MGMT"
}
} ],
"pageMetadata" : {
"pageNumber" : 0,
"pageSize" : 15,
"totalElements" : 15,
"totalPages" : 1
}
}
|
Note
|
SSH services might be disabled for a few accounts. The user needs to enable SSH service in the product in order to use SSH credentials. In order to connect to the "enable" user of NSX_MANAGER, firstly enable SSH services using API credentials, connect to the API user and then enter enable mode using "enable" user credentials. |
2.25.2. Get a Credential
This API is used to fetch credential for an ID.
Prerequisites
-
ID of the credential
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/c3dbbfc8-e1ef-4128-946d-be035461e4b8' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials/c3dbbfc8-e1ef-4128-946d-be035461e4b8 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 489
{
"id" : "c3dbbfc8-e1ef-4128-946d-be035461e4b8",
"credentialType" : "SSH",
"accountType" : "USER",
"username" : "root",
"password" : "VMwareInfra@1",
"creationTimestamp" : "2022-02-04T08:58:46.042Z",
"modificationTimestamp" : "2022-02-04T08:58:46.042Z",
"resource" : {
"resourceId" : "814fbb7c-cd8f-4fe6-8d1f-aea5d3f74325",
"resourceName" : "sfo01-m01-esx02.rainpole.io",
"resourceIp" : "10.0.0.101",
"resourceType" : "ESXI",
"domainName" : "MGMT"
}
}
2.25.3. Update the Passwords
This API is used to update passwords for list of resources by supplying new passwords.
Prerequisites
-
The following data is required
-
Name or ID of the resource
-
Type of the resource
-
Credential type of the resource
-
Username of the resource
-
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource. |
-
New password must be in compliance with these password policies.
Password requirements:
-
Length: 8-20 characters
-
Allowed special characters: ! @ # $ ^ *
-
At least 1 small letter, capital letter, number and special character should be present
-
Cannot include: Three same consecutive characters
-
Steps
-
Trigger the task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "UPDATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "VMwareInfra@1"
} ]
} ]
}'
HTTP Request
PATCH /v1/credentials HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 265
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "UPDATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "VMwareInfra@1"
} ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/23413a5a-ded8-45a3-85c3-644036d702fa
Content-Type: application/json
Content-Length: 100
{
"id" : "23413a5a-ded8-45a3-85c3-644036d702fa",
"name" : "UPDATE",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task or Get a Credentials Task. |
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 the Update Passwords Task. |
|
Warning
|
The password once updated cannot be rolled back. |
|
Note
|
The password is updated in the order of the input. |
|
Note
|
The passwords of the dependent resources of the requested resources will also get updated. |
2.25.4. Rotate the Passwords
This API is used to rotate passwords for list of resources using system generated passwords.
Prerequisites
-
Name or ID of the resource
-
Type of the resource
-
Credential type of the resource
-
Username of the resource
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource. |
Steps
-
Trigger the task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "ROTATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ]
}'
HTTP Request
PATCH /v1/credentials HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 229
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "ROTATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/78dd6e56-e8f2-4df8-9d60-43fac816971e
Content-Type: application/json
Content-Length: 100
{
"id" : "78dd6e56-e8f2-4df8-9d60-43fac816971e",
"name" : "ROTATE",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task or Get a Credentials Task. |
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 the Rotate Passwords Task. |
|
Warning
|
The password once rotated cannot be rolled back. |
|
Note
|
The password is rotated in the order of the input. |
|
Note
|
The generated password adheres to the password compliance. Refer to: Password Compliance Guide. |
|
Note
|
The passwords of the dependent resources of the requested resources will also get rotated. |
2.25.5. Retry the Update Passwords Task
This API is used to retry a failed update passwords task.
Prerequisites
-
The following data is required
-
ID of the last triggered failed update passwords task
-
Name or ID of the resource
-
Type of the resource
-
Credential type of the resource
-
Username of the resource
-
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource and ID of the failed task. |
-
New password must be in compliance with the password policies.
|
Tip
|
Refer to: Password Compliance Guide. |
Steps
-
Trigger the task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/f9b1de3a-409e-41bf-844a-88e79ecaaf3e' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "UPDATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "VMwareInfra@1"
} ]
} ]
}'
HTTP Request
PATCH /v1/credentials/tasks/f9b1de3a-409e-41bf-844a-88e79ecaaf3e HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 265
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "UPDATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "VMwareInfra@1"
} ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/f9b1de3a-409e-41bf-844a-88e79ecaaf3e
Content-Type: application/json
Content-Length: 100
{
"id" : "f9b1de3a-409e-41bf-844a-88e79ecaaf3e",
"name" : "UPDATE",
"status" : "IN_PROGRESS"
}
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer to: Get a Task or Get a Credentials Task. -
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", the task can be re-executed by providing previous credentials rotate specification or by amending the credentials rotate specification for FAILED resources.
-
|
Tip
|
Refer to: Retry the Update Passwords Task. |
-
The failed task can be cancelled.
|
Tip
|
Refer to: Cancel the Update/Rotate Passwords Task. |
|
Warning
|
The password once updated cannot be rolled back. |
|
Note
|
The password is updated in the order of the input. |
|
Note
|
Retry should be performed if updating passwords task has failed. |
|
Note
|
Retry should be performed on the same list of resources as in the failed operation specification. |
|
Tip
|
Refer to: Get the Resource Credentials for Credentials Task for the list of resources in the failed task. |
|
Note
|
The passwords of the dependent resources of the requested resources will also get updated. |
2.25.6. Retry the Rotate Passwords Task
This API is used to retry a failed rotate passwords task.
Prerequisites
-
ID of the last triggered failed rotate passwords task
-
Name or ID of the resource
-
Type of the resource
-
Credential type of the resource
-
Username of the resource
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource and ID of the failed task. |
Steps
-
Trigger the task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/a6d9ac33-51ca-44f0-82c0-9b64f81484bf' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "ROTATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ]
}'
HTTP Request
PATCH /v1/credentials/tasks/a6d9ac33-51ca-44f0-82c0-9b64f81484bf HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 229
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "ROTATE",
"elements" : [ {
"resourceName" : "sfo01-mo1-esx02.rainpole.io",
"resourceType" : "ESXI",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/a6d9ac33-51ca-44f0-82c0-9b64f81484bf
Content-Type: application/json
Content-Length: 100
{
"id" : "a6d9ac33-51ca-44f0-82c0-9b64f81484bf",
"name" : "ROTATE",
"status" : "IN_PROGRESS"
}
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer to: Get a Task or Get a Credentials Task. -
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", the task can be re-executed by providing previous credentials rotate specification or by amending the credentials rotate specification for FAILED resources.
-
|
Tip
|
Refer to: Retry the Rotate Passwords Task. |
-
The failed task can be cancelled.
|
Tip
|
Refer to: Cancel the Update/Rotate Passwords Task. |
|
Warning
|
The password once rotated cannot be rolled back. |
|
Note
|
The password is rotated in the order of the input. |
|
Note
|
The generated password adheres to the password compliance. Refer to: Password Compliance Guide. |
|
Note
|
Retry should be performed if some password rotation task has failed. |
|
Note
|
Retry should be performed on the same list of resources as in the failed operation specification. |
|
Tip
|
Refer to: Get the Resource Credentials for Credentials Task for the list of resources in the failed task. |
|
Note
|
The passwords of the dependent resources of the requested resources will also get rotated. |
2.25.7. Cancel the Update/Rotate Passwords Task
-
This API is used to cancel a failed update or rotate passwords task.
Prerequisites
-
ID of the last triggered failed update/rotate passwords task
|
Tip
|
Refer to: Get the Credentials Tasks section to get the ID of the failed task. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/8f158dcb-2f87-4953-9e53-75c00c613d18' -i -X DELETE \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
DELETE /v1/credentials/tasks/8f158dcb-2f87-4953-9e53-75c00c613d18 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 74
{
"id" : "8f158dcb-2f87-4953-9e53-75c00c613d18",
"status" : "FAILED"
}
|
Warning
|
The password once updated or rotated cannot be rolled back. |
|
Note
|
The password is updated or rotated in the order of the input. |
|
Note
|
Cancel should be performed to release the internal global lock held at VCF instance level if some password updation or rotation task has failed after several retries. |
2.25.8. Get the Credentials Tasks
This API is used to fetch all credentials tasks in reverse chronological order.
|
Note
|
"oldPassword" and "newPassword" fields won’t be listed and will come as empty string. Refer Get a Credentials Subtask for fetching passwords details. |
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials/tasks HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1597
{
"elements" : [ {
"id" : "186d891f-aac3-4501-ae52-afb89eb7e32f",
"name" : "Credentials rotate operation",
"type" : "ROTATE",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"subTasks" : [ {
"id" : "acb6fa7b-a81b-41d8-bb53-0c1611609dd7",
"resourceName" : "vra01svr01a.rainpole.io",
"name" : "Password rotate for resource : vra01svr01a.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "",
"newPassword" : "",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
}, {
"id" : "900e8ce0-4ff4-4a76-a7e0-8e44748aa46e",
"resourceName" : "vra01svr01b.rainpole.io",
"name" : "Password rotate for resource : vra01svr01b.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "",
"newPassword" : "",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
}, {
"id" : "1b3b962d-fff7-4dcc-98ed-0a15b495afa5",
"resourceName" : "vra01svr01c.rainpole.io",
"name" : "Password rotate for resource : vra01svr01c.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "",
"newPassword" : "",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
} ]
} ]
}
2.25.9. Get a Credentials Task
This API is used to fetch a credentials task for an ID.
|
Note
|
"oldPassword" and "newPassword" fields won’t be listed and will come as empty string. Refer Get a Credentials Subtask for fetching passwords details. |
Prerequisites
-
ID of the credentials task
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/186d891f-aac3-4501-ae52-afb89eb7e32f' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials/tasks/186d891f-aac3-4501-ae52-afb89eb7e32f HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1494
{
"id" : "186d891f-aac3-4501-ae52-afb89eb7e32f",
"name" : "Credentials rotate operation",
"type" : "ROTATE",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"subTasks" : [ {
"id" : "acb6fa7b-a81b-41d8-bb53-0c1611609dd7",
"resourceName" : "vra01svr01a.rainpole.io",
"name" : "Password rotate for resource : vra01svr01a.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "",
"newPassword" : "",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
}, {
"id" : "900e8ce0-4ff4-4a76-a7e0-8e44748aa46e",
"resourceName" : "vra01svr01b.rainpole.io",
"name" : "Password rotate for resource : vra01svr01b.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "",
"newPassword" : "",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
}, {
"id" : "1b3b962d-fff7-4dcc-98ed-0a15b495afa5",
"resourceName" : "vra01svr01c.rainpole.io",
"name" : "Password rotate for resource : vra01svr01c.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "",
"newPassword" : "",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
} ]
}
2.25.10. Get the Resource Credentials for Credentials Task
This API is used to fetch resource credentials for a credentials task ID.
Prerequisites
-
ID of the credentials task
|
Tip
|
Refer to: Get the Credentials Tasks to get the ID of credentials tasks. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/186d891f-aac3-4501-ae52-afb89eb7e32f/resource-credentials' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials/tasks/186d891f-aac3-4501-ae52-afb89eb7e32f/resource-credentials HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 578
[ {
"resourceName" : "vra01svr01a.rainpole.io",
"resourceType" : "VRA",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "EvoSDDC2020!"
} ]
}, {
"resourceName" : "vra01svr01b.rainpole.io",
"resourceType" : "VRA",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "EvoSDDC2018!"
} ]
}, {
"resourceName" : "vra01svr01c.rainpole.io",
"resourceType" : "VRA",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root",
"password" : "EvoSDDC2017!"
} ]
} ]
2.25.11. Get a Credentials Subtask
This API is used to fetch details of a subtask corresponding to a credentials task ID and subtask ID.
Prerequisites
-
ID of the credentials task
-
ID of the credentials subtask
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/186d891f-aac3-4501-ae52-afb89eb7e32f/subtasks/acb6fa7b-a81b-41d8-bb53-0c1611609dd7' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/credentials/tasks/186d891f-aac3-4501-ae52-afb89eb7e32f/subtasks/acb6fa7b-a81b-41d8-bb53-0c1611609dd7 HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 664
{
"id" : "186d891f-aac3-4501-ae52-afb89eb7e32f",
"name" : "Credentials rotate operation",
"type" : "ROTATE",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"subTasks" : [ {
"id" : "acb6fa7b-a81b-41d8-bb53-0c1611609dd7",
"resourceName" : "vra01svr01a.rainpole.io",
"name" : "Password rotate for resource : vra01svr01a.rainpole.io, user : root and credential type : SSH",
"creationTimestamp" : "2018-11-05T05:15:32.864Z",
"status" : "SUCCESSFUL",
"oldPassword" : "EvoSDDC2019!",
"newPassword" : "EvoSDDC2020!",
"entityType" : "VRA",
"username" : "root",
"credentialType" : "SSH"
} ]
}
2.25.12. Remediate expired Passwords
If the password is expired, then the customer requires to manually reset the account in the product and then reach out to GSS to sync credentials store of VCF with new password for the product.
Hence this new API will accept the new password from the client, validates by testing the connectivity and then performs credentials store update. This API is generalized so that the same API can be used for both service accounts and user accounts.
For service accounts, Password will be auto rotated post rememdiaton with correct password.
Please note: Credentials store sync is irreversible operation, ie when credentials store sync is successful and password rotation failed due to other issues, then we wont be reverting credentials store with older non working password.
Prerequisites
-
Name or ID of the resource
-
Type of the resource
-
Username of the resource
-
Working password of the resource
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource. |
Steps
-
Trigger the task using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "REMEDIATE",
"elements" : [ {
"resourceName" : "sfo01m01esx02.sfo01.rainpole.local",
"resourceType" : "ESXI",
"credentials" : [ {
"username" : "root",
"password" : "VMwareInfra@1"
} ]
} ]
}'
HTTP Request
PATCH /v1/credentials HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 243
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "REMEDIATE",
"elements" : [ {
"resourceName" : "sfo01m01esx02.sfo01.rainpole.local",
"resourceType" : "ESXI",
"credentials" : [ {
"username" : "root",
"password" : "VMwareInfra@1"
} ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/68c616f3-b235-401c-b6e7-3f7838aeaef6
Content-Type: application/json
Content-Length: 103
{
"id" : "68c616f3-b235-401c-b6e7-3f7838aeaef6",
"name" : "REMEDIATE",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task or Get a Credentials Task. |
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 the Rotate Passwords Task. |
|
Warning
|
The password once rotated cannot be rolled back. |
|
Note
|
Currently we support only one credential at a time for remediation. |
|
Note
|
The password is rotated in the order of the input. |
|
Note
|
The generated password adheres to the password compliance. Refer to: Password Compliance Guide. |
|
Note
|
The passwords of the dependent resources of the requested resources will also get rotated. |
2.25.13. Configure auto-rotate schedule for Credentials
This API is used to configure schedule for auto-rotate of the passwords for the list of selected credentials.
Prerequisites
-
Name or ID of the resource
-
Type of the resource
-
Credential type of the resource
-
Username of the resource
-
enableAutoRotatePolicy refers to property for enable/disable the auto-rotate schedule
-
frequencyInDays refers to frequency in number of days for auto-rotate schedule
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource. |
Steps
-
Trigger the task using the valid input specification.
set enableAutoRotatePolicy to True
set frequencyInDays to number of days auto-rotate schedule should execute.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "UPDATE_AUTO_ROTATE_POLICY",
"elements" : [ {
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceType" : "VCENTER",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ],
"autoRotatePolicy" : {
"frequencyInDays" : 30,
"enableAutoRotatePolicy" : true
}
}'
HTTP Request
PATCH /v1/credentials HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 344
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "UPDATE_AUTO_ROTATE_POLICY",
"elements" : [ {
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceType" : "VCENTER",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ],
"autoRotatePolicy" : {
"frequencyInDays" : 30,
"enableAutoRotatePolicy" : true
}
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/7fc1ad38-c555-447d-9d98-54f23ca50d19
Content-Type: application/json
Content-Length: 119
{
"id" : "7fc1ad38-c555-447d-9d98-54f23ca50d19",
"name" : "UPDATE_AUTO_ROTATE_POLICY",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task or Get a Credentials Task. |
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 the Rotate Passwords Task. |
2.25.14. Disable auto-rotate schedule for credentials
This API is used to disable configured schedule for auto-rotate of passwords for the list of selected credentials.
Prerequisites
-
Name or ID of the resource
-
Type of the resource
-
Credential type of the resource
-
Username of the resource
-
enableAutoRotatePolicy refers to property for enable/disable the auto-rotate schedule
|
Tip
|
Refer to: Get the Credentials to get the credential type, username, name, ID and type of the resource. |
Steps
-
Trigger the task using the valid input specification.
set enableAutoRotatePolicy to True
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "UPDATE_AUTO_ROTATE_POLICY",
"elements" : [ {
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceType" : "VCENTER",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ],
"autoRotatePolicy" : {
"enableAutoRotatePolicy" : false
}
}'
HTTP Request
PATCH /v1/credentials HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 317
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "UPDATE_AUTO_ROTATE_POLICY",
"elements" : [ {
"resourceName" : "sfo01-m01-vc01.rainpole.io",
"resourceType" : "VCENTER",
"credentials" : [ {
"credentialType" : "SSH",
"username" : "root"
} ]
} ],
"autoRotatePolicy" : {
"enableAutoRotatePolicy" : false
}
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/d84b5abb-3433-4620-9a16-7f75b92daed8
Content-Type: application/json
Content-Length: 119
{
"id" : "d84b5abb-3433-4620-9a16-7f75b92daed8",
"name" : "UPDATE_AUTO_ROTATE_POLICY",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. or Get a Credentials Task. |
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 the Rotate Passwords Task. |
2.26. Certificates
2.26.1. Install Certificates By Online Mode
The following steps have to be followed to install certificates signed by VCF supporting certificate authorities (Microsoft CA and OpenSSL CA).
Prerequisites
-
VCF environment.
Steps
-
Check if certificate authority is configured or not by invoking the API. If certificate authority is configured, proceed directly to step-3.
|
Note
|
Operations are performed on domain named MGMT. |
|
Note
|
The following returns the list of all configured cerificate authorities. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/certificate-authorities HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 386
{
"elements" : [ {
"id" : "OpenSSL",
"commonName" : "test.openssl.eng.vmware.com",
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU"
}, {
"id" : "Microsoft",
"username" : "Admin",
"serverUrl" : "https://AD-vcf.eng.vmware.com/certsrv",
"templateName" : "Vcms"
} ]
}
|
Tip
|
Refer to: Get certificate authorities information |
-
Configure certificate authority if it is not configured by invoking the API
Configure "Microsoft" certificate authority
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"microsoftCertificateAuthoritySpec" : {
"username" : "Admin",
"secret" : "VMwareInfra@1",
"serverUrl" : "https://AD-vcf.eng.vmware.com/certsrv",
"templateName" : "Vcms"
}
}'
HTTP Request
PUT /v1/certificate-authorities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 194
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"microsoftCertificateAuthoritySpec" : {
"username" : "Admin",
"secret" : "VMwareInfra@1",
"serverUrl" : "https://AD-vcf.eng.vmware.com/certsrv",
"templateName" : "Vcms"
}
}
HTTP Response
HTTP/1.1 200 OK
Configure "OpenSSL" certificate authority
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"openSSLCertificateAuthoritySpec" : {
"commonName" : "test.openssl.eng.vmware.com",
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU"
}
}'
HTTP Request
PUT /v1/certificate-authorities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 239
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"openSSLCertificateAuthoritySpec" : {
"commonName" : "test.openssl.eng.vmware.com",
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU"
}
}
HTTP Response
HTTP/1.1 200 OK
|
Tip
|
Refer to: Create a certificate authority |
-
Reconfigure the certificate authority if required by invoking the API
Reconfigure "Microsoft" certificate authority
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"microsoftCertificateAuthoritySpec" : {
"templateName" : "Vcms1"
}
}'
HTTP Request
PATCH /v1/certificate-authorities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 78
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"microsoftCertificateAuthoritySpec" : {
"templateName" : "Vcms1"
}
}
HTTP Response
HTTP/1.1 200 OK
Reconfigure "OpenSSL" certificate authority
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"openSSLCertificateAuthoritySpec" : {
"commonName" : "test1.openssl.eng.vmware.com"
}
}'
HTTP Request
PATCH /v1/certificate-authorities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 97
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"openSSLCertificateAuthoritySpec" : {
"commonName" : "test1.openssl.eng.vmware.com"
}
}
HTTP Response
HTTP/1.1 200 OK
|
Tip
|
Refer to: Configure existing certificate authority |
-
Verify that the certificate authority is successfully configured by invoking the API with type of CA as the ID
Verify configuration for "Microsoft" certificate authority
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities/Microsoft' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/certificate-authorities/Microsoft HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 132
{
"id" : "Microsoft",
"username" : "Admin",
"serverUrl" : "https://AD-vcf.eng.vmware.com/certsrv",
"templateName" : "Vcms"
}
Verify configuration for "OpenSSL" certificate authority
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/certificate-authorities/OpenSSL' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/certificate-authorities/OpenSSL HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 203
{
"id" : "OpenSSL",
"commonName" : "test.openssl.eng.vmware.com",
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU"
}
|
Tip
|
Refer to: Get certificate authority information |
-
After the successful certificate authority configuration, generate CSR by invoking the API
TipIf "resources" field is not given then operations are performed on all the resources in the domain.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/csrs' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"csrGenerationSpec" : {
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU",
"email" : "[email protected]",
"keySize" : "2048",
"keyAlgorithm" : "RSA"
},
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER",
"sans" : [ "sfo-m01-nsx01.rainpole.io", "10.0.0.6" ]
} ]
}'
HTTP Request
PUT /v1/domains/MGMT/csrs HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 415
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"csrGenerationSpec" : {
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU",
"email" : "[email protected]",
"keySize" : "2048",
"keyAlgorithm" : "RSA"
},
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER",
"sans" : [ "sfo-m01-nsx01.rainpole.io", "10.0.0.6" ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/286698a3-d5b0-4b24-944e-ac93bc064673
Content-Type: application/json
Content-Length: 79
{
"id" : "286698a3-d5b0-4b24-944e-ac93bc064673",
"status" : "IN_PROGRESS"
}
|
Tip
|
Refer to: Generate CSR(s) |
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
-
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer to: Get a Task. -
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", execute the generate CSR request again.
-
-
If the generation of CSR is successful, fetch the contents of the CSR to check for which resources CSR is generated by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/csrs' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/MGMT/csrs HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1154
{
"elements" : [ {
"csrEncodedContent" : "-----BEGIN CERTIFICATE REQUEST-----\nMIICtDCCAZwCAQAwbzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH\nEwJQQTEMMAoGA1UECxMDVkNGMQ8wDQYDVQQKEwZWTXdhcmUxJzAlBgNVBAMTHm5z\neE1hbmFnZXIudnJhY2sudnNwaGVyZS5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAKtumknTB1do77E5rCXGRgqT6iqTgW0moiDZS6USGkeTQMvj\nR5JnQjq11xJl0y1meSdA6ufft8xndOr1b8alRs4+FreuJLl/8HBIVLRECrfkfIn0\nImwZzGFih2wwrCD/evb/7paNcdt97+KF2nwqB5ADysyFkjYs0uiJxxE5i8HsST1L\n+AStKeAV0lOk/2n/qgHPUcnjH7KchJAet9DFuKBWUW7QIryQffuiQrdAFqcEPHJC\nubHyqnoBPktosD3SXs1UickNiTyXIRC1NGHK/w7VTTJfBxkXxIdejazVGjCAW8w0\n/N4iW3rCaxSpnggWLGYFbGEkhikgtkpj8zIRjk8CAwEAAaAAMA0GCSqGSIb3DQEB\nCwUAA4IBAQBkxJTuymqggHLhWbtnvtA3mU4freKzF2XDUUP+K5kz43j2IXNbsCJI\nWDpY9OCVj9NHZ+uFTvQLvCb3E+6h0vE4Dw2PVUuOpz/Ag1qmgYIxtC5vzN4gLKih\nUNROG5wYryYKO8YL4MB3XIQdx9b8y8Fxyh3ZHIvdghhUPBooWzeCUXVPD8Le4p52\nD8yMGREtSQL4avLughd+SFd0fvKQq+/K42WOFn7PYVfgLBqdW1YCjEIfAdsG+bhG\n3CIBan84uV3cKFSM4NtxCvHZnuRZmx6+0Frtt1w9sndjKvHrA6ozoHO9O1gl/E9D\nY1rzOB7KFzGiZHAMT2Cf/x/xGo8rTGFZ\n-----END CERTIFICATE REQUEST-----",
"resource" : {
"fqdn" : "sfo-m01-nsx01.rainpole.io"
}
} ]
}
|
Tip
|
Refer to: Get available CSR(s) in json format |
-
After successful CSR generation, generate the certificates signed by supported certificates authorities (either OpenSSL or Microsoft) by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/certificates' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"caType" : "Microsoft",
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER"
} ]
}'
HTTP Request
PUT /v1/domains/MGMT/certificates HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 124
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"caType" : "Microsoft",
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/882a0367-cf6f-4130-b661-327b7a93bafb
Content-Type: application/json
Content-Length: 79
{
"id" : "882a0367-cf6f-4130-b661-327b7a93bafb",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
TipRefer to: Get a Task. -
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer to: Get a Task. -
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", execute the generate certificate request again.
-
-
If the generation of certificates is successful, fetch the contents of the generated certificates to check for which resources certificates are generated by invoking the API
|
Note
|
The following will display the list of generated as well as already installed certificates. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/certificates' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/MGMT/certificates HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 8488
{
"elements" : [ {
"isInstalled" : true,
"version" : "V3",
"serialNumber" : "ca:0b:5d:6d:07:4e:db:41",
"issuedTo" : "sfo-m01-vc01.rainpole.io",
"issuedBy" : "OU=VMware Engineering, O=sfo-m01-psc01.rainpole.io, ST=California, C=US, DC=local, DC=vsphere, CN=CA",
"notBefore" : "2019-07-11T10:16:05.000Z",
"notAfter" : "2029-07-06T08:17:24.000Z",
"signatureAlgorithm" : "SHA256withRSA",
"subject" : "C=US, CN=sfo-m01-vc01.rainpole.io",
"subjectAlternativeName" : [ "sfo-m01-vc01.rainpole.io" ],
"publicKey" : "BA:16:16:DF:00:B2:88:C9:F9:E0:7F:72:B6:DC:83:1F:87:46:C3:C4:4B:8B:EB:C0:AD:B9:A2:FB:31:75:0A:89:12:25:58:B6:42:B1:78:A3:7F:19:B0:03:19:35:AD:51:5D:08:36:CB:C3:6E:63:B2:CE:89:2D:24:AD:EA:DD:BD:73:0A:06:84:4E:4D:83:AF:B8:EC:F9:E1:98:9F:35:9F:83:11:DD:71:61:5E:CF:DE:9A:BF:0D:A7:8A:64:F2:94:26:5D:A7:E0:20:B9:C2:01:BB:62:F2:7D:C3:A9:9B:91:DE:49:1E:97:B7:E8:CA:38:1C:E9:92:76:07:A8:26:95:5D:C1:89:E7:EA:27:03:57:BE:D2:76:B5:E4:AC:89:10:67:7F:42:DA:5D:52:5C:9F:65:59:A4:42:0B:81:F8:77:B5:F8:2D:18:DA:9B:1A:F4:BD:BD:F2:33:97:7A:EA:64:1B:CE:58:CF:9C:E7:18:60:94:CE:66:C9:57:7E:62:A2:AD:47:3D:29:D2:F8:DB:AB:D7:8F:D1:7D:8A:9A:FC:68:37:48:3C:AD:38:A5:76:D8:4C:E2:64:AE:87:B7:DA:78:3E:EB:2B:C8:70:43:4D:CB:4E:72:80:43:CB:D2:43:A7:71:16:22:27:0F:A1:DB:0A:83:88:2C:09:49:0A:35:8C:76:76:55:E2:3A:1C:7C:74:F0:91:60:A2:45:7F:6C:7A:2B:A5:51:87:25:D0:DB:9C:E0:B8:32:27:83:D6:3F:70:C5:7A:1B:92:09:E7:77:39:3A:C2:28:B1:5C:8A:3F:42:FE:D6:6A:7D:F6:E5:D6:FB:B0:DB:AB:D9:65:29:BE:75:DA:07:E8:38:B2:A0:75:9F:45:8E:FF:6B:AF:27:DB:FA:2E:AB:80:51:09:88:7D:7B:AC:A4:B7:15:41:30:A0:E1:0F:C7:DD:D1:F4:84:7D:D3:F8:B1:B0:F9:55:8F:A6:DC:44:E0:E6:0F:C5:DF:32:93:51:8D:7D:BA:79:4A:3E:72:CA:CB:9A:2E:8B:E6:A0:63:57:C8:CD:92:F8:70:0A:1E:6D:CA:DF:35:D4:91:45:E7:DB:7F:86:32:E9:8C:A3:D2:D0:35:15:70:A9:DA:39:DF:FA:76:9C:EF:5D:B6:A4:58:49:EE:A0:B1:74:33:D2:41:97:F6:FE:0C:07:66:DE:56:5F:3E:15:03:70:3D:56:80:5E:F6:CB:C3:FA:78:CE:14:0C:D7:E1:53:48:8B:5A:61:C0:04:BA:DD:ED:B3:E4:F1:76:AD:FD:03:27:C9:FB:EC:5A:75:0B:22:8F:6A:E8:35:47:FB:04:B7:A7:5F:51:FA:46:EF:00:64:03:27:1C:FB",
"publicKeyAlgorithm" : "RSA",
"keySize" : "2048",
"thumbprintAlgorithm" : "SHA-256",
"thumbprint" : "35:4B:A5:11:A9:3D:39:0D:B7:95:9B:4D:07:5C:73:40:D0:DF:63:D4:68:97:6E:1B:20:70:87:AE:40:3F:7E:AD",
"numberOfDaysToExpire" : 3644,
"expirationStatus" : "ACTIVE",
"pemEncoded" : "-----BEGIN CERTIFICATE-----MIIFRDCCBCygAwIBAgIJAOx9cA2cGcUUMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZtd2FyZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6FhbfALKIyfngf3K23IMfh0bDxEuL68CtuaL7MXUKiRIlWLZCsXijfxmwAxk1rVFdCDbLw25jss6JLSSt6t29cwoGhE5Ng6+47PnhmJ81n4MR3XFhXs/emr8Np4pk8pQmXafgILnCAbti8n3DqZuR3kkel7foyjgc6ZJ2B6gmlV3BiefqJwNXvtJ2teSsiRBnf0LaXVJcn2VZpEILgfh3tfgtGNqbGvS9vfIzl3rqZBvOWM+c5xhglM5myVd+YqKtRz0p0vjbq9eP0X2KmvxoN0g8rTildthM4mSuh7faeD7rK8hwQ03LTnKAQ8vSQ6dxFiInD6HbCoOILAlJCjWMdnZV4jocfHTwkWCiRX9seiulUYcl0Nuc4LgyJ4PWP3DFehuSCed3OTrCKLFcij9C/tZqffbl1vuw26vZZSm+ddoH6DiyoHWfRY7/a68n2/ouq4BRCYh9e6yktxVBMKDhD8fd0fSEfdP4sbD5VY+m3ETg5g/F3zKTUY19unlKPnLKy5oui+agY1fIzZL4cAoebcrfNdSRRefbf4Yy6Yyj0tA1FXCp2jnf+nac7122pFhJ7qCxdDPSQZf2/gwHZt5WXz4VA3A9VoBe9svD+njOFAzX4VNIi1phwAS63e2z5PF2rf0DJ8n77Fp1CyKPaug1R/sEt6dfUfpG7wBkAycc+wIDAQABo28wbTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAyBgNVHREEKzApgiFsb2FkLWJhbGFuY2VyLnZyYWNrLnZzcGhlcmUubG9jYWyHBAoAAA8wHwYDVR0jBBgwFoAUauWGErq+/JHwQ3qju9Ch8V2097MwDQYJKoZIhvcNAQELBQADggEBAMCvNCQ3KsvncoYK9fI0cfcBYEpFuToB+duK7yztklf8P6PLRSWdU39KaG+xv5768K+xe90riOYs0Mhcs0IuUQW2F6kCnlW3ff2R3pvTeM3kGqXclk4KGKRNnhhsF3Ze8QW3drH0dzD3vNcumdLr+GvG6vF2O/Pl3+Nn9dwE72ZVl7Ai970jJM5CVjI+wST19ZQPpq1E3aad3Bk+AQcQCIGputBGkHFZUGX4T6jPH0uDOcSRjH7v6TXhF2Cury7zme0zpWYwC4RMH/AxqK4z6DlmAwu2zycN097TMM/ZUXePmvgY7JSB5BIiY4ZxlnNbJy4756XDSBt41AaHxqWNcfs=-----END CERTIFICATE-----"
}, {
"isInstalled" : false,
"version" : "V3",
"serialNumber" : "f4:80:33:5f:e5:77:2a:f7",
"issuedTo" : "sfo-m01-nsx01.rainpole.io",
"issuedBy" : "OU=ISBU, O=VMware, L= Bangalore, ST=Karnataka, C=IN, CN=test1.openssl.eng.vmware.com",
"notBefore" : "2019-07-25T07:38:55.000Z",
"notAfter" : "2020-07-24T07:38:55.000Z",
"signatureAlgorithm" : "SHA256withRSA",
"subject" : "C=US, CN=sfo-m01-nsx01.rainpole.io",
"subjectAlternativeName" : [ "sfo-m01-nsx01.rainpole.io" ],
"publicKey" : "BA:16:16:DF:00:B2:88:C9:F9:E0:7F:72:B6:DC:83:1F:87:46:C3:C4:4B:8B:EB:C0:AD:B9:A2:FB:31:75:0A:89:12:25:58:B6:42:B1:78:A3:7F:19:B0:03:19:35:AD:51:5D:08:36:CB:C3:6E:63:B2:CE:89:2D:24:AD:EA:DD:BD:73:0A:06:84:4E:4D:83:AF:B8:EC:F9:E1:98:9F:35:9F:83:11:DD:71:61:5E:CF:DE:9A:BF:0D:A7:8A:64:F2:94:26:5D:A7:E0:20:B9:C2:01:BB:62:F2:7D:C3:A9:9B:91:DE:49:1E:97:B7:E8:CA:38:1C:E9:92:76:07:A8:26:95:5D:C1:89:E7:EA:27:03:57:BE:D2:76:B5:E4:AC:89:10:67:7F:42:DA:5D:52:5C:9F:65:59:A4:42:0B:81:F8:77:B5:F8:2D:18:DA:9B:1A:F4:BD:BD:F2:33:97:7A:EA:64:1B:CE:58:CF:9C:E7:18:60:94:CE:66:C9:57:7E:62:A2:AD:47:3D:29:D2:F8:DB:AB:D7:8F:D1:7D:8A:9A:FC:68:37:48:3C:AD:38:A5:76:D8:4C:E2:64:AE:87:B7:DA:78:3E:EB:2B:C8:70:43:4D:CB:4E:72:80:43:CB:D2:43:A7:71:16:22:27:0F:A1:DB:0A:83:88:2C:09:49:0A:35:8C:76:76:55:E2:3A:1C:7C:74:F0:91:60:A2:45:7F:6C:7A:2B:A5:51:87:25:D0:DB:9C:E0:B8:32:27:83:D6:3F:70:C5:7A:1B:92:09:E7:77:39:3A:C2:28:B1:5C:8A:3F:42:FE:D6:6A:7D:F6:E5:D6:FB:B0:DB:AB:D9:65:29:BE:75:DA:07:E8:38:B2:A0:75:9F:45:8E:FF:6B:AF:27:DB:FA:2E:AB:80:51:09:88:7D:7B:AC:A4:B7:15:41:30:A0:E1:0F:C7:DD:D1:F4:84:7D:D3:F8:B1:B0:F9:55:8F:A6:DC:44:E0:E6:0F:C5:DF:32:93:51:8D:7D:BA:79:4A:3E:72:CA:CB:9A:2E:8B:E6:A0:63:57:C8:CD:92:F8:70:0A:1E:6D:CA:DF:35:D4:91:45:E7:DB:7F:86:32:E9:8C:A3:D2:D0:35:15:70:A9:DA:39:DF:FA:76:9C:EF:5D:B6:A4:58:49:EE:A0:B1:74:33:D2:41:97:F6:FE:0C:07:66:DE:56:5F:3E:15:03:70:3D:56:80:5E:F6:CB:C3:FA:78:CE:14:0C:D7:E1:53:48:8B:5A:61:C0:04:BA:DD:ED:B3:E4:F1:76:AD:FD:03:27:C9:FB:EC:5A:75:0B:22:8F:6A:E8:35:47:FB:04:B7:A7:5F:51:FA:46:EF:00:64:03:27:1C:FB",
"publicKeyAlgorithm" : "RSA",
"keySize" : "2048",
"thumbprintAlgorithm" : "SHA-256",
"thumbprint" : "02:B1:D1:01:18:9F:07:39:E1:7C:94:BC:50:07:64:E8:45:8C:F8:73:3E:A9:23:BC:D2:BD:B1:17:E9:B3:C0:11",
"numberOfDaysToExpire" : 365,
"expirationStatus" : "ACTIVE",
"pemEncoded" : "-----BEGIN CERTIFICATE-----MIIFRDCCBCygAwIBAgIJAOx9cA2cGcUUMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZtd2FyZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6FhbfALKIyfngf3K23IMfh0bDxEuL68CtuaL7MXUKiRIlWLZCsXijfxmwAxk1rVFdCDbLw25jss6JLSSt6t29cwoGhE5Ng6+47PnhmJ81n4MR3XFhXs/emr8Np4pk8pQmXafgILnCAbti8n3DqZuR3kkel7foyjgc6ZJ2B6gmlV3BiefqJwNXvtJ2teSsiRBnf0LaXVJcn2VZpEILgfh3tfgtGNqbGvS9vfIzl3rqZBvOWM+c5xhglM5myVd+YqKtRz0p0vjbq9eP0X2KmvxoN0g8rTildthM4mSuh7faeD7rK8hwQ03LTnKAQ8vSQ6dxFiInD6HbCoOILAlJCjWMdnZV4jocfHTwkWCiRX9seiulUYcl0Nuc4LgyJ4PWP3DFehuSCed3OTrCKLFcij9C/tZqffbl1vuw26vZZSm+ddoH6DiyoHWfRY7/a68n2/ouq4BRCYh9e6yktxVBMKDhD8fd0fSEfdP4sbD5VY+m3ETg5g/F3zKTUY19unlKPnLKy5oui+agY1fIzZL4cAoebcrfNdSRRefbf4Yy6Yyj0tA1FXCp2jnf+nac7122pFhJ7qCxdDPSQZf2/gwHZt5WXz4VA3A9VoBe9svD+njOFAzX4VNIi1phwAS63e2z5PF2rf0DJ8n77Fp1CyKPaug1R/sEt6dfUfpG7wBkAycc+wIDAQABo28wbTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAyBgNVHREEKzApgiFsb2FkLWJhbGFuY2VyLnZyYWNrLnZzcGhlcmUubG9jYWyHBAoAAA8wHwYDVR0jBBgwFoAUauWGErq+/JHwQ3qju9Ch8V2097MwDQYJKoZIhvcNAQELBQADggEBAMCvNCQ3KsvncoYK9fI0cfcBYEpFuToB+duK7yztklf8P6PLRSWdU39KaG+xv5768K+xe90riOYs0Mhcs0IuUQW2F6kCnlW3ff2R3pvTeM3kGqXclk4KGKRNnhhsF3Ze8QW3drH0dzD3vNcumdLr+GvG6vF2O/Pl3+Nn9dwE72ZVl7Ai970jJM5CVjI+wST19ZQPpq1E3aad3Bk+AQcQCIGputBGkHFZUGX4T6jPH0uDOcSRjH7v6TXhF2Cury7zme0zpWYwC4RMH/AxqK4z6DlmAwu2zycN097TMM/ZUXePmvgY7JSB5BIiY4ZxlnNbJy4756XDSBt41AaHxqWNcfs=-----END CERTIFICATE-----"
} ]
}
|
Tip
|
Refer to: Get latest generated certificate(s) in a domain |
-
After successful certificate generation, install the signed certificates on remote resources by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/certificates' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "INSTALL",
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER"
} ]
}'
HTTP Request
PATCH /v1/domains/MGMT/certificates HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 129
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "INSTALL",
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/c2cc57cc-9b69-440b-a550-b19595ccc6ae
Content-Type: application/json
Content-Length: 79
{
"id" : "c2cc57cc-9b69-440b-a550-b19595ccc6ae",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
TipRefer to: Get a Task. -
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 |
-
Fetch the installed certificates by invoking the API
|
Note
|
The following will display the list of installed certificates. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/resource-certificates' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/MGMT/resource-certificates HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 8435
{
"elements" : [ {
"version" : "V3",
"serialNumber" : "ca:0b:5d:6d:07:4e:db:41",
"issuedTo" : "sfo-m01-vc01.rainpole.io",
"issuedBy" : "OU=VMware Engineering, O=sfo-m01-psc01.rainpole.io, ST=California, C=US, DC=local, DC=vsphere, CN=CA",
"notBefore" : "2019-07-11T10:16:05.000Z",
"notAfter" : "2029-07-06T08:17:24.000Z",
"signatureAlgorithm" : "SHA256withRSA",
"subject" : "C=US, CN=sfo-m01-vc01.rainpole.io",
"subjectAlternativeName" : [ "sfo-m01-vc01.rainpole.io" ],
"publicKey" : "BA:16:16:DF:00:B2:88:C9:F9:E0:7F:72:B6:DC:83:1F:87:46:C3:C4:4B:8B:EB:C0:AD:B9:A2:FB:31:75:0A:89:12:25:58:B6:42:B1:78:A3:7F:19:B0:03:19:35:AD:51:5D:08:36:CB:C3:6E:63:B2:CE:89:2D:24:AD:EA:DD:BD:73:0A:06:84:4E:4D:83:AF:B8:EC:F9:E1:98:9F:35:9F:83:11:DD:71:61:5E:CF:DE:9A:BF:0D:A7:8A:64:F2:94:26:5D:A7:E0:20:B9:C2:01:BB:62:F2:7D:C3:A9:9B:91:DE:49:1E:97:B7:E8:CA:38:1C:E9:92:76:07:A8:26:95:5D:C1:89:E7:EA:27:03:57:BE:D2:76:B5:E4:AC:89:10:67:7F:42:DA:5D:52:5C:9F:65:59:A4:42:0B:81:F8:77:B5:F8:2D:18:DA:9B:1A:F4:BD:BD:F2:33:97:7A:EA:64:1B:CE:58:CF:9C:E7:18:60:94:CE:66:C9:57:7E:62:A2:AD:47:3D:29:D2:F8:DB:AB:D7:8F:D1:7D:8A:9A:FC:68:37:48:3C:AD:38:A5:76:D8:4C:E2:64:AE:87:B7:DA:78:3E:EB:2B:C8:70:43:4D:CB:4E:72:80:43:CB:D2:43:A7:71:16:22:27:0F:A1:DB:0A:83:88:2C:09:49:0A:35:8C:76:76:55:E2:3A:1C:7C:74:F0:91:60:A2:45:7F:6C:7A:2B:A5:51:87:25:D0:DB:9C:E0:B8:32:27:83:D6:3F:70:C5:7A:1B:92:09:E7:77:39:3A:C2:28:B1:5C:8A:3F:42:FE:D6:6A:7D:F6:E5:D6:FB:B0:DB:AB:D9:65:29:BE:75:DA:07:E8:38:B2:A0:75:9F:45:8E:FF:6B:AF:27:DB:FA:2E:AB:80:51:09:88:7D:7B:AC:A4:B7:15:41:30:A0:E1:0F:C7:DD:D1:F4:84:7D:D3:F8:B1:B0:F9:55:8F:A6:DC:44:E0:E6:0F:C5:DF:32:93:51:8D:7D:BA:79:4A:3E:72:CA:CB:9A:2E:8B:E6:A0:63:57:C8:CD:92:F8:70:0A:1E:6D:CA:DF:35:D4:91:45:E7:DB:7F:86:32:E9:8C:A3:D2:D0:35:15:70:A9:DA:39:DF:FA:76:9C:EF:5D:B6:A4:58:49:EE:A0:B1:74:33:D2:41:97:F6:FE:0C:07:66:DE:56:5F:3E:15:03:70:3D:56:80:5E:F6:CB:C3:FA:78:CE:14:0C:D7:E1:53:48:8B:5A:61:C0:04:BA:DD:ED:B3:E4:F1:76:AD:FD:03:27:C9:FB:EC:5A:75:0B:22:8F:6A:E8:35:47:FB:04:B7:A7:5F:51:FA:46:EF:00:64:03:27:1C:FB",
"publicKeyAlgorithm" : "RSA",
"keySize" : "2048",
"thumbprintAlgorithm" : "SHA-256",
"thumbprint" : "35:4B:A5:11:A9:3D:39:0D:B7:95:9B:4D:07:5C:73:40:D0:DF:63:D4:68:97:6E:1B:20:70:87:AE:40:3F:7E:AD",
"numberOfDaysToExpire" : 3644,
"expirationStatus" : "ACTIVE",
"pemEncoded" : "-----BEGIN CERTIFICATE-----MIIFRDCCBCygAwIBAgIJAOx9cA2cGcUUMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZtd2FyZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6FhbfALKIyfngf3K23IMfh0bDxEuL68CtuaL7MXUKiRIlWLZCsXijfxmwAxk1rVFdCDbLw25jss6JLSSt6t29cwoGhE5Ng6+47PnhmJ81n4MR3XFhXs/emr8Np4pk8pQmXafgILnCAbti8n3DqZuR3kkel7foyjgc6ZJ2B6gmlV3BiefqJwNXvtJ2teSsiRBnf0LaXVJcn2VZpEILgfh3tfgtGNqbGvS9vfIzl3rqZBvOWM+c5xhglM5myVd+YqKtRz0p0vjbq9eP0X2KmvxoN0g8rTildthM4mSuh7faeD7rK8hwQ03LTnKAQ8vSQ6dxFiInD6HbCoOILAlJCjWMdnZV4jocfHTwkWCiRX9seiulUYcl0Nuc4LgyJ4PWP3DFehuSCed3OTrCKLFcij9C/tZqffbl1vuw26vZZSm+ddoH6DiyoHWfRY7/a68n2/ouq4BRCYh9e6yktxVBMKDhD8fd0fSEfdP4sbD5VY+m3ETg5g/F3zKTUY19unlKPnLKy5oui+agY1fIzZL4cAoebcrfNdSRRefbf4Yy6Yyj0tA1FXCp2jnf+nac7122pFhJ7qCxdDPSQZf2/gwHZt5WXz4VA3A9VoBe9svD+njOFAzX4VNIi1phwAS63e2z5PF2rf0DJ8n77Fp1CyKPaug1R/sEt6dfUfpG7wBkAycc+wIDAQABo28wbTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAyBgNVHREEKzApgiFsb2FkLWJhbGFuY2VyLnZyYWNrLnZzcGhlcmUubG9jYWyHBAoAAA8wHwYDVR0jBBgwFoAUauWGErq+/JHwQ3qju9Ch8V2097MwDQYJKoZIhvcNAQELBQADggEBAMCvNCQ3KsvncoYK9fI0cfcBYEpFuToB+duK7yztklf8P6PLRSWdU39KaG+xv5768K+xe90riOYs0Mhcs0IuUQW2F6kCnlW3ff2R3pvTeM3kGqXclk4KGKRNnhhsF3Ze8QW3drH0dzD3vNcumdLr+GvG6vF2O/Pl3+Nn9dwE72ZVl7Ai970jJM5CVjI+wST19ZQPpq1E3aad3Bk+AQcQCIGputBGkHFZUGX4T6jPH0uDOcSRjH7v6TXhF2Cury7zme0zpWYwC4RMH/AxqK4z6DlmAwu2zycN097TMM/ZUXePmvgY7JSB5BIiY4ZxlnNbJy4756XDSBt41AaHxqWNcfs=-----END CERTIFICATE-----"
}, {
"version" : "V3",
"serialNumber" : "f4:80:33:5f:e5:77:2a:f7",
"issuedTo" : "sfo-m01-nsx01.rainpole.io",
"issuedBy" : "OU=ISBU, O=VMware, L= Bangalore, ST=Karnataka, C=IN, CN=test1.openssl.eng.vmware.com",
"notBefore" : "2019-07-25T07:38:55.000Z",
"notAfter" : "2020-07-24T07:38:55.000Z",
"signatureAlgorithm" : "SHA256withRSA",
"subject" : "C=US, CN=sfo-m01-nsx01.rainpole.io",
"subjectAlternativeName" : [ "sfo-m01-nsx01.rainpole.io" ],
"publicKey" : "BA:16:16:DF:00:B2:88:C9:F9:E0:7F:72:B6:DC:83:1F:87:46:C3:C4:4B:8B:EB:C0:AD:B9:A2:FB:31:75:0A:89:12:25:58:B6:42:B1:78:A3:7F:19:B0:03:19:35:AD:51:5D:08:36:CB:C3:6E:63:B2:CE:89:2D:24:AD:EA:DD:BD:73:0A:06:84:4E:4D:83:AF:B8:EC:F9:E1:98:9F:35:9F:83:11:DD:71:61:5E:CF:DE:9A:BF:0D:A7:8A:64:F2:94:26:5D:A7:E0:20:B9:C2:01:BB:62:F2:7D:C3:A9:9B:91:DE:49:1E:97:B7:E8:CA:38:1C:E9:92:76:07:A8:26:95:5D:C1:89:E7:EA:27:03:57:BE:D2:76:B5:E4:AC:89:10:67:7F:42:DA:5D:52:5C:9F:65:59:A4:42:0B:81:F8:77:B5:F8:2D:18:DA:9B:1A:F4:BD:BD:F2:33:97:7A:EA:64:1B:CE:58:CF:9C:E7:18:60:94:CE:66:C9:57:7E:62:A2:AD:47:3D:29:D2:F8:DB:AB:D7:8F:D1:7D:8A:9A:FC:68:37:48:3C:AD:38:A5:76:D8:4C:E2:64:AE:87:B7:DA:78:3E:EB:2B:C8:70:43:4D:CB:4E:72:80:43:CB:D2:43:A7:71:16:22:27:0F:A1:DB:0A:83:88:2C:09:49:0A:35:8C:76:76:55:E2:3A:1C:7C:74:F0:91:60:A2:45:7F:6C:7A:2B:A5:51:87:25:D0:DB:9C:E0:B8:32:27:83:D6:3F:70:C5:7A:1B:92:09:E7:77:39:3A:C2:28:B1:5C:8A:3F:42:FE:D6:6A:7D:F6:E5:D6:FB:B0:DB:AB:D9:65:29:BE:75:DA:07:E8:38:B2:A0:75:9F:45:8E:FF:6B:AF:27:DB:FA:2E:AB:80:51:09:88:7D:7B:AC:A4:B7:15:41:30:A0:E1:0F:C7:DD:D1:F4:84:7D:D3:F8:B1:B0:F9:55:8F:A6:DC:44:E0:E6:0F:C5:DF:32:93:51:8D:7D:BA:79:4A:3E:72:CA:CB:9A:2E:8B:E6:A0:63:57:C8:CD:92:F8:70:0A:1E:6D:CA:DF:35:D4:91:45:E7:DB:7F:86:32:E9:8C:A3:D2:D0:35:15:70:A9:DA:39:DF:FA:76:9C:EF:5D:B6:A4:58:49:EE:A0:B1:74:33:D2:41:97:F6:FE:0C:07:66:DE:56:5F:3E:15:03:70:3D:56:80:5E:F6:CB:C3:FA:78:CE:14:0C:D7:E1:53:48:8B:5A:61:C0:04:BA:DD:ED:B3:E4:F1:76:AD:FD:03:27:C9:FB:EC:5A:75:0B:22:8F:6A:E8:35:47:FB:04:B7:A7:5F:51:FA:46:EF:00:64:03:27:1C:FB",
"publicKeyAlgorithm" : "RSA",
"keySize" : "2048",
"thumbprintAlgorithm" : "SHA-256",
"thumbprint" : "02:B1:D1:01:18:9F:07:39:E1:7C:94:BC:50:07:64:E8:45:8C:F8:73:3E:A9:23:BC:D2:BD:B1:17:E9:B3:C0:11",
"numberOfDaysToExpire" : 365,
"expirationStatus" : "ACTIVE",
"pemEncoded" : "-----BEGIN CERTIFICATE-----MIIFRDCCBCygAwIBAgIJAOx9cA2cGcUUMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZtd2FyZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6FhbfALKIyfngf3K23IMfh0bDxEuL68CtuaL7MXUKiRIlWLZCsXijfxmwAxk1rVFdCDbLw25jss6JLSSt6t29cwoGhE5Ng6+47PnhmJ81n4MR3XFhXs/emr8Np4pk8pQmXafgILnCAbti8n3DqZuR3kkel7foyjgc6ZJ2B6gmlV3BiefqJwNXvtJ2teSsiRBnf0LaXVJcn2VZpEILgfh3tfgtGNqbGvS9vfIzl3rqZBvOWM+c5xhglM5myVd+YqKtRz0p0vjbq9eP0X2KmvxoN0g8rTildthM4mSuh7faeD7rK8hwQ03LTnKAQ8vSQ6dxFiInD6HbCoOILAlJCjWMdnZV4jocfHTwkWCiRX9seiulUYcl0Nuc4LgyJ4PWP3DFehuSCed3OTrCKLFcij9C/tZqffbl1vuw26vZZSm+ddoH6DiyoHWfRY7/a68n2/ouq4BRCYh9e6yktxVBMKDhD8fd0fSEfdP4sbD5VY+m3ETg5g/F3zKTUY19unlKPnLKy5oui+agY1fIzZL4cAoebcrfNdSRRefbf4Yy6Yyj0tA1FXCp2jnf+nac7122pFhJ7qCxdDPSQZf2/gwHZt5WXz4VA3A9VoBe9svD+njOFAzX4VNIi1phwAS63e2z5PF2rf0DJ8n77Fp1CyKPaug1R/sEt6dfUfpG7wBkAycc+wIDAQABo28wbTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAyBgNVHREEKzApgiFsb2FkLWJhbGFuY2VyLnZyYWNrLnZzcGhlcmUubG9jYWyHBAoAAA8wHwYDVR0jBBgwFoAUauWGErq+/JHwQ3qju9Ch8V2097MwDQYJKoZIhvcNAQELBQADggEBAMCvNCQ3KsvncoYK9fI0cfcBYEpFuToB+duK7yztklf8P6PLRSWdU39KaG+xv5768K+xe90riOYs0Mhcs0IuUQW2F6kCnlW3ff2R3pvTeM3kGqXclk4KGKRNnhhsF3Ze8QW3drH0dzD3vNcumdLr+GvG6vF2O/Pl3+Nn9dwE72ZVl7Ai970jJM5CVjI+wST19ZQPpq1E3aad3Bk+AQcQCIGputBGkHFZUGX4T6jPH0uDOcSRjH7v6TXhF2Cury7zme0zpWYwC4RMH/AxqK4z6DlmAwu2zycN097TMM/ZUXePmvgY7JSB5BIiY4ZxlnNbJy4756XDSBt41AaHxqWNcfs=-----END CERTIFICATE-----"
} ]
}
|
Tip
|
Refer to: View certificate of all the resources in a domain |
|
Warning
|
Certificate installation will replace the already installed certificates. |
|
Note
|
The CSRs cannot be fetched after successful certificate installation. |
|
Note
|
Only singleton object of a particular certificate authority will exist at any point of time in the VCF environment. |
|
Note
|
Only the latest generated CSRs will exist in the VCF environment after a series of generate CSR operation. |
|
Note
|
Only the latest generated certificates will exist in the VCF environment after a series of generate certificate operation. |
Related APIs
Create a certificate authority
Get certificate authorities information
Get certificate authority information
Configure existing certificate authority
Generate CSR(s)
Get available CSR(s) in json format
Generate certificate(s) for the selected resource(s) in a domain
Get latest generated certificate(s) in a domain.
Replace certificate(s) for the selected resource(s) in a domain
View certificate of all the resources in a domain
Get the Tasks
Get a Task
2.26.2. Install Certificates By Offline Mode
The following steps have to be followed to install certificates signed by external third party certificate authorities.
Prerequisites
-
VCF environment.
Steps
-
Generate CSR by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/csrs' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"csrGenerationSpec" : {
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU",
"email" : "[email protected]",
"keySize" : "2048",
"keyAlgorithm" : "RSA"
},
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER",
"sans" : [ "sfo-m01-nsx01.rainpole.io", "10.0.0.6" ]
} ]
}'
HTTP Request
PUT /v1/domains/MGMT/csrs HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 415
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"csrGenerationSpec" : {
"country" : "IN",
"state" : "Karnataka",
"locality" : "Bengaluru",
"organization" : "VMware",
"organizationUnit" : "ISBU",
"email" : "[email protected]",
"keySize" : "2048",
"keyAlgorithm" : "RSA"
},
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER",
"sans" : [ "sfo-m01-nsx01.rainpole.io", "10.0.0.6" ]
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/286698a3-d5b0-4b24-944e-ac93bc064673
Content-Type: application/json
Content-Length: 79
{
"id" : "286698a3-d5b0-4b24-944e-ac93bc064673",
"status" : "IN_PROGRESS"
}
|
Tip
|
Refer to: Generate CSR(s) |
-
Poll the status of the task using the task API with the ID from the response of the previous API.
TipRefer to: Get a Task -
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer to: Get a Task. -
If the "status" is "SUCCESSFUL", the task is completed successfully.
-
If the "status" is "FAILED", execute the generate CSR request again.
-
-
If the generation of CSR is successful, fetch the contents of the CSR to check for which resources CSR is generated by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/csrs' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/MGMT/csrs HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1154
{
"elements" : [ {
"csrEncodedContent" : "-----BEGIN CERTIFICATE REQUEST-----\nMIICtDCCAZwCAQAwbzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH\nEwJQQTEMMAoGA1UECxMDVkNGMQ8wDQYDVQQKEwZWTXdhcmUxJzAlBgNVBAMTHm5z\neE1hbmFnZXIudnJhY2sudnNwaGVyZS5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAKtumknTB1do77E5rCXGRgqT6iqTgW0moiDZS6USGkeTQMvj\nR5JnQjq11xJl0y1meSdA6ufft8xndOr1b8alRs4+FreuJLl/8HBIVLRECrfkfIn0\nImwZzGFih2wwrCD/evb/7paNcdt97+KF2nwqB5ADysyFkjYs0uiJxxE5i8HsST1L\n+AStKeAV0lOk/2n/qgHPUcnjH7KchJAet9DFuKBWUW7QIryQffuiQrdAFqcEPHJC\nubHyqnoBPktosD3SXs1UickNiTyXIRC1NGHK/w7VTTJfBxkXxIdejazVGjCAW8w0\n/N4iW3rCaxSpnggWLGYFbGEkhikgtkpj8zIRjk8CAwEAAaAAMA0GCSqGSIb3DQEB\nCwUAA4IBAQBkxJTuymqggHLhWbtnvtA3mU4freKzF2XDUUP+K5kz43j2IXNbsCJI\nWDpY9OCVj9NHZ+uFTvQLvCb3E+6h0vE4Dw2PVUuOpz/Ag1qmgYIxtC5vzN4gLKih\nUNROG5wYryYKO8YL4MB3XIQdx9b8y8Fxyh3ZHIvdghhUPBooWzeCUXVPD8Le4p52\nD8yMGREtSQL4avLughd+SFd0fvKQq+/K42WOFn7PYVfgLBqdW1YCjEIfAdsG+bhG\n3CIBan84uV3cKFSM4NtxCvHZnuRZmx6+0Frtt1w9sndjKvHrA6ozoHO9O1gl/E9D\nY1rzOB7KFzGiZHAMT2Cf/x/xGo8rTGFZ\n-----END CERTIFICATE REQUEST-----",
"resource" : {
"fqdn" : "sfo-m01-nsx01.rainpole.io"
}
} ]
}
|
Tip
|
Refer to: Get available CSR(s) in json format |
-
After successful CSR generation, download CSR in ".tar.gz" format by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/csrs/downloads' -i -X GET \
-H 'Accept: application/octet-stream' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/MGMT/csrs/downloads HTTP/1.1
Accept: application/octet-stream
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 1012
Content-Disposition: attachment; filename="csrString.txt"
Accept-Ranges: bytes
-----BEGIN CERTIFICATE REQUEST-----
MIICtDCCAZwCAQAwbzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
EwJQQTEMMAoGA1UECxMDVkNGMQ8wDQYDVQQKEwZWTXdhcmUxJzAlBgNVBAMTHm5z
eE1hbmFnZXIudnJhY2sudnNwaGVyZS5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAKtumknTB1do77E5rCXGRgqT6iqTgW0moiDZS6USGkeTQMvj
R5JnQjq11xJl0y1meSdA6ufft8xndOr1b8alRs4+FreuJLl/8HBIVLRECrfkfIn0
ImwZzGFih2wwrCD/evb/7paNcdt97+KF2nwqB5ADysyFkjYs0uiJxxE5i8HsST1L
+AStKeAV0lOk/2n/qgHPUcnjH7KchJAet9DFuKBWUW7QIryQffuiQrdAFqcEPHJC
ubHyqnoBPktosD3SXs1UickNiTyXIRC1NGHK/w7VTTJfBxkXxIdejazVGjCAW8w0
/N4iW3rCaxSpnggWLGYFbGEkhikgtkpj8zIRjk8CAwEAAaAAMA0GCSqGSIb3DQEB
CwUAA4IBAQBkxJTuymqggHLhWbtnvtA3mU4freKzF2XDUUP+K5kz43j2IXNbsCJI
WDpY9OCVj9NHZ+uFTvQLvCb3E+6h0vE4Dw2PVUuOpz/Ag1qmgYIxtC5vzN4gLKih
UNROG5wYryYKO8YL4MB3XIQdx9b8y8Fxyh3ZHIvdghhUPBooWzeCUXVPD8Le4p52
D8yMGREtSQL4avLughd+SFd0fvKQq+/K42WOFn7PYVfgLBqdW1YCjEIfAdsG+bhG
3CIBan84uV3cKFSM4NtxCvHZnuRZmx6+0Frtt1w9sndjKvHrA6ozoHO9O1gl/E9D
Y1rzOB7KFzGiZHAMT2Cf/x/xGo8rTGFZ
-----END CERTIFICATE REQUEST-----
|
Tip
|
Refer to: Download available CSR(s) in tar.gz format |
-
Use the downloaded CSRs to have it manually signed by external certificate authorities.
-
Verify that the certificate authority configuration files have been configured and packaged in the form of
a ".tar.gz" file with the following conditions-
The name of the top-level directory must exactly match the name of the domain to which certificates are to be installed.
-
The PEM-encoded root CA certificate chain file (rootca.crt) must reside inside this top-level directory.
-
This directory must contain one sub-directory for each component resource and the name of each sub-directory must exactly match the resource fqdn.
-
Each sub-directory must contain a corresponding ".csr" file, whose name must exactly match the
resource fqdn followed by ".csr" extension. -
Each sub-directory must contain a corresponding ".crt" file, whose name must exactly match the
resource fqdn followed by ".crt" extension.
-
-
Upload the packaged signed certificates by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/certificates/uploads' -i -X PUT \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Bearer etYWRta....' \
-F '[email protected];type=multipart/form-data'
HTTP Request
PUT /v1/domains/MGMT/certificates/uploads HTTP/1.1
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=MGMT.tar.gz
Content-Type: multipart/form-data
-----BEGIN CERTIFICATE-----
MIIC2zCCAcMCAQAwgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRIwEAYDVQQHEwlQYWxvIEFsdG8xHjAcBgNVBAsTFVZNd2FyZSBJVCAgZGVwYXJ0
bWVudDEUMBIGA1UEChMLVk1XYXJlIEluYy4xJzAlBgNVBAMTHm5zeE1hbmFnZXIu
dnJhY2sudnNwaGVyZS5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAPgggMHrSsbcC9JYjGQCDiSTsG0LPGjMcTKgEaUi6zcVKWAv7ccpvW7cwFtc
2FqtM4zlETOK0tHZmS17uUg/tsJSWq+nr2VQ541XifvZOVINcIlKnzGJO32d4qxO
3xY3lr8Pj7xZe0xZK3iP+TBiUdtHggSYJ6uWYHoZAJ74Jqp4pVdwQgjm1sINldYm
e1x+txQINQB7MFG2tflQ7iXRaiLGZKXR86xDvw/T1OcPPjtSnwFjYfeHtE2KjuT9
RiCXl4cUuH+pjQTsWSSByK0LyC8U9/tqDGnMiERxBl1g9rBKQMOoZmTCF3gr7hhx
PZ16JlYqU9hbAjPxVkGO0NkI9PsCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAq
vqrtJ4nQepjbwOmJor2ZHOUaoqwImE3OJaa6PxaikD1c14maMXJ4XQm+ONJooCPx
CL6TVs2DSydxVzRFHj5dyAz7MJ8XIkqijvarxb+gLjhim4+O+MuS7hHaCnVU9KMg
i3QhWFc1SwDuhiHL3RXbf04gOzrbEhIPa9rBKQMOoZmTCF3gr7JiuSqBvKtG3cus
3DjxA1z9CGUgIrYBlOm2/xPDp91AIMGeP9YXh8ue/NVPZ+tlZOCgKGiS05CTK5Wr
cHaC7yQqIyZdKP9EQhv3yhxL4ho9e1xL9f4puv3CBE5VmCb8LZ/5CRIKOHEsIV70
XGKY78p5LoKf4ro2LLQ+
-----END CERTIFICATE-----
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP Response
HTTP/1.1 200 OK
|
Tip
|
Refer to: Upload certificates to the certificate store |
-
After successful upload operation, install the signed certificates on remote resources by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/certificates' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"operationType" : "INSTALL",
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER"
} ]
}'
HTTP Request
PATCH /v1/domains/MGMT/certificates HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 129
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"operationType" : "INSTALL",
"resources" : [ {
"fqdn" : "sfo-m01-nsx01.rainpole.io",
"type" : "NSX_MANAGER"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/c2cc57cc-9b69-440b-a550-b19595ccc6ae
Content-Type: application/json
Content-Length: 79
{
"id" : "c2cc57cc-9b69-440b-a550-b19595ccc6ae",
"status" : "IN_PROGRESS"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
TipRefer to: Get a Task -
Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.
TipRefer 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 |
-
Fetch the installed certificates by invoking the API
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/MGMT/resource-certificates' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/domains/MGMT/resource-certificates HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 8435
{
"elements" : [ {
"version" : "V3",
"serialNumber" : "ca:0b:5d:6d:07:4e:db:41",
"issuedTo" : "sfo-m01-vc01.rainpole.io",
"issuedBy" : "OU=VMware Engineering, O=sfo-m01-psc01.rainpole.io, ST=California, C=US, DC=local, DC=vsphere, CN=CA",
"notBefore" : "2019-07-11T10:16:05.000Z",
"notAfter" : "2029-07-06T08:17:24.000Z",
"signatureAlgorithm" : "SHA256withRSA",
"subject" : "C=US, CN=sfo-m01-vc01.rainpole.io",
"subjectAlternativeName" : [ "sfo-m01-vc01.rainpole.io" ],
"publicKey" : "BA:16:16:DF:00:B2:88:C9:F9:E0:7F:72:B6:DC:83:1F:87:46:C3:C4:4B:8B:EB:C0:AD:B9:A2:FB:31:75:0A:89:12:25:58:B6:42:B1:78:A3:7F:19:B0:03:19:35:AD:51:5D:08:36:CB:C3:6E:63:B2:CE:89:2D:24:AD:EA:DD:BD:73:0A:06:84:4E:4D:83:AF:B8:EC:F9:E1:98:9F:35:9F:83:11:DD:71:61:5E:CF:DE:9A:BF:0D:A7:8A:64:F2:94:26:5D:A7:E0:20:B9:C2:01:BB:62:F2:7D:C3:A9:9B:91:DE:49:1E:97:B7:E8:CA:38:1C:E9:92:76:07:A8:26:95:5D:C1:89:E7:EA:27:03:57:BE:D2:76:B5:E4:AC:89:10:67:7F:42:DA:5D:52:5C:9F:65:59:A4:42:0B:81:F8:77:B5:F8:2D:18:DA:9B:1A:F4:BD:BD:F2:33:97:7A:EA:64:1B:CE:58:CF:9C:E7:18:60:94:CE:66:C9:57:7E:62:A2:AD:47:3D:29:D2:F8:DB:AB:D7:8F:D1:7D:8A:9A:FC:68:37:48:3C:AD:38:A5:76:D8:4C:E2:64:AE:87:B7:DA:78:3E:EB:2B:C8:70:43:4D:CB:4E:72:80:43:CB:D2:43:A7:71:16:22:27:0F:A1:DB:0A:83:88:2C:09:49:0A:35:8C:76:76:55:E2:3A:1C:7C:74:F0:91:60:A2:45:7F:6C:7A:2B:A5:51:87:25:D0:DB:9C:E0:B8:32:27:83:D6:3F:70:C5:7A:1B:92:09:E7:77:39:3A:C2:28:B1:5C:8A:3F:42:FE:D6:6A:7D:F6:E5:D6:FB:B0:DB:AB:D9:65:29:BE:75:DA:07:E8:38:B2:A0:75:9F:45:8E:FF:6B:AF:27:DB:FA:2E:AB:80:51:09:88:7D:7B:AC:A4:B7:15:41:30:A0:E1:0F:C7:DD:D1:F4:84:7D:D3:F8:B1:B0:F9:55:8F:A6:DC:44:E0:E6:0F:C5:DF:32:93:51:8D:7D:BA:79:4A:3E:72:CA:CB:9A:2E:8B:E6:A0:63:57:C8:CD:92:F8:70:0A:1E:6D:CA:DF:35:D4:91:45:E7:DB:7F:86:32:E9:8C:A3:D2:D0:35:15:70:A9:DA:39:DF:FA:76:9C:EF:5D:B6:A4:58:49:EE:A0:B1:74:33:D2:41:97:F6:FE:0C:07:66:DE:56:5F:3E:15:03:70:3D:56:80:5E:F6:CB:C3:FA:78:CE:14:0C:D7:E1:53:48:8B:5A:61:C0:04:BA:DD:ED:B3:E4:F1:76:AD:FD:03:27:C9:FB:EC:5A:75:0B:22:8F:6A:E8:35:47:FB:04:B7:A7:5F:51:FA:46:EF:00:64:03:27:1C:FB",
"publicKeyAlgorithm" : "RSA",
"keySize" : "2048",
"thumbprintAlgorithm" : "SHA-256",
"thumbprint" : "35:4B:A5:11:A9:3D:39:0D:B7:95:9B:4D:07:5C:73:40:D0:DF:63:D4:68:97:6E:1B:20:70:87:AE:40:3F:7E:AD",
"numberOfDaysToExpire" : 3644,
"expirationStatus" : "ACTIVE",
"pemEncoded" : "-----BEGIN CERTIFICATE-----MIIFRDCCBCygAwIBAgIJAOx9cA2cGcUUMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZtd2FyZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6FhbfALKIyfngf3K23IMfh0bDxEuL68CtuaL7MXUKiRIlWLZCsXijfxmwAxk1rVFdCDbLw25jss6JLSSt6t29cwoGhE5Ng6+47PnhmJ81n4MR3XFhXs/emr8Np4pk8pQmXafgILnCAbti8n3DqZuR3kkel7foyjgc6ZJ2B6gmlV3BiefqJwNXvtJ2teSsiRBnf0LaXVJcn2VZpEILgfh3tfgtGNqbGvS9vfIzl3rqZBvOWM+c5xhglM5myVd+YqKtRz0p0vjbq9eP0X2KmvxoN0g8rTildthM4mSuh7faeD7rK8hwQ03LTnKAQ8vSQ6dxFiInD6HbCoOILAlJCjWMdnZV4jocfHTwkWCiRX9seiulUYcl0Nuc4LgyJ4PWP3DFehuSCed3OTrCKLFcij9C/tZqffbl1vuw26vZZSm+ddoH6DiyoHWfRY7/a68n2/ouq4BRCYh9e6yktxVBMKDhD8fd0fSEfdP4sbD5VY+m3ETg5g/F3zKTUY19unlKPnLKy5oui+agY1fIzZL4cAoebcrfNdSRRefbf4Yy6Yyj0tA1FXCp2jnf+nac7122pFhJ7qCxdDPSQZf2/gwHZt5WXz4VA3A9VoBe9svD+njOFAzX4VNIi1phwAS63e2z5PF2rf0DJ8n77Fp1CyKPaug1R/sEt6dfUfpG7wBkAycc+wIDAQABo28wbTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAyBgNVHREEKzApgiFsb2FkLWJhbGFuY2VyLnZyYWNrLnZzcGhlcmUubG9jYWyHBAoAAA8wHwYDVR0jBBgwFoAUauWGErq+/JHwQ3qju9Ch8V2097MwDQYJKoZIhvcNAQELBQADggEBAMCvNCQ3KsvncoYK9fI0cfcBYEpFuToB+duK7yztklf8P6PLRSWdU39KaG+xv5768K+xe90riOYs0Mhcs0IuUQW2F6kCnlW3ff2R3pvTeM3kGqXclk4KGKRNnhhsF3Ze8QW3drH0dzD3vNcumdLr+GvG6vF2O/Pl3+Nn9dwE72ZVl7Ai970jJM5CVjI+wST19ZQPpq1E3aad3Bk+AQcQCIGputBGkHFZUGX4T6jPH0uDOcSRjH7v6TXhF2Cury7zme0zpWYwC4RMH/AxqK4z6DlmAwu2zycN097TMM/ZUXePmvgY7JSB5BIiY4ZxlnNbJy4756XDSBt41AaHxqWNcfs=-----END CERTIFICATE-----"
}, {
"version" : "V3",
"serialNumber" : "f4:80:33:5f:e5:77:2a:f7",
"issuedTo" : "sfo-m01-nsx01.rainpole.io",
"issuedBy" : "OU=ISBU, O=VMware, L= Bangalore, ST=Karnataka, C=IN, CN=test1.openssl.eng.vmware.com",
"notBefore" : "2019-07-25T07:38:55.000Z",
"notAfter" : "2020-07-24T07:38:55.000Z",
"signatureAlgorithm" : "SHA256withRSA",
"subject" : "C=US, CN=sfo-m01-nsx01.rainpole.io",
"subjectAlternativeName" : [ "sfo-m01-nsx01.rainpole.io" ],
"publicKey" : "BA:16:16:DF:00:B2:88:C9:F9:E0:7F:72:B6:DC:83:1F:87:46:C3:C4:4B:8B:EB:C0:AD:B9:A2:FB:31:75:0A:89:12:25:58:B6:42:B1:78:A3:7F:19:B0:03:19:35:AD:51:5D:08:36:CB:C3:6E:63:B2:CE:89:2D:24:AD:EA:DD:BD:73:0A:06:84:4E:4D:83:AF:B8:EC:F9:E1:98:9F:35:9F:83:11:DD:71:61:5E:CF:DE:9A:BF:0D:A7:8A:64:F2:94:26:5D:A7:E0:20:B9:C2:01:BB:62:F2:7D:C3:A9:9B:91:DE:49:1E:97:B7:E8:CA:38:1C:E9:92:76:07:A8:26:95:5D:C1:89:E7:EA:27:03:57:BE:D2:76:B5:E4:AC:89:10:67:7F:42:DA:5D:52:5C:9F:65:59:A4:42:0B:81:F8:77:B5:F8:2D:18:DA:9B:1A:F4:BD:BD:F2:33:97:7A:EA:64:1B:CE:58:CF:9C:E7:18:60:94:CE:66:C9:57:7E:62:A2:AD:47:3D:29:D2:F8:DB:AB:D7:8F:D1:7D:8A:9A:FC:68:37:48:3C:AD:38:A5:76:D8:4C:E2:64:AE:87:B7:DA:78:3E:EB:2B:C8:70:43:4D:CB:4E:72:80:43:CB:D2:43:A7:71:16:22:27:0F:A1:DB:0A:83:88:2C:09:49:0A:35:8C:76:76:55:E2:3A:1C:7C:74:F0:91:60:A2:45:7F:6C:7A:2B:A5:51:87:25:D0:DB:9C:E0:B8:32:27:83:D6:3F:70:C5:7A:1B:92:09:E7:77:39:3A:C2:28:B1:5C:8A:3F:42:FE:D6:6A:7D:F6:E5:D6:FB:B0:DB:AB:D9:65:29:BE:75:DA:07:E8:38:B2:A0:75:9F:45:8E:FF:6B:AF:27:DB:FA:2E:AB:80:51:09:88:7D:7B:AC:A4:B7:15:41:30:A0:E1:0F:C7:DD:D1:F4:84:7D:D3:F8:B1:B0:F9:55:8F:A6:DC:44:E0:E6:0F:C5:DF:32:93:51:8D:7D:BA:79:4A:3E:72:CA:CB:9A:2E:8B:E6:A0:63:57:C8:CD:92:F8:70:0A:1E:6D:CA:DF:35:D4:91:45:E7:DB:7F:86:32:E9:8C:A3:D2:D0:35:15:70:A9:DA:39:DF:FA:76:9C:EF:5D:B6:A4:58:49:EE:A0:B1:74:33:D2:41:97:F6:FE:0C:07:66:DE:56:5F:3E:15:03:70:3D:56:80:5E:F6:CB:C3:FA:78:CE:14:0C:D7:E1:53:48:8B:5A:61:C0:04:BA:DD:ED:B3:E4:F1:76:AD:FD:03:27:C9:FB:EC:5A:75:0B:22:8F:6A:E8:35:47:FB:04:B7:A7:5F:51:FA:46:EF:00:64:03:27:1C:FB",
"publicKeyAlgorithm" : "RSA",
"keySize" : "2048",
"thumbprintAlgorithm" : "SHA-256",
"thumbprint" : "02:B1:D1:01:18:9F:07:39:E1:7C:94:BC:50:07:64:E8:45:8C:F8:73:3E:A9:23:BC:D2:BD:B1:17:E9:B3:C0:11",
"numberOfDaysToExpire" : 365,
"expirationStatus" : "ACTIVE",
"pemEncoded" : "-----BEGIN CERTIFICATE-----MIIFRDCCBCygAwIBAgIJAOx9cA2cGcUUMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZtd2FyZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6FhbfALKIyfngf3K23IMfh0bDxEuL68CtuaL7MXUKiRIlWLZCsXijfxmwAxk1rVFdCDbLw25jss6JLSSt6t29cwoGhE5Ng6+47PnhmJ81n4MR3XFhXs/emr8Np4pk8pQmXafgILnCAbti8n3DqZuR3kkel7foyjgc6ZJ2B6gmlV3BiefqJwNXvtJ2teSsiRBnf0LaXVJcn2VZpEILgfh3tfgtGNqbGvS9vfIzl3rqZBvOWM+c5xhglM5myVd+YqKtRz0p0vjbq9eP0X2KmvxoN0g8rTildthM4mSuh7faeD7rK8hwQ03LTnKAQ8vSQ6dxFiInD6HbCoOILAlJCjWMdnZV4jocfHTwkWCiRX9seiulUYcl0Nuc4LgyJ4PWP3DFehuSCed3OTrCKLFcij9C/tZqffbl1vuw26vZZSm+ddoH6DiyoHWfRY7/a68n2/ouq4BRCYh9e6yktxVBMKDhD8fd0fSEfdP4sbD5VY+m3ETg5g/F3zKTUY19unlKPnLKy5oui+agY1fIzZL4cAoebcrfNdSRRefbf4Yy6Yyj0tA1FXCp2jnf+nac7122pFhJ7qCxdDPSQZf2/gwHZt5WXz4VA3A9VoBe9svD+njOFAzX4VNIi1phwAS63e2z5PF2rf0DJ8n77Fp1CyKPaug1R/sEt6dfUfpG7wBkAycc+wIDAQABo28wbTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAyBgNVHREEKzApgiFsb2FkLWJhbGFuY2VyLnZyYWNrLnZzcGhlcmUubG9jYWyHBAoAAA8wHwYDVR0jBBgwFoAUauWGErq+/JHwQ3qju9Ch8V2097MwDQYJKoZIhvcNAQELBQADggEBAMCvNCQ3KsvncoYK9fI0cfcBYEpFuToB+duK7yztklf8P6PLRSWdU39KaG+xv5768K+xe90riOYs0Mhcs0IuUQW2F6kCnlW3ff2R3pvTeM3kGqXclk4KGKRNnhhsF3Ze8QW3drH0dzD3vNcumdLr+GvG6vF2O/Pl3+Nn9dwE72ZVl7Ai970jJM5CVjI+wST19ZQPpq1E3aad3Bk+AQcQCIGputBGkHFZUGX4T6jPH0uDOcSRjH7v6TXhF2Cury7zme0zpWYwC4RMH/AxqK4z6DlmAwu2zycN097TMM/ZUXePmvgY7JSB5BIiY4ZxlnNbJy4756XDSBt41AaHxqWNcfs=-----END CERTIFICATE-----"
} ]
}
|
Tip
|
Refer to: View certificate of all the resources in a domain |
|
Warning
|
Certificate installation will replace the already installed certificates. |
|
Note
|
The CSRs cannot be fetched or downloaded after successful certificate installation. |
|
Note
|
Only the latest generated CSRs will exist in the VCF environment after a series of generate CSR operation. |
|
Note
|
Only the latest uploaded certificates will exist in the VCF environment after a series of upload certificate operation. |
2.26.3. Add trusted certificate to the SDDC Manager
Prerequisites
-
VCF environment.
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-manager/trusted-certificates' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"certificate" : "-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----",
"certificateUsageType" : "TRUSTED_FOR_OUTBOUND"
}'
$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-manager/trusted-certificates' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"certificate" : "-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----",
"certificateUsageType" : "TRUSTED_FOR_INBOUND"
}'
HTTP Request
POST /v1/sddc-manager/trusted-certificates HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 136
Host: sfo-vcf01.rainpole.io
{
"certificate" : "-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----",
"certificateUsageType" : "TRUSTED_FOR_OUTBOUND"
}
POST /v1/sddc-manager/trusted-certificates HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 135
Host: sfo-vcf01.rainpole.io
{
"certificate" : "-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----",
"certificateUsageType" : "TRUSTED_FOR_INBOUND"
}
HTTP Response
HTTP/1.1 200 OK
HTTP/1.1 200 OK
|
Tip
|
Refer to: Add trusted certificate to the SDDC manager |
-
If the API response is 200 and CertificateUsageType is TRUSTED_FOR_OUTBOUND
2.27. vCenters
2.27.1. Get a vCenter
Prerequisites
-
ID of the vCenter
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vcenters/c0703437-6756-470b-9e1c-f9d3bbc9b1c6' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/vcenters/c0703437-6756-470b-9e1c-f9d3bbc9b1c6 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 226
{
"id" : "c0703437-6756-470b-9e1c-f9d3bbc9b1c6",
"fqdn" : "sfo-m01-vc01.rainpole.io",
"ipAddress" : "10.0.0.6",
"domain" : {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
},
"version" : "7.0.1.00000-16796246"
}
2.27.2. Get the vCenters
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vcenters' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/vcenters HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 510
{
"elements" : [ {
"id" : "c0703437-6756-470b-9e1c-f9d3bbc9b1c6",
"fqdn" : "sfo-m01-vc01.rainpole.io",
"ipAddress" : "10.0.0.6",
"domain" : {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
},
"version" : "7.0.1.00000-16796246"
}, {
"id" : "c0703437-6846-470b-9e1c-f9d3bbc9b1c9",
"fqdn" : "sfo-w01-vc01.rainpole.io",
"ipAddress" : "10.0.0.20",
"domain" : {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1"
},
"version" : "7.0.1.00000-16796246"
} ]
}
2.27.3. Get vCenters for a domain
Prerequisites
-
ID of the Domain
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vcenters?domainId=c0703437-6746-470b-9e1c-f9d3bbc9b1c5' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/vcenters?domainId=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: 265
{
"elements" : [ {
"id" : "c0703437-6756-470b-9e1c-f9d3bbc9b1c6",
"fqdn" : "sfo-m01-vc01.rainpole.io",
"ipAddress" : "10.0.0.6",
"domain" : {
"id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c5"
},
"version" : "7.0.1.00000-16796246"
} ]
}
2.28. NSX-T Clusters
2.28.1. Get an NSX-T Cluster
Prerequisites
-
ID of the NSX-T Cluster
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters/d77231ad-bf61-4331-88f3-b52534d564ba' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/nsxt-clusters/d77231ad-bf61-4331-88f3-b52534d564ba HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 822
{
"id" : "d77231ad-bf61-4331-88f3-b52534d564ba",
"vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
"vip" : "172.19.10.81",
"domains" : [ {
"id" : "5c6e4716-b069-4481-aa6e-4eca8bf5596a",
"name" : "sfo-w01"
} ],
"nodes" : [ {
"id" : "7d69b00d-6e5c-41a0-aa21-7152c6647c54",
"fqdn" : "sfo-w01-nsx01a.sfo.rainpole.io",
"ipAddress" : "172.19.10.84",
"name" : "sfo-w01-nsx01a"
}, {
"id" : "c9662d07-fa06-41b9-8253-bbbe17251658",
"fqdn" : "sfo-w01-nsx01b.sfo.rainpole.io",
"ipAddress" : "172.19.10.83",
"name" : "sfo-w01-nsx01b"
}, {
"id" : "39a6ca0b-5071-473f-8f45-e1aefeba371d",
"fqdn" : "sfo-w01-nsx01c.sfo.rainpole.io",
"ipAddress" : "172.19.10.82",
"name" : "sfo-w01-nsx01c"
} ],
"isShared" : false,
"isShareable" : true,
"isVlcmCompatible" : false
}
2.28.2. Get the NSX-T Clusters
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/nsxt-clusters HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 903
{
"elements" : [ [ {
"id" : "d77231ad-bf61-4331-88f3-b52534d564ba",
"vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
"vip" : "172.19.10.81",
"domains" : [ {
"id" : "5c6e4716-b069-4481-aa6e-4eca8bf5596a",
"name" : "sfo-w01"
} ],
"nodes" : [ {
"id" : "7d69b00d-6e5c-41a0-aa21-7152c6647c54",
"fqdn" : "sfo-w01-nsx01a.sfo.rainpole.io",
"ipAddress" : "172.19.10.84",
"name" : "sfo-w01-nsx01a"
}, {
"id" : "c9662d07-fa06-41b9-8253-bbbe17251658",
"fqdn" : "sfo-w01-nsx01b.sfo.rainpole.io",
"ipAddress" : "172.19.10.83",
"name" : "sfo-w01-nsx01b"
}, {
"id" : "39a6ca0b-5071-473f-8f45-e1aefeba371d",
"fqdn" : "sfo-w01-nsx01c.sfo.rainpole.io",
"ipAddress" : "172.19.10.82",
"name" : "sfo-w01-nsx01c"
} ],
"isShared" : false,
"isShareable" : true,
"isVlcmCompatible" : false
} ] ]
}
2.28.3. Get the NSX-T cluster(s) based on a Criterion
This API is used to get the NSX-T clusters that meets a specific criterion.
Steps
-
Invoke the Get NSX-T Clusters Criterion API to list all the criteria supported.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters/criteria' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/nsxt-clusters/criteria HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 130
{
"elements" : [ {
"name" : "NSXT_CLUSTERS_WITH_STATUS",
"description" : "Return the NSX-T clusters with status"
} ]
}
-
Pick one of the criterion and post a query
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters/queries' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"name" : "NSXT_CLUSTERS_WITH_STATUS"
}'
HTTP Request
POST /v1/nsxt-clusters/queries HTTP/1.1
Content-Type: application/json
Content-Length: 42
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"name" : "NSXT_CLUSTERS_WITH_STATUS"
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/nsxt-clusters/queries/3ba88c20-ef1b-48ce-86e1-c517574f3b2e
Content-Type: application/json
Content-Length: 127
{
"queryInfo" : {
"status" : "IN_PROGRESS",
"failure" : false,
"completed" : false,
"processing" : true
}
}
-
Read the tracking URL returned as Location header in the previous step.
-
Poll the tracking URL until the "status" is not "IN_PROGRESS".
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters/queries/23abc8bc-4981-4006-bf2d-5f0b9467ab79' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/nsxt-clusters/queries/23abc8bc-4981-4006-bf2d-5f0b9467ab79 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1164
{
"queryInfo" : {
"status" : "COMPLETED",
"failure" : false,
"completed" : true,
"processing" : false
},
"result" : {
"elements" : [ {
"id" : "d77231ad-bf61-4331-88f3-b52534d564ba",
"vipFqdn" : "sfo-w01-nsx01.sfo.rainpole.io",
"vip" : "172.19.10.81",
"domains" : [ {
"id" : "5c6e4716-b069-4481-aa6e-4eca8bf5596a",
"name" : "sfo-w01"
} ],
"nodes" : [ {
"id" : "7d69b00d-6e5c-41a0-aa21-7152c6647c54",
"fqdn" : "sfo-w01-nsx01a.sfo.rainpole.io",
"ipAddress" : "172.19.10.84",
"name" : "sfo-w01-nsx01a"
}, {
"id" : "c9662d07-fa06-41b9-8253-bbbe17251658",
"fqdn" : "sfo-w01-nsx01b.sfo.rainpole.io",
"ipAddress" : "172.19.10.83",
"name" : "sfo-w01-nsx01b"
}, {
"id" : "39a6ca0b-5071-473f-8f45-e1aefeba371d",
"fqdn" : "sfo-w01-nsx01c.sfo.rainpole.io",
"ipAddress" : "172.19.10.82",
"name" : "sfo-w01-nsx01c"
} ],
"version" : "3.1.2.0.0-17645047",
"isShared" : false,
"isShareable" : true,
"isVlcmCompatible" : false,
"status" : "STABLE"
} ]
}
}
2.28.4. Get an IP address pool from the NSX-T cluster
Prerequisites
-
ID of the NSX-T Cluster
-
Name of the IP address pool
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters/74ed054d-5f1b-4ef7-8036-5eee68f5a15e/ip-address-pools/static-ip-pool-01' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/nsxt-clusters/74ed054d-5f1b-4ef7-8036-5eee68f5a15e/ip-address-pools/static-ip-pool-01 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 387
{
"name" : "static-ip-pool-01",
"availableIpAddresses" : 31,
"totalIpAddresses" : 37,
"blockSubnets" : [ {
"size" : 16,
"gatewayAssigned" : true,
"cidr" : "10.0.15.0/24"
} ],
"staticSubnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "10.0.12.100",
"end" : "10.0.12.120"
} ],
"gateway" : "10.0.12.250",
"cidr" : "10.0.12.0/24"
} ]
}
2.28.5. Get the IP address pools from the NSX-T cluster
Prerequisites
-
ID of the NSX-T Cluster
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/nsxt-clusters/65f3d23a-18d4-4914-8df6-080339ef322f/ip-address-pools' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/nsxt-clusters/65f3d23a-18d4-4914-8df6-080339ef322f/ip-address-pools HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 444
{
"elements" : [ {
"name" : "static-ip-pool-01",
"availableIpAddresses" : 31,
"totalIpAddresses" : 37,
"blockSubnets" : [ {
"size" : 16,
"gatewayAssigned" : true,
"cidr" : "10.0.15.0/24"
} ],
"staticSubnets" : [ {
"ipAddressPoolRanges" : [ {
"start" : "10.0.12.100",
"end" : "10.0.12.120"
} ],
"gateway" : "10.0.12.250",
"cidr" : "10.0.12.0/24"
} ]
} ]
}
2.29. SDDC Managers
2.29.1. Get an SDDC Manager
Prerequisites
-
ID of the SDDC Manager
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-managers/ebb0944f-3b86-4872-9afa-2e80ce814c8f' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/sddc-managers/ebb0944f-3b86-4872-9afa-2e80ce814c8f HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 219
{
"domain" : {
"id" : "d1f91ef5-dfa2-48e7-adde-cd37b0aa7911"
},
"id" : "ebb0944f-3b86-4872-9afa-2e80ce814c8f",
"fqdn" : "sfo-vcf01.rainpole.io",
"version" : "3.9.0.0-14713675",
"ipAddress" : "10.0.0.4"
}
2.29.2. Get the SDDC Managers
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-managers' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/sddc-managers HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 258
{
"elements" : [ {
"domain" : {
"id" : "d1f91ef5-dfa2-48e7-adde-cd37b0aa7911"
},
"id" : "ebb0944f-3b86-4872-9afa-2e80ce814c8f",
"fqdn" : "sfo-vcf01.rainpole.io",
"version" : "3.9.0.0-14713675",
"ipAddress" : "10.0.0.4"
} ]
}
|
Note
|
This API currently returns a singleton list which has the current SDDC Manager. It is meant to be future ready in such cases where multiple SDDC Managers can be returned, for example in the federated environments having multiple SDDC Managers. |
2.30. VCF Services
2.30.1. Get a VCF Service
Prerequisites
-
ID of the VCF Service
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vcf-services/bc0debfe-bd38-453a-822d-fdd012fbd0b2' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/vcf-services/bc0debfe-bd38-453a-822d-fdd012fbd0b2 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 131
{
"id" : "bc0debfe-bd38-453a-822d-fdd012fbd0b2",
"name" : "COMMON_SERVICES",
"version" : "3.8.2-RELEASE",
"status" : "UP"
}
2.30.2. Get the VCF Services
Prerequisites
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/vcf-services' -i -X GET \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/vcf-services HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 870
{
"elements" : [ {
"id" : "bc0debfe-bd38-453a-822d-fdd012fbd0b2",
"name" : "COMMON_SERVICES",
"version" : "3.8.2-RELEASE",
"status" : "UP"
}, {
"id" : "174ca011-0f17-48ec-a4cb-8fc3d35149bd",
"name" : "DOMAIN_MANAGER",
"version" : "3.8.2-RELEASE",
"status" : "UP"
}, {
"id" : "8c64a3f9-fa12-4d00-ba19-9fe747e2bda",
"name" : "OPERATIONS_MANAGER",
"version" : "3.8.2-RELEASE",
"status" : "UP"
}, {
"id" : "8bd696dc-958a-482a-9747-4f4e172a3005",
"name" : "LCM",
"version" : "3.8.2-RELEASE",
"status" : "UP"
}, {
"id" : "9294a99d-8755-4298-9fb6-a255ab6a12f4",
"name" : "SDDC_MANAGER_UI",
"version" : "3.8.2-RELEASE",
"status" : "UP"
}, {
"id" : "20f1f50f-8e50-4f19-9fd0-3472330b0fb2",
"name" : "SOLUTIONS_MANAGER",
"version" : "3.8.2-RELEASE",
"status" : "UP"
} ]
}
2.31. DNS and NTP Configuration
2.31.1. Configuration of New DNS Server
Prerequisites
-
The new DNS server to be configured should be reachable from SDDC components.
-
DNS resolution (forward and reverse lookup) for all management VMs and ESXi hosts in place
-
All SDDC components should be reachable from SDDC manager.
-
All SDDC components state should be "ACTIVE" in VCF inventory.
Steps
-
Validate the DnsConfiguration input before configuration.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/dns-configuration/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"dnsServers" : [ {
"ipAddress" : "10.0.0.250",
"isPrimary" : true
} ]
}'
HTTP Request
POST /v1/system/dns-configuration/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 85
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"dnsServers" : [ {
"ipAddress" : "10.0.0.250",
"isPrimary" : true
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/system/dns-configuration/validations/71653367-2ea8-49f2-bf72-0e0e1fa57dcd
Content-Type: application/json
Content-Length: 407
{
"id" : "71653367-2ea8-49f2-bf72-0e0e1fa57dcd",
"description" : "Validate input specification as new NtpConfiguration to VMware Cloud Foundations",
"executionStatus" : "IN_PROGRESS",
"validationChecks" : [ {
"description" : "Validating NTP input specification",
"resultStatus" : "UNKNOWN"
}, {
"description" : "Validating NTP server 10.0.0.250",
"resultStatus" : "UNKNOWN"
} ]
}
-
Poll until "executionStatus" is not "IN_PROGRESS" using the "id" from the previous response.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/dns-configuration/validations/71653367-2ea8-49f2-bf72-0e0e1fa57dcd' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/dns-configuration/validations/71653367-2ea8-49f2-bf72-0e0e1fa57dcd HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 407
{
"id" : "71653367-2ea8-49f2-bf72-0e0e1fa57dcd",
"description" : "Validate input specification as new NtpConfiguration to VMware Cloud Foundations",
"executionStatus" : "IN_PROGRESS",
"validationChecks" : [ {
"description" : "Validating NTP input specification",
"resultStatus" : "UNKNOWN"
}, {
"description" : "Validating NTP server 10.0.0.250",
"resultStatus" : "UNKNOWN"
} ]
}
-
In case of no errors in the validation , 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/system/dns-configuration' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"dnsServers" : [ {
"ipAddress" : "10.0.0.250",
"isPrimary" : true
} ]
}'
HTTP Request
PUT /v1/system/dns-configuration HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 85
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"dnsServers" : [ {
"ipAddress" : "10.0.0.250",
"isPrimary" : true
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/f0da79cd-6f5c-4118-95cc-e56af204e4cd
Content-Type: application/json
Content-Length: 131
{
"id" : "f0da79cd-6f5c-4118-95cc-e56af204e4cd",
"name" : "Configuring DNS servers on VCF system",
"status" : "IN_PROGRESS"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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. |
-
Get the DnsConfiguration state.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/dns-configuration' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/dns-configuration HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 85
{
"dnsServers" : [ {
"ipAddress" : "10.0.0.250",
"isPrimary" : true
} ]
}
2.31.2. Configuration of New NTP Server
Prerequisites
-
The new NTP server(s) to be configured should be reachable from SDDC components.
-
The new NTP server(s) should be able to do NTP sync from SDDC Manager.
-
All SDDC components should be reachable from SDDC manager.
-
All SDDC components state should be active as per SDDC Manager.
-
The new server should be NTP synced from the SDDC Manager.
Steps
-
Perform the validation step for the desired NTP configuration before applying the same.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/ntp-configuration/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"ntpServers" : [ {
"ipAddress" : "10.0.0.250"
} ]
}'
HTTP Request
POST /v1/system/ntp-configuration/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 61
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"ntpServers" : [ {
"ipAddress" : "10.0.0.250"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/system/ntp-configuration/validations/71653367-2ea8-49f2-bf72-0e0e1fa57dcd
Content-Type: application/json
Content-Length: 407
{
"id" : "71653367-2ea8-49f2-bf72-0e0e1fa57dcd",
"description" : "Validate input specification as new NtpConfiguration to VMware Cloud Foundations",
"executionStatus" : "IN_PROGRESS",
"validationChecks" : [ {
"description" : "Validating NTP input specification",
"resultStatus" : "UNKNOWN"
}, {
"description" : "Validating NTP server 10.0.0.250",
"resultStatus" : "UNKNOWN"
} ]
}
-
Poll until "executionStatus" is not "IN_PROGRESS" using the "id" from the previous response.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/ntp-configuration/validations/71653367-2ea8-49f2-bf72-0e0e1fa57dcd' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/ntp-configuration/validations/71653367-2ea8-49f2-bf72-0e0e1fa57dcd HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 407
{
"id" : "71653367-2ea8-49f2-bf72-0e0e1fa57dcd",
"description" : "Validate input specification as new NtpConfiguration to VMware Cloud Foundations",
"executionStatus" : "IN_PROGRESS",
"validationChecks" : [ {
"description" : "Validating NTP input specification",
"resultStatus" : "UNKNOWN"
}, {
"description" : "Validating NTP server 10.0.0.250",
"resultStatus" : "UNKNOWN"
} ]
}
-
In case of no errors in the validation , 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. |
-
As the Validation is complete now, perform the NTP configuration using the valid input specification.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/ntp-configuration' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"ntpServers" : [ {
"ipAddress" : "10.0.0.250"
} ]
}'
HTTP Request
PUT /v1/system/ntp-configuration HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 61
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"ntpServers" : [ {
"ipAddress" : "10.0.0.250"
} ]
}
HTTP Response
HTTP/1.1 202 Accepted
Location: /v1/tasks/28d3f5ae-8072-4b83-ac99-b18d465485bc
Content-Type: application/json
Content-Length: 131
{
"id" : "28d3f5ae-8072-4b83-ac99-b18d465485bc",
"name" : "Configuring NTP servers on VCF system",
"status" : "IN_PROGRESS"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer 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. |
-
Get the DnsConfiguration state
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/ntp-configuration' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/ntp-configuration HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 61
{
"ntpServers" : [ {
"ipAddress" : "10.0.0.250"
} ]
}
2.32. Edge Clusters
2.32.1. Validate Edge Cluster
Prerequisites
Complete the required prerequisites before invoking the API.
-
Separate VLANs and subnets are available for Host TEP VLAN and Edge TEP VLAN use
-
Host TEP VLAN and Edge TEP VLAN need to be routed
-
If dynamic routing is desired, please set up two BGP peers (on TORs or infra ESG) with an interface IP, ASN and BGP password
-
Reserve an ASN to use for the NSX Edge cluster’s Tier-0 interfaces
-
DNS entries for NSX Edge components should be populated in customer managed DNS server
-
The vSphere clusters hosting the Edge clusters should be L2 Uniform. All hosts in a hosting vSphere cluster need to have identical management, uplink, Edge and host TEP networks
-
The vSphere clusters hosting the Edge nodes must have the same pNIC speed for NSX enabled VDS uplinks chosen for Edge overlay (e.g., either 10G or 25G but not both)
-
All nodes of an NSX Edge cluster must use the same set of NSX enabled VDS uplinks. The selected uplinks must be prepared for overlay use
The following data is required for the Validate an Edge Cluster spec:
-
Edge cluster name
-
Maximum transmission unit
-
ASN to be used for the edge cluster
-
Edge cluster profile type, for example: DEFAULT, CUSTOM
-
Edge cluster type, for example: NSX-T
-
Edge cluster form factor, for example: SMALL, MEDIUM, LARGE
-
Edge cluster profile spec, refer to: NsxTEdgeClusterProfileSpec
-
Edge Node specs, refer to: NsxTEdgeNodeSpec
-
Name for the Tier-0 router
-
Tier-0 routing type, for example: EBGP, STATIC
-
High-Availability mode for Tier-0 router, for example: ACTIVE_ACTIVE, ACTIVE_STANDBY
-
Name for the Tier-1 router
|
Tip
|
Refer to: EdgeClusterCreationSpec. |
Steps
-
Validate the input specification using Validate an Edge Cluster spec.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterName" : "sfo-w01-cl01-edge",
"edgeClusterType" : "NSX-T",
"edgeRootPassword" : "XXXXXXXXXXXXXXXX",
"edgeAdminPassword" : "XXXXXXXXXXXXXXXX",
"edgeAuditPassword" : "XXXXXXXXXXXXXXXX",
"edgeFormFactor" : "MEDIUM",
"tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
"mtu" : 9000,
"asn" : 65003,
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en01.rainpole.io",
"managementIP" : "10.0.0.50/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.10/24",
"edgeTep2IP" : "192.168.52.11/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.2/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.2/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
}, {
"edgeNodeName" : "sfo-m01-en02.rainpole.io",
"managementIP" : "10.0.0.51/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.12/24",
"edgeTep2IP" : "192.168.52.13/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.3/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.3/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
} ],
"tier0RoutingType" : "EBGP",
"tier0Name" : "Acme-Tier0",
"tier1Name" : "Acme-Tier1",
"edgeClusterProfileType" : "DEFAULT"
}'
HTTP Request
POST /v1/edge-clusters/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 1989
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterName" : "sfo-w01-cl01-edge",
"edgeClusterType" : "NSX-T",
"edgeRootPassword" : "XXXXXXXXXXXXXXXX",
"edgeAdminPassword" : "XXXXXXXXXXXXXXXX",
"edgeAuditPassword" : "XXXXXXXXXXXXXXXX",
"edgeFormFactor" : "MEDIUM",
"tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
"mtu" : 9000,
"asn" : 65003,
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en01.rainpole.io",
"managementIP" : "10.0.0.50/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.10/24",
"edgeTep2IP" : "192.168.52.11/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.2/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.2/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
}, {
"edgeNodeName" : "sfo-m01-en02.rainpole.io",
"managementIP" : "10.0.0.51/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.12/24",
"edgeTep2IP" : "192.168.52.13/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.3/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.3/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
} ],
"tier0RoutingType" : "EBGP",
"tier0Name" : "Acme-Tier0",
"tier1Name" : "Acme-Tier1",
"edgeClusterProfileType" : "DEFAULT"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 3304
{
"id" : "bcea8c49-9112-4d89-acd0-dfd7bead63ad",
"description" : "@@Validating NSX Edge cluster creation spec@@",
"executionStatus" : "IN_PROGRESS",
"resultStatus" : "UNKNOWN",
"validationChecks" : [ {
"description" : "@@Validate Edge Node Management IP to FQDN Resolution@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Distinct Uplink Interfaces per Edge Node@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Tier-1 Gateway Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate the specified NSX enabled VDS uplinks are prepared for Edge overlay@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check vSphere cluster has all hosts with a vCPU count and RAM size to accommodate the selected Edge form factor@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate IP Address Assigned to Same Subnet@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node Overlay (TEP) IPs are Unique@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Cluster Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Management Network is Reachable@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node Passwords Against NSX-T Data Center Password Policy@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate that TEP IPs, gateway, and management IP, gateway are in the same subnet@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Cluster Name Does Not Exist in NSX-T Data Center Manager@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate that the specified IP addresses in the input spec do not conflict with the Tier-0 transit subnets@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check that the custom Edge cluster profile does not conflict with an existing profile@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node FQDNs are Unique@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate L2 Non-Uniform and L3 Cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate all vCenter clusters are not stretched@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate IP Address Conflicts@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Tier-0 Gateway Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate vSphere Cluster Belongs to the Workload Domain@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Uplink VLANs@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Capacity for Hosting vSphere Cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Routing Between Host Overlay (TEP) and Edge Overlay (TEP)@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate each Edge node's VLAN is consistent per vSphere cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check for unique IPs for Edge management IP, Edge TEP IPs, Tier-0 uplink interface IPs@@",
"resultStatus" : "UNKNOWN"
} ]
}
-
Poll the status of the validation using the validation API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get Edge Cluster Validation. |
2.32.2. Get Edge Cluster Validation
Prerequisites
The following data is required for the Get the Edge Cluster spec validation.
-
ID of the Edge Cluster Validation
Steps
-
Invoke the Get the Edge Cluster spec validation.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/validations/d2ee03c3-adc1-4118-8ea6-0ed82062efb5' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/edge-clusters/validations/d2ee03c3-adc1-4118-8ea6-0ed82062efb5 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 3304
{
"id" : "d2ee03c3-adc1-4118-8ea6-0ed82062efb5",
"description" : "@@Validating NSX Edge cluster creation spec@@",
"executionStatus" : "IN_PROGRESS",
"resultStatus" : "UNKNOWN",
"validationChecks" : [ {
"description" : "@@Validate Edge Node Management IP to FQDN Resolution@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Distinct Uplink Interfaces per Edge Node@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Tier-1 Gateway Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate the specified NSX enabled VDS uplinks are prepared for Edge overlay@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check vSphere cluster has all hosts with a vCPU count and RAM size to accommodate the selected Edge form factor@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate IP Address Assigned to Same Subnet@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node Overlay (TEP) IPs are Unique@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Cluster Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Management Network is Reachable@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node Passwords Against NSX-T Data Center Password Policy@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate that TEP IPs, gateway, and management IP, gateway are in the same subnet@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Cluster Name Does Not Exist in NSX-T Data Center Manager@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate that the specified IP addresses in the input spec do not conflict with the Tier-0 transit subnets@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check that the custom Edge cluster profile does not conflict with an existing profile@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node FQDNs are Unique@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate L2 Non-Uniform and L3 Cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate all vCenter clusters are not stretched@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate IP Address Conflicts@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Tier-0 Gateway Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate vSphere Cluster Belongs to the Workload Domain@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Uplink VLANs@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Capacity for Hosting vSphere Cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Routing Between Host Overlay (TEP) and Edge Overlay (TEP)@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate each Edge node's VLAN is consistent per vSphere cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check for unique IPs for Edge management IP, Edge TEP IPs, Tier-0 uplink interface IPs@@",
"resultStatus" : "UNKNOWN"
} ]
}
2.32.3. Create Edge Cluster
Prerequisites
Complete the required prerequisites before invoking the API.
-
Separate VLANs and subnets are available for Host TEP VLAN and Edge TEP VLAN use
-
Host TEP VLAN and Edge TEP VLAN need to be routed
-
If dynamic routing is desired, please set up two BGP peers (on TORs or infra ESG) with an interface IP, ASN and BGP password
-
Reserve an ASN to use for the NSX Edge cluster’s Tier-0 interfaces
-
DNS entries for NSX Edge components should be populated in customer managed DNS server
-
The vSphere clusters hosting the Edge clusters should be L2 Uniform. All hosts in a hosting vSphere cluster need to have identical management, uplink, Edge and host TEP networks
-
The vSphere clusters hosting the Edge nodes must have the same pNIC speed for NSX enabled VDS uplinks chosen for Edge overlay (e.g., either 10G or 25G but not both)
-
All nodes of an NSX Edge cluster must use the same set of NSX enabled VDS uplinks. The selected uplinks must be prepared for overlay use
The following data is required for the Create an Edge Cluster:
-
Edge cluster name
-
Maximum transmission unit
-
ASN to be used for the edge cluster
-
Edge cluster profile type, for example: DEFAULT, CUSTOM
-
Edge cluster type, for example: NSX-T
-
Edge cluster form factor, for example: SMALL, MEDIUM, LARGE
-
Edge cluster profile spec, refer to: NsxTEdgeClusterProfileSpec
-
Edge Node specs, refer to: NsxTEdgeNodeSpec
-
Name for the Tier-0 router
-
Tier-0 routing type, for example: EBGP, STATIC
-
High-Availability mode for Tier-0 router, for example: ACTIVE_ACTIVE, ACTIVE_STANDBY
-
Name for the Tier-1 router
|
Tip
|
Refer to: EdgeClusterCreationSpec. |
Steps
-
Invoke the Create an Edge Cluster. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterName" : "sfo-w01-cl01-edge",
"edgeClusterType" : "NSX-T",
"edgeRootPassword" : "XXXXXXXXXXXXXXXX",
"edgeAdminPassword" : "XXXXXXXXXXXXXXXX",
"edgeAuditPassword" : "XXXXXXXXXXXXXXXX",
"edgeFormFactor" : "MEDIUM",
"tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
"mtu" : 9000,
"asn" : 65003,
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en01.rainpole.io",
"managementIP" : "10.0.0.50/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.10/24",
"edgeTep2IP" : "192.168.52.11/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.2/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.2/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
}, {
"edgeNodeName" : "sfo-m01-en02.rainpole.io",
"managementIP" : "10.0.0.51/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.12/24",
"edgeTep2IP" : "192.168.52.13/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.3/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.3/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
} ],
"tier0RoutingType" : "EBGP",
"tier0Name" : "Acme-Tier0",
"tier1Name" : "Acme-Tier1",
"edgeClusterProfileType" : "DEFAULT"
}'
HTTP Request
POST /v1/edge-clusters HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 1989
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterName" : "sfo-w01-cl01-edge",
"edgeClusterType" : "NSX-T",
"edgeRootPassword" : "XXXXXXXXXXXXXXXX",
"edgeAdminPassword" : "XXXXXXXXXXXXXXXX",
"edgeAuditPassword" : "XXXXXXXXXXXXXXXX",
"edgeFormFactor" : "MEDIUM",
"tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
"mtu" : 9000,
"asn" : 65003,
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en01.rainpole.io",
"managementIP" : "10.0.0.50/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.10/24",
"edgeTep2IP" : "192.168.52.11/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.2/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.2/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
}, {
"edgeNodeName" : "sfo-m01-en02.rainpole.io",
"managementIP" : "10.0.0.51/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.12/24",
"edgeTep2IP" : "192.168.52.13/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83c",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.3/24",
"peerIP" : "192.168.16.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.3/24",
"peerIP" : "192.168.17.10/24",
"asnPeer" : 65001,
"bgpPeerPassword" : "XXXXXXXX"
} ]
} ],
"tier0RoutingType" : "EBGP",
"tier0Name" : "Acme-Tier0",
"tier1Name" : "Acme-Tier1",
"edgeClusterProfileType" : "DEFAULT"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/0ac10cd1-c29e-42ec-a99c-de328597295f
Content-Length: 170
{
"id" : "0ac10cd1-c29e-42ec-a99c-de328597295f",
"name" : "Add a NSX-T edge cluster",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:08:15.280Z"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.32.4. Get the Edge Clusters
-
Get the Edge Clusters API is used to get all the edge clusters.
Prerequisites
None
Steps
-
Invoke the Get the Edge Clusters.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters?clusterId=d1052c9c-6973-4e32-8034-06e7fa71e83c' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/edge-clusters?clusterId=d1052c9c-6973-4e32-8034-06e7fa71e83c HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 583
{
"elements" : [ {
"id" : "2eafc524-5077-4ee2-94fb-cab6fb1acfed",
"name" : "sfo-m01-ecp01",
"clusters" : [ {
"id" : "d1052c9c-6973-4e32-8034-06e7fa71e83c"
} ],
"nsxtCluster" : {
"id" : "cd06b540-2e9a-4483-a19b-a57c25ebadff",
"vipFqdn" : "sfo-m01-ecp01.rainpole.io",
"vip" : "10.0.0.30"
},
"edgeNodes" : [ {
"id" : "dc90f2ab-4457-48f2-93b2-157676b841fd",
"hostName" : "sfo-m01-en01.rainpole.io"
}, {
"id" : "126df8d5-2266-4890-b88d-90aeed98696d",
"hostName" : "sfo-m01-en02.rainpole.io"
} ]
} ]
}
2.32.5. Get an Edge Cluster
-
Get an Edge Cluster API is used to get a specific edge cluster.
Prerequisites
-
ID of the Edge cluster
Steps
-
Invoke the Get an Edge Cluster.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/6e6cc660-8137-4aaa-8382-06bcec5276f5' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/edge-clusters/6e6cc660-8137-4aaa-8382-06bcec5276f5 HTTP/1.1
Accept: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 524
{
"id" : "4bdd9eb7-5127-4bba-bc9b-f31ce187240c",
"name" : "sfo-m01-ecp01",
"clusters" : [ {
"id" : "d1052c9c-6973-4e32-8034-06e7fa71e83c"
} ],
"nsxtCluster" : {
"id" : "6d6739cc-16c1-4c94-b9f9-fef4f68610fa",
"vipFqdn" : "sfo-m01-ecp01.rainpole.io",
"vip" : "10.0.0.30"
},
"edgeNodes" : [ {
"id" : "bc1ab422-a5ee-4969-9670-bb6c168ac09b",
"hostName" : "sfo-m01-en01.rainpole.io"
}, {
"id" : "20dd8fee-407c-4072-b4f5-60f201d82412",
"hostName" : "sfo-m01-en02.rainpole.io"
} ]
}
2.32.6. Validate Edge Cluster Expansion
Prerequisites
Complete the required prerequisites before invoking the API.
-
Separate VLANs and subnets are available for Host TEP VLAN and Edge TEP VLAN use
-
Host TEP VLAN and Edge TEP VLAN need to be routed
-
If dynamic routing is desired, please set up two BGP peers (on TORs or infra ESG) with an interface IP, ASN and BGP password
-
Reserve an ASN to use for the NSX Edge cluster’s Tier-0 interfaces
-
DNS entries for NSX Edge components should be populated in customer managed DNS server
-
The vSphere clusters hosting the Edge clusters should be L2 Uniform. All host nodes in a hosting vSphere cluster need to have identical management, uplink, Edge and host TEP networks
-
The vSphere clusters hosting the NSX Edge node VMs must have the same pNIC speed for NSX enabled VDS uplinks chosen for Edge overlay (e.g., either 10G or 25G but not both)
-
All nodes of an NSX Edge cluster must use the same set of NSX enabled VDS uplinks. The selected uplinks must be prepared for overlay use
-
Please refer to the official NSX documentation for the deployed version
-
Make sure there is enough capacity on the cluster(s) to deploy additional Edge nodes based on the form factor
|
Tip
|
Refer to: Validate an NSX-T Edge Cluster update spec and EdgeClusterUpdateSpec. |
Steps
-
Validate the input specification using EdgeClusterUpdateSpec.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterExpansionSpec" : {
"edgeNodeRootPassword" : "XXXXXXXXXXXXXXXX",
"edgeNodeAdminPassword" : "XXXXXXXXXXXXXXXX",
"edgeNodeAuditPassword" : "XXXXXXXXXXXXXXXX",
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en04.rainpole.io",
"managementIP" : "10.0.0.53/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.32/24",
"edgeTep2IP" : "192.168.52.42/24",
"edgeTepVlan" : 1252,
"clusterId" : "cff07657-5697-4ecc-8f66-efd8ec345754",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.34/24",
"bgpPeers" : [ {
"ip" : "192.168.16.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.34/24",
"bgpPeers" : [ {
"ip" : "192.168.17.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
} ],
"firstNsxVdsUplink" : "uplink1",
"secondNsxVdsUplink" : "uplink2"
} ]
},
"operation" : "EXPANSION"
}'
HTTP Request
POST /v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 1181
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterExpansionSpec" : {
"edgeNodeRootPassword" : "XXXXXXXXXXXXXXXX",
"edgeNodeAdminPassword" : "XXXXXXXXXXXXXXXX",
"edgeNodeAuditPassword" : "XXXXXXXXXXXXXXXX",
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en04.rainpole.io",
"managementIP" : "10.0.0.53/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.32/24",
"edgeTep2IP" : "192.168.52.42/24",
"edgeTepVlan" : 1252,
"clusterId" : "cff07657-5697-4ecc-8f66-efd8ec345754",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.34/24",
"bgpPeers" : [ {
"ip" : "192.168.16.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.34/24",
"bgpPeers" : [ {
"ip" : "192.168.17.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
} ],
"firstNsxVdsUplink" : "uplink1",
"secondNsxVdsUplink" : "uplink2"
} ]
},
"operation" : "EXPANSION"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 3545
{
"id" : "e944c19f-a531-4cbb-9aa1-44a88ed93800",
"description" : "@@Validating NSX Edge cluster update spec@@",
"executionStatus" : "IN_PROGRESS",
"resultStatus" : "UNKNOWN",
"validationChecks" : [ {
"description" : "@@Validate Edge Node Management IP to FQDN Resolution@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Distinct Uplink Interfaces per Edge Node@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Tier-1 Gateway Name Does Not Exist@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate the specified NSX enabled VDS uplinks are prepared for Edge overlay@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check vSphere cluster has all hosts with a vCPU count and RAM size to accommodate the selected Edge form factor@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Compliance of Edge cluster size with Tier-0 High-Availability mode@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate IP Address Assigned to Same Subnet@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node Overlay (TEP) IPs are Unique@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Management Network is Reachable@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node Passwords Against NSX-T Data Center Password Policy@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check Tier-0 uplink settings@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check NSX Edge cluster's health status@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate that TEP IPs, gateway, and management IP, gateway are in the same subnet@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate that the specified IP addresses in the input spec do not conflict with the Tier-0 transit subnets@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Additional Tier-1s can be configured if existing Edge cluster is not federated@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge Node FQDNs are Unique@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate all vCenter clusters, both current and newly added, are either all stretched or none are stretched@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate L2 Non-Uniform and L3 Cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate IP Address Conflicts@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate vSphere Cluster Belongs to the Workload Domain@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Uplink VLANs@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Capacity for Hosting vSphere Cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Compliance checks for Edge cluster expansion spec@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Routing Between Host Overlay (TEP) and Edge Overlay (TEP)@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate each Edge node's VLAN is consistent per vSphere cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Checking Edge cluster existence@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Check for unique IPs for Edge management IP, Edge TEP IPs, Tier-0 uplink interface IPs@@",
"resultStatus" : "UNKNOWN"
} ]
}
-
Poll the status of the validation using the Validation API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get Edge Cluster Validation. |
2.32.7. Expand an Edge Cluster
Prerequisites
Complete the required prerequisites before invoking the API.
-
Separate VLANs and subnets are available for Host TEP VLAN and Edge TEP VLAN use
-
Host TEP VLAN and Edge TEP VLAN need to be routed
-
If dynamic routing is desired, please set up two BGP peers (on TORs or infra ESG) with an interface IP, ASN and BGP password
-
Reserve an ASN to use for the NSX Edge cluster’s Tier-0 interfaces
-
DNS entries for NSX Edge components should be populated in customer managed DNS server
-
The vSphere clusters hosting the Edge clusters should be L2 Uniform. All host nodes in a hosting vSphere cluster need to have identical management, uplink, Edge and host TEP networks
-
The vSphere clusters hosting the NSX Edge node VMs must have the same pNIC speed for NSX enabled VDS uplinks chosen for Edge overlay (e.g., either 10G or 25G but not both)
-
All nodes of an NSX Edge cluster must use the same set of NSX enabled VDS uplinks. The selected uplinks must be prepared for overlay use
-
Please refer to the official NSX documentation for the deployed version
-
Make sure there is enough capacity on the cluster(s) to deploy additional Edge nodes based on the form factor
-
Validation API for expansion should complete successfully
|
Tip
|
Refer to: EdgeClusterUpdateSpec. |
Steps
-
Invoke the Expand or Shrink an NSX-T Edge Cluster. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterExpansionSpec" : {
"edgeNodeRootPassword" : "XXXXXXXX",
"edgeNodeAdminPassword" : "XXXXXXXX",
"edgeNodeAuditPassword" : "XXXXXXXX",
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en05.rainpole.io",
"managementIP" : "10.0.0.55/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.15/24",
"edgeTep2IP" : "192.168.52.16/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83d",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.14/24",
"bgpPeers" : [ {
"ip" : "192.168.16.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.14/24",
"bgpPeers" : [ {
"ip" : "192.168.17.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
} ]
} ],
"additionalTier1Names" : [ ]
},
"operation" : "EXPANSION"
}'
HTTP Request
PATCH /v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 1112
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterExpansionSpec" : {
"edgeNodeRootPassword" : "XXXXXXXX",
"edgeNodeAdminPassword" : "XXXXXXXX",
"edgeNodeAuditPassword" : "XXXXXXXX",
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en05.rainpole.io",
"managementIP" : "10.0.0.55/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.15/24",
"edgeTep2IP" : "192.168.52.16/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83d",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.14/24",
"bgpPeers" : [ {
"ip" : "192.168.16.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.14/24",
"bgpPeers" : [ {
"ip" : "192.168.17.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
} ]
} ],
"additionalTier1Names" : [ ]
},
"operation" : "EXPANSION"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/70320708-56d5-4412-b584-e588b9fe38c7
Content-Length: 174
{
"id" : "70320708-56d5-4412-b584-e588b9fe38c7",
"name" : "Update an NSX-T Edge Cluster",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:08:13.987Z"
}
In case of edge cluster expansion for an edge cluster hosted on a stretched cluster, following are the sample requests and responses.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterExpansionSpec" : {
"edgeNodeRootPassword" : "XXXXXXXX",
"edgeNodeAdminPassword" : "XXXXXXXX",
"edgeNodeAuditPassword" : "XXXXXXXX",
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en05.rainpole.io",
"managementIP" : "10.0.0.55/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.15/24",
"edgeTep2IP" : "192.168.52.16/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83d",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.14/24",
"bgpPeers" : [ {
"ip" : "192.168.16.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.14/24",
"bgpPeers" : [ {
"ip" : "192.168.17.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
} ]
} ],
"additionalTier1Names" : [ ]
},
"operation" : "EXPANSION"
}'
HTTP Request
PATCH /v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 1112
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterExpansionSpec" : {
"edgeNodeRootPassword" : "XXXXXXXX",
"edgeNodeAdminPassword" : "XXXXXXXX",
"edgeNodeAuditPassword" : "XXXXXXXX",
"edgeNodeSpecs" : [ {
"edgeNodeName" : "sfo-m01-en05.rainpole.io",
"managementIP" : "10.0.0.55/24",
"managementGateway" : "10.0.0.250",
"edgeTepGateway" : "192.168.52.1",
"edgeTep1IP" : "192.168.52.15/24",
"edgeTep2IP" : "192.168.52.16/24",
"edgeTepVlan" : 1252,
"clusterId" : "d1052c9c-6973-4e32-8034-06e7fa71e83d",
"interRackCluster" : false,
"uplinkNetwork" : [ {
"uplinkVlan" : 2081,
"uplinkInterfaceIP" : "192.168.16.14/24",
"bgpPeers" : [ {
"ip" : "192.168.16.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
}, {
"uplinkVlan" : 2082,
"uplinkInterfaceIP" : "192.168.17.14/24",
"bgpPeers" : [ {
"ip" : "192.168.17.10/24",
"asn" : 65001,
"password" : "XXXXXXXX"
} ]
} ]
} ],
"additionalTier1Names" : [ ]
},
"operation" : "EXPANSION"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/f6d0bd01-8282-4913-8e0c-d0e1cbf13294
Content-Length: 174
{
"id" : "f6d0bd01-8282-4913-8e0c-d0e1cbf13294",
"name" : "Update an NSX-T Edge Cluster",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:08:13.554Z"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get a Task. |
2.32.8. Validate Edge Cluster Shrinkage
Prerequisites
Complete the required prerequisites before invoking the API.
-
Selected Edge cluster must be available in VCF inventory with ACTIVE status
-
Selected Edge node(s) must be available in VCF inventory
-
Edge cluster must contain more than 2 Edge nodes
-
Edge cluster must be hosted on one or more vSphere clusters from the same domain
-
Edge cluster must not be federated and/or stretched
-
If the selected Edge cluster was deployed with Tier-0 High-Availability mode ACTIVE_ACTIVE, then the Edge node selection will be allowed if the Edge cluster contains two or more Edge nodes with two or more Tier-0 routers (Service Router Component) after the shrinkage operation
-
If the selected Edge cluster was deployed with Tier-0 High-Availability mode ACTIVE_STANDBY, then the selected Edge node(s) should not be in Active or Standby mode for the Tier-0 Service Router
-
The selected Edge node list should not contain both Active and Standby Edge nodes of the same Tier-1 router
|
Tip
|
Refer to: Validate an NSX-T Edge Cluster update spec and EdgeClusterUpdateSpec. |
Steps
-
Validate the input specification using EdgeClusterUpdateSpec.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c/validations' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterShrinkageSpec" : {
"edgeNodeIds" : [ "73f034b7-d9bc-44ee-99e8-4a5290e44c08" ]
},
"operation" : "SHRINKAGE"
}'
HTTP Request
POST /v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 132
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterShrinkageSpec" : {
"edgeNodeIds" : [ "73f034b7-d9bc-44ee-99e8-4a5290e44c08" ]
},
"operation" : "SHRINKAGE"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 1036
{
"id" : "01c81b24-dcdb-4e61-bb0b-e17aa375d09c",
"description" : "@@Validating NSX Edge cluster update spec@@",
"executionStatus" : "IN_PROGRESS",
"resultStatus" : "UNKNOWN",
"validationChecks" : [ {
"description" : "@@Validate at least 2 nodes are required after shrinking Edge cluster@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge cluster is not federated@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate all vCenter clusters are not stretched@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate the selection for Edge node(s) for hosting Tier-1 router@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Checking Edge cluster existence@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate the selection for Edge node(s) for hosting Tier-0 router@@",
"resultStatus" : "UNKNOWN"
}, {
"description" : "@@Validate Edge node IDs are part of the Edge cluster@@",
"resultStatus" : "UNKNOWN"
} ]
}
-
Poll the status of the validation using the Validation API with the ID from the response of the previous API.
|
Tip
|
Refer to: Get Edge Cluster Validation. |
2.32.9. Shrink an Edge Cluster
Prerequisites
Complete the required prerequisites before invoking the API.
-
Selected Edge cluster must be available in VCF inventory with ACTIVE status
-
Selected Edge node(s) must be available in VCF inventory
-
Edge cluster must contain more than 2 Edge nodes
-
Edge cluster must be hosted on one or more vSphere clusters from the same domain
-
Edge cluster must not be federated and/or stretched
-
If the selected Edge cluster was deployed with Tier-0 High-Availability mode ACTIVE_ACTIVE, then the Edge node selection will be allowed if the Edge cluster contains two or more Edge nodes with two or more Tier-0 routers (Service Router Component) after the shrinkage operation
-
If the selected Edge cluster was deployed with Tier-0 High-Availability mode ACTIVE_STANDBY, then the selected Edge node(s) should not be in Active or Standby mode for the Tier-0 Service Router
-
The selected Edge node list should not contain both Active and Standby Edge nodes of the same Tier-1 router
-
Validation API for shrinkage should complete successfully
|
Tip
|
Refer to: EdgeClusterUpdateSpec. |
Steps
-
Invoke the Expand or Shrink an NSX-T Edge Cluster. This API returns a task which can be polled and monitored.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"edgeClusterShrinkageSpec" : {
"edgeNodeIds" : [ "node-1", "node-2" ]
},
"operation" : "SHRINKAGE"
}'
HTTP Request
PATCH /v1/edge-clusters/d1052c9c-6973-4e32-8034-06e7fa71e83c HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 112
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"edgeClusterShrinkageSpec" : {
"edgeNodeIds" : [ "node-1", "node-2" ]
},
"operation" : "SHRINKAGE"
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/d3bba525-1d76-427a-a360-1ac2d4320f89
Content-Length: 174
{
"id" : "d3bba525-1d76-427a-a360-1ac2d4320f89",
"name" : "Update an NSX-T Edge Cluster",
"status" : "IN_PROGRESS",
"creationTimestamp" : "2022-02-04T09:08:15.002Z"
}
-
Poll the status of the task using the task API with the ID from the response of the previous API
|
Tip
|
Refer to: Get a Task. |
2.33. Workload Management
vSphere with Kubernetes transforms vSphere to a platform for running Kubernetes workloads natively on the hypervisor layer.
2.33.1. Deploy Workload Management
Prerequisites
-
Create NSX-T VI workload domain.
-
VUM (vSphere Update Manager) option should be enabled.
-
|
Tip
|
Refer to: Create a Domain |
-
Deploy an NSX-T Edge cluster with the following properties:
-
Edge Form Factor - Large
-
Tier0 Service High Availability - Active-Active
-
|
Tip
|
Refer to: Create an Edge Cluster |
-
All hosts in the cluster where you want to deploy Workload Management must have a vSphere with Kubernetes license applied on them.
-
Workload Management supports one Edge cluster per transport zone, so ensure that the overlay transport zone connected to this cluster does not have other Edge clusters connected to it.
-
The following subnets must have been defined:
-
Subnet for pod networking (non-routable), minimum of a /22 subnet.
-
Subnet for Service IP addresses (non-routable), minimum of a /24 subnet.
-
Subnet for Ingress (routable), minimum of a /27 subnet.
-
Subnet for Egress (routable), minimum of a /27 subnet.
-
-
Create OIDC registration using NSX-T API.
Steps
-
Enable Workload Management using vCenter API.
2.34. SOS
2.34.1. Generate Support-Bundle for SDDC.
Generate Support-Bundle operation will:
-
Collects logs of various components of SDDC stack.
-
The whole logs are included in a archive file.
-
This can be downloaded by the user.
The result is supportbundle.
Prerequisites
-
logs
-
vcLogs
-
nsxLogs
-
esxLogs
-
wcpLogs
-
sddcManagerLogs
-
apiLogs
-
vxrailManagerLogs
-
systemDebugLogs
-
vmScreenshots
-
vraLogs
-
vropsLogs
-
vrliLogs
-
vrslcmLogs
-
-
scopes
-
includeFreeHosts
-
domains
-
domainName
-
clusterNames
-
-
-
options
-
include
-
summaryReport
-
healthCheck
-
-
|
Note
|
To trigger the API, the user should have a role of an ADMIN or OPERATOR in VCF. |
|
Note
|
User cannot initiate parallel Support bundle collection. |
|
Note
|
User can also pass empty specification as data, then default logs will be conducted. |
|
Note
|
Only single domain is allowed in domain field. |
|
Note
|
It is not advised to run CLI and API operations in parallel. |
|
Note
|
If no domain is passed default MANAGEMENT domain will be considered. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/support-bundles' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"options" : {
"config" : {
"skipKnownHostCheck" : false,
"force" : false
},
"include" : {
"summaryReport" : false,
"healthCheck" : false
}
},
"scope" : {
"includeFreeHosts" : false,
"domains" : [ {
"domainName" : "sddcId-1001",
"clusterNames" : [ "SDDC-Cluster1" ]
} ]
},
"logs" : {
"vcLogs" : false,
"nsxLogs" : false,
"esxLogs" : false,
"wcpLogs" : false,
"sddcManagerLogs" : true,
"apiLogs" : true,
"vxrailManagerLogs" : false,
"systemDebugLogs" : false,
"vmScreenshots" : false,
"vraLogs" : false,
"vropsLogs" : false,
"vrliLogs" : false,
"vrslcmLogs" : false
}
}'
HTTP Request
POST /v1/system/support-bundles HTTP/1.1
Content-Type: application/json
Content-Length: 697
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"options" : {
"config" : {
"skipKnownHostCheck" : false,
"force" : false
},
"include" : {
"summaryReport" : false,
"healthCheck" : false
}
},
"scope" : {
"includeFreeHosts" : false,
"domains" : [ {
"domainName" : "sddcId-1001",
"clusterNames" : [ "SDDC-Cluster1" ]
} ]
},
"logs" : {
"vcLogs" : false,
"nsxLogs" : false,
"esxLogs" : false,
"wcpLogs" : false,
"sddcManagerLogs" : true,
"apiLogs" : true,
"vxrailManagerLogs" : false,
"systemDebugLogs" : false,
"vmScreenshots" : false,
"vraLogs" : false,
"vropsLogs" : false,
"vrliLogs" : false,
"vrslcmLogs" : false
}
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 117
{
"description" : "Support-Bundle collection operation for SDDC",
"id" : "8a2f69a8-9f97-4ac3-8778-4aceb1640245"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer to: Get the status of SOS SupportBundle Task.. -
If the "status" is "COMPLETED_WITH_SUCCESS", the task is completed successfully.
-
The task is failed if "status" is "COMPLETED_WITH_FAILURE".
-
-
Download the bundle after successful bundle creation, using the "id" from the previous response.
|
Tip
|
Refer to: Downloads the SOS Support bundle created. |
2.34.2. Get the status of SOS SupportBundle Task.
The get health-summary operation
-
Polls the status of SOS SupportBundle operation.
Prerequisites
-
ID of the task
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/support-bundles/8a2f69a8-9f97-4ac3-8778-4aceb1640245' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/support-bundles/8a2f69a8-9f97-4ac3-8778-4aceb1640245 HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 341
{
"status" : "COMPLETED_WITH_SUCCESS",
"creationTimestamp" : "2021-07-09T06:22:32.856Z",
"description" : "Support-Bundle collection operation for SDDC",
"bundleAvailable" : "Yes",
"id" : "8a2f69a8-9f97-4ac3-8778-4aceb1640245",
"completionTimestamp" : "2021-07-09T06:23:04.949Z",
"bundleName" : "sos-2021-07-09-06-22-32-87667"
}
2.34.3. Downloads the SOS Support bundle created.
The download operation:
-
User can download the supportbundle bundle created.
-
The data is streamed in octect-stream format.
Prerequisites
-
ID of the task
Steps
-
Invoke the API.
|
Note
|
To trigger the API, the user should have a role of an ADMIN or OPERATOR in VCF. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/support-bundles/8a2f69a8-9f97-4ac3-8778-4aceb1640245/data' -i -X GET \
-H 'Accept: application/octet-stream' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/support-bundles/8a2f69a8-9f97-4ac3-8778-4aceb1640245/data HTTP/1.1
Accept: application/octet-stream
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
2.34.4. Get the status of all SOS SupportBundle collect tasks.
The get health-summary operation
-
User can get the history of all SupportBundle tasks.
Prerequisites
-
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/support-bundles' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/support-bundles HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 738
{
"elements" : [ {
"status" : "COMPLETED_WITH_SUCCESS",
"creationTimestamp" : "2021-07-09T06:22:32.856Z",
"description" : "Support-Bundle collection operation for SDDC",
"bundleAvailable" : "No",
"id" : "8a2f69a8-9f97-4ac3-8778-4aceb1640245",
"completionTimestamp" : "2021-07-09T06:23:04.949Z",
"bundleName" : "sos-2021-07-09-06-22-32-87667"
}, {
"status" : "COMPLETED_WITH_SUCCESS",
"creationTimestamp" : "2021-07-09T06:23:55.973Z",
"description" : "Support-Bundle collection operation for SDDC",
"bundleAvailable" : "Yes",
"id" : "b65d036d-01cd-4238-929e-d94f87f9b894",
"completionTimestamp" : "2021-07-09T06:24:22.631Z",
"bundleName" : "sos-2021-07-09-06-23-55-87667"
} ]
}
2.34.5. Perform Health-Check operation for SDDC.
The Create Health Summary operation:
-
Validates overall health of system.
-
The health checks results are included in a archive file.
-
This can be downloaded by the user.
The result is health-summary bundle.
Prerequisites
-
healthChecks
-
servicesHealth
-
ntpHealth
-
generalHealth
-
certificateHealth
-
passwordHealth
-
connectivityHealth
-
computeHealth
-
storageHealth
-
dnsHealth
-
composabilityHealth
-
hardwareCompatibilityHealth
-
-
scopes
-
includeAllDomains
-
includeFreeHosts
-
domains
-
domainName
-
clusterNames
-
-
-
options
-
include
-
summaryReport
-
-
|
Note
|
To trigger the API, the user should have a role of an ADMIN or OPERATOR in VCF. |
|
Note
|
User can also pass empty specification as data, then default health checks will be conducted. |
|
Note
|
Only single domain is allowed in domain field, or user has to pass includeAllDomains as true. |
|
Note
|
If no domain is passed default MANAGEMENT domain will be considered. |
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/health-summary' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....' \
-d '{
"options" : {
"config" : {
"skipKnownHostCheck" : false,
"force" : false
},
"include" : {
"summaryReport" : false
}
},
"scope" : {
"includeFreeHosts" : false,
"includeAllDomains" : false,
"domains" : [ {
"domainName" : "sddcId-1001",
"clusterNames" : [ "SDDC-Cluster1" ]
} ]
},
"healthChecks" : {
"servicesHealth" : true,
"ntpHealth" : true,
"generalHealth" : true,
"certificateHealth" : true,
"passwordHealth" : true,
"connectivityHealth" : true,
"computeHealth" : true,
"storageHealth" : true,
"dnsHealth" : true,
"composabilityHealth" : true,
"hardwareCompatibilityHealth" : true
}
}'
HTTP Request
POST /v1/system/health-summary HTTP/1.1
Content-Type: application/json
Content-Length: 706
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
{
"options" : {
"config" : {
"skipKnownHostCheck" : false,
"force" : false
},
"include" : {
"summaryReport" : false
}
},
"scope" : {
"includeFreeHosts" : false,
"includeAllDomains" : false,
"domains" : [ {
"domainName" : "sddcId-1001",
"clusterNames" : [ "SDDC-Cluster1" ]
} ]
},
"healthChecks" : {
"servicesHealth" : true,
"ntpHealth" : true,
"generalHealth" : true,
"certificateHealth" : true,
"passwordHealth" : true,
"connectivityHealth" : true,
"computeHealth" : true,
"storageHealth" : true,
"dnsHealth" : true,
"composabilityHealth" : true,
"hardwareCompatibilityHealth" : true
}
}
HTTP Response
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 104
{
"description" : "Health-Check operation for SDDC",
"id" : "beedc2ff-66d2-452f-af4b-176fa433148f"
}
-
Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.
TipRefer to: Get a SOS HealthSummary Task. -
If the "status" is "COMPLETED_WITH_SUCCESS", the task is completed successfully.
-
The task is failed if "status" is "COMPLETED_WITH_FAILURE".
-
-
Download the bundle after successful bundle creation, using the "id" from the previous response.
|
Tip
|
Refer to: Download Health Summary bundle. |
2.34.6. Get the status of SOS health-summary task.
The get health-summary operation
-
Polls the status of SOS health-summary operation.
Prerequisites
-
ID of the task
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/health-summary/beedc2ff-66d2-452f-af4b-176fa433148f' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/health-summary/beedc2ff-66d2-452f-af4b-176fa433148f HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 336
{
"status" : "COMPLETED_WITH_SUCCESS",
"creationTimestamp" : "2021-07-08T09:11:22.957Z",
"description" : "Health-Check operation for SDDC",
"bundleAvailable" : "Yes",
"id" : "beedc2ff-66d2-452f-af4b-176fa433148f",
"completionTimestamp" : "2021-07-08T09:12:12.336Z",
"bundleName" : "healthcheck-2021-07-08-09-11-22-91496"
}
2.34.7. Downloads the HealthSummary bundle created.
The download operation
-
User can download the health summary bundle created.
-
The data is streamed in octect-stream format.
Prerequisites
-
ID of the task
Steps
-
Invoke the API.
|
Note
|
To trigger the API, the user should have a role of an ADMIN or OPERATOR in VCF. |
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/health-summary/d14d42ea-3061-4874-a2ed-651253db37a3/data' -i -X GET \
-H 'Accept: application/octet-stream' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/health-summary/d14d42ea-3061-4874-a2ed-651253db37a3/data HTTP/1.1
Accept: application/octet-stream
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
2.34.8. Get the status of all SOS health-summary tasks.
The get health-summary operation
-
User can get the history of all Health Summary tasks.
Prerequisites
-
None
Steps
-
Invoke the API.
cURL Request
$ curl 'https://sfo-vcf01.rainpole.io/v1/system/health-summary' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer etYWRta....'
HTTP Request
GET /v1/system/health-summary HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....
HTTP Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 729
{
"elements" : [ {
"status" : "COMPLETED_WITH_SUCCESS",
"creationTimestamp" : "2021-07-08T09:11:22.957Z",
"description" : "Health-Check operation for SDDC",
"bundleAvailable" : "Yes",
"id" : "beedc2ff-66d2-452f-af4b-176fa433148f",
"completionTimestamp" : "2021-07-08T09:12:12.336Z",
"bundleName" : "healthcheck-2021-07-08-09-11-22-91496"
}, {
"status" : "COMPLETED_WITH_SUCCESS",
"creationTimestamp" : "2021-07-08T09:15:59.885Z",
"description" : "Health-Check operation for SDDC",
"bundleAvailable" : "Yes",
"id" : "212090e7-833e-4436-9136-f4a4f86277de",
"completionTimestamp" : "2021-07-08T09:16:46.701Z",
"bundleName" : "healthcheck-2021-07-08-09-15-59-91496"
} ]
}