1. Overview

VMware Cloud Foundation API Reference Guide

1.2. License information

License : VMware Cloud Foundation
Terms of service : http://www.vmware.com/

1.3. URI scheme

Host : sfo-vcf01.rainpole.io
BasePath : /
Schemes : HTTPS

1.4. Tags

  • AVNs : APIs for managing Solutions Networking (Application Virtual Networks)

  • BackupRestore : APIs for managing Backups and Restore

  • Bundles : APIs for managing Bundles

  • CEIP : APIs for managing CEIP status

  • Certificates : APIs for managing Certificates

  • Clusters : APIs for managing Clusters

  • Credentials : APIs for managing Credentials

  • DepotSettings : APIs for managing Depot Settings

  • Domains : APIs for managing Domains

  • Federation : APIs for managing Federation

  • Hosts : APIs for managing Hosts

  • License Keys : APIs for managing License Keys

  • Manifests : APIs for managing LCM Manifests

  • Members : APIs for managing Members of the Federation

  • Membership Token : APIs for managing Membership Token

  • NSX-T Clusters : APIs for managing NSX-T Clusters

  • Network Pools : APIs for managing Network Pools

  • NsxTEdgeClusters : APIs for managing NSX-T Edge Clusters

  • PSCs : APIs for managing PSCs

  • Personalities : APIs for managing Personalities

  • Progress : APIs for progress of Federation Tasks

  • SDDC : APIs for managing SDDC

  • SddcManagers : APIs for managing SDDC Managers

  • SystemPrechecks : APIs for managing System Prechecks

  • Tasks : APIs for managing Tasks

  • Tokens : APIs for managing Access and Refresh Token

  • Trusted Certificates : APIs for managing Trusted Certificates

  • Upgradables : APIs for managing Upgradables

  • Upgrades : APIs for managing Upgrades

  • Users : APIs for managing Users

  • VasaProviders : APIs for managing VASA Providers

  • VcfServices : APIs for managing VCF Services

  • VersionAliasesForBundleComponentType : APIs for managing Version Alias Configuration

  • WSA : APIs for managing Workspace ONE Access for vRealize

  • system : APIs for managing DNS & NTP configuration

  • vCenters : APIs for managing vCenters

  • vRA : APIs for managing vRealize Automation

  • vRLI : APIs for managing vRealize Log Insight

  • vROPs : APIs for managing vRealize Operations

  • vRSLCM : APIs for managing vRealize Suite Lifecycle Manager

1.5. API Versioning

  • API versioning is at the granularity of each resource.

  • API versioning is similar to URI versioning so that it is explicit i.e all APIs have the "/<version>/" prefix.

  • API version is independent of the product version and will evolve independently.

Tip
Reference APIs using the full path i.e "/v1/hosts" so that any future changes can be localized to a small scope in the automation code. This ensures that when the API version is incremented, you only need to update the references to the old APIs (which are now marked as deprecated) with the new APIs
Note
  • An illustration of API versioning is shown in the table below.

  • The illustration assumes that the product version is incremented from N to N+1, N+2 and so on.

  • The API version is only incremented when there are backward incompatible changes.

  • The older version of the APIs are deprecated when the version is incremented.

Product Version APIs

Product Version N

  • /v1/hosts

  • /v1/domains

  • /v1/clusters

Product Version N+1

  • /v1/hosts

  • /v1/domains (Deprecated)

  • /v2/domains

  • /v1/clusters

Product Version N+2

  • /v1/hosts (Deprecated)

  • /v2/hosts

  • /v1/domains (Deprecated)

  • /v2/domains

  • /v1/clusters

Product Version N+3

  • /v1/hosts (Deprecated)

  • /v2/hosts (Deprecated)

  • /v3/hosts

  • /v1/domains (Deprecated)

  • /v2/domains

  • /v1/clusters

1.6. Security

1.6.1. Overview

Cloud Builder APIs

  • All APIs are secured and need an username and password for invocation.

  • The APIs follow the Basic Authentication scheme.

  • To invoke the APIs, Cloud Builder "admin" account account and its password is required.

SDDC Manager APIs

  • All APIs are secured and need an access token for invocation.

  • The APIs follow the Bearer Authentication scheme.

  • To invoke the Restore APIs, SDDC Manager "admin" and its password is required.

    • The username and password are sent using Basic Authentication scheme.

Tip
For security reasons, you should periodically update the password of the SDDC Manager account.

1.6.2. Authentication

  • An access token and a refresh token can be obtained using the Token API. Refer Create a token pair section

  • An access token has a validity of 1 hour and a refresh token has a validity of 24 hours.

  • If the access token has expired, a new access token can be obtained using the refresh token (provided the refresh token has not expired). Refer Refresh an access token section.

  • If the refresh token has expired, a new pair of access and refresh token can be obtained using the Token API. Refer Create a token pair section.

  • Refer below for various use cases of API invocation and the HTTP response code :-

API invocation HTTP Response code

With a valid access token

200

Without an access token

401

With an expired access token

401

With an access token with insufficient privileges

403

With an expired or invalid refresh token

404

1.6.3. Authorization

1.6.4. Changing the "admin" account password

Cloud Builder APIs

Note
Changing password of the Cloud Builder "admin" account is not supported.

SDDC Manager APIs

You can follow the below steps to change the password for the "admin" account of the SDDC Manager.

  • SSH in to the SDDC Manager VM, login as "vcf" user.

  • Enter su to switch to the "root" user.

  • Enter the following command:

/opt/vmware/vcf/commonsvcs/scripts/auth/set-basicauth-password.sh admin <password>
  • For <password>, enter the new password to associate with the admin account.

Password requirements:

  • Length: 8-12 characters

  • Must include: mix of upper-case and lower-case letters a number a special character such as @ ! # $ % ^ or ?

  • Cannot include: * { } [ ] ( ) / \ ' " ` ~ , ; : . < >

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
  1. The following data is required :-

    • 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
  1. 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" : "administrator@vsphere.local",
  "password" : "VMware123!"
}'

HTTP Request

POST /v1/tokens HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 77
Host: sfo-vcf01.rainpole.io

{
  "username" : "administrator@vsphere.local",
  "password" : "VMware123!"
}

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
  1. The following data is required

    • Refresh token is obtained when token pair is generated

Steps
  1. 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
  1. The following data is required

    • Refresh token

Steps
  1. 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
  1. The following data is required

    • Name of the SSO or AD domain

    • Username

    • Type of the user. For types supported, refer to User

    • Role ID

Steps
  1. Fetch the role ID for the role.

Tip
Refer to Get the Roles
  1. 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" : "USER_1@vsphere.local",
  "domain" : "vsphere.local",
  "type" : "USER",
  "role" : {
    "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
  }
}, {
  "name" : "USER_2@vsphere.local",
  "domain" : "vsphere.local",
  "type" : "USER",
  "role" : {
    "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
  }
}, {
  "name" : "SERVICE_USER_1",
  "type" : "SERVICE",
  "role" : {
    "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
  }
} ]'

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" : "USER_1@vsphere.local",
  "domain" : "vsphere.local",
  "type" : "USER",
  "role" : {
    "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
  }
}, {
  "name" : "USER_2@vsphere.local",
  "domain" : "vsphere.local",
  "type" : "USER",
  "role" : {
    "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
  }
}, {
  "name" : "SERVICE_USER_1",
  "type" : "SERVICE",
  "role" : {
    "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
  }
} ]

HTTP Response

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 884

{
  "elements" : [ {
    "id" : "162d124b-69a2-4b4a-8437-0bb1ac83d1c4",
    "name" : "USER_1@vsphere.local",
    "domain" : "vsphere.local",
    "type" : "USER",
    "role" : {
      "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
    },
    "creationTimestamp" : "2020-09-29T18:05:23.520Z"
  }, {
    "id" : "aabeec55-bf90-4121-bc03-1def95199e91",
    "name" : "USER_2@vsphere.local",
    "domain" : "vsphere.local",
    "type" : "USER",
    "role" : {
      "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
    },
    "creationTimestamp" : "2020-09-29T18:05:23.520Z"
  }, {
    "id" : "d27e2abd-9071-43ab-a43e-23b756537814",
    "name" : "SERVICE_USER_1",
    "domain" : "Nil",
    "type" : "SERVICE",
    "apiKey" : "xdJLLXKbSG5wC5vr0MmAyGYfXV2TTJLS",
    "role" : {
      "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
    },
    "creationTimestamp" : "2020-09-29T18:05:23.520Z"
  } ]
}

2.2.2. Add service users

  • This API is used to add service users.

Prerequisites
  1. The following data is required

    • Username

    • Type of the user. The type would be SERVICE for service users. For types supported, refer to User.

    • Role ID

Steps
  1. Fetch the role ID for the role.

Tip
Refer to Get the Roles
  1. 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" : "c1558e68-6518-4923-b3e3-677cbdc1d57b"
  }
} ]'

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" : "c1558e68-6518-4923-b3e3-677cbdc1d57b"
  }
} ]

HTTP Response

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 337

{
  "elements" : [ {
    "id" : "acf0d824-a111-484d-92d6-5187c57a28c2",
    "name" : "service_account_1",
    "domain" : "Nil",
    "type" : "SERVICE",
    "apiKey" : "EoVsf61rcOPBZ8PZq0xkScFwNOFecJEh",
    "role" : {
      "id" : "c1558e68-6518-4923-b3e3-677cbdc1d57b"
    },
    "creationTimestamp" : "2020-09-29T18:05:22.639Z"
  } ]
}
  1. 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
  1. The following data is required

    • API key

Steps
  1. 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
  1. 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" : "162d124b-69a2-4b4a-8437-0bb1ac83d1c4",
    "name" : "USER_1@vsphere.local",
    "domain" : "vsphere.local",
    "type" : "USER",
    "role" : {
      "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
    },
    "creationTimestamp" : "2020-09-29T18:05:23.520Z"
  }, {
    "id" : "aabeec55-bf90-4121-bc03-1def95199e91",
    "name" : "USER_2@vsphere.local",
    "domain" : "vsphere.local",
    "type" : "USER",
    "role" : {
      "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
    },
    "creationTimestamp" : "2020-09-29T18:05:23.520Z"
  }, {
    "id" : "d27e2abd-9071-43ab-a43e-23b756537814",
    "name" : "SERVICE_USER_1",
    "domain" : "Nil",
    "type" : "SERVICE",
    "apiKey" : "xdJLLXKbSG5wC5vr0MmAyGYfXV2TTJLS",
    "role" : {
      "id" : "fd226f84-29dd-45e0-bed6-136e7ccf579d"
    },
    "creationTimestamp" : "2020-09-29T18:05:23.520Z"
  } ]
}

2.2.4. Delete a User

  • This API is used to delete an user.

Prerequisites
  1. The following data is required

    • User ID

Steps
  1. Invoke the API with the "user ID" to be deleted.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/users/162d124b-69a2-4b4a-8437-0bb1ac83d1c4' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

DELETE /v1/users/162d124b-69a2-4b4a-8437-0bb1ac83d1c4 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.

Steps
  1. 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" : "8bf8d11c-008a-4ae3-aafd-1983fe86fa8f",
    "name" : "ADMIN",
    "description" : "Administrator"
  }, {
    "id" : "9f2aef96-cf82-45ab-a1dc-ed242d83a9b7",
    "name" : "OPERATOR",
    "description" : "Operator"
  }, {
    "id" : "1036716f-da37-4f0f-a5be-36d81769638f",
    "name" : "VIEWER",
    "description" : "Viewer"
  } ]
}

2.2.6. Get SSO Domain

  • This API is used to fetch the SSO domains known to the system.

Steps
  1. 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
  1. The following data is required

    • SSO Domain name

Steps
  1. 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" : "USER_1@vsphere.local",
    "name" : "USER_1",
    "type" : "USER"
  }, {
    "id" : "USER_2@vsphere.local",
    "name" : "USER_2",
    "type" : "USER"
  }, {
    "id" : "USER_3@vsphere.local",
    "name" : "USER_3",
    "type" : "USER"
  }, {
    "id" : "USER_4@vsphere.local",
    "name" : "USER_4",
    "type" : "USER"
  }, {
    "id" : "äUSER_5@vsphere.local",
    "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.

Steps
  1. 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" : "fff1b284-827b-4c25-a118-8c9d3140baa0"
  }
}

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
  1. The following data is required

    • Old Password

    • New Password

Note
Provide only "newPassword" if you are configuring the local account for the first time.
  1. 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

    • Cannot include: Three same consecutive characters

Steps
  1. 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" : "VMware123!",
  "newPassword" : "VMware12345!"
}'

HTTP Request

PATCH /v1/users/local/admin HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 68
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "oldPassword" : "VMware123!",
  "newPassword" : "VMware12345!"
}

HTTP Response

HTTP/1.1 204 No Content

2.3. SDDCs (Management Domain)

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 - vCenter and NSX

  • Deploys and configures SDDC Manager which provides the ability to perform Day 2 operations

Prerequisites
  1. The following data is required

    • 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.
  • Detailed list of networks

Tip
Refer to: SddcNetworkSpec.
  • DNS details

Tip
Refer to: DnsSpec.
  • List of NTP servers

  • Name of the task to execute

  1. The following data is optional

    • vSAN details

Tip
Refer to: VsanSpec.
  • NSX-T details

Tip
Refer to: SddcNsxtSpec.
Note
In order to re-use Edge Cluster for WCP, provide Edge Form Factor as LARGE and Tier 0 Services High Availability mode as ACTIVE_ACTIVE
  • 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 if Customer Experience Improvement Program is to be enabled

  • Remote Site details

Tip
Refer to: RemoteSiteSpec.
  • Passphrase for the certificates to be used for vCenter and NSX

  • License for the ESXi hosts

  • Boolean to identify if ESXi thumbprint validation is to be skipped

  • Boolean to identify if vSAN should be cleaned up

Note
Should be true only if this is the very first run
Steps
  1. 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 '{
  "dvSwitchVersion" : "7.0.0",
  "skipEsxThumbprintValidation" : true,
  "managementPoolName" : "bringup-networkpool",
  "sddcManagerSpec" : {
    "secondUserCredentials" : {
      "username" : "vcf",
      "password" : "xxxxxxx"
    },
    "ipAddress" : "10.0.0.4",
    "netmask" : "255.255.255.0",
    "hostname" : "sfo-vcf01",
    "rootUserCredentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "restApiCredentials" : {
      "username" : "admin",
      "password" : "xxxxxxx"
    }
  },
  "sddcId" : "sddcId-public-api-1001",
  "esxLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
  "taskName" : "workflowconfig/workflowspec-ems.json",
  "ntpServers" : [ "10.0.0.250" ],
  "dnsSpec" : {
    "subdomain" : "vrack.vsphere.local",
    "domain" : "vsphere.local",
    "nameserver" : "10.0.0.250",
    "secondaryNameserver" : "10.0.0.250"
  },
  "networkSpecs" : [ {
    "subnet" : "10.0.0.0/22",
    "vlanId" : "0",
    "mtu" : "1500",
    "networkType" : "MANAGEMENT",
    "gateway" : "10.0.0.250"
  }, {
    "subnet" : "10.0.4.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.4.7",
      "endIpAddress" : "10.0.4.48"
    }, {
      "startIpAddress" : "10.0.4.3",
      "endIpAddress" : "10.0.4.6"
    } ],
    "includeIpAddress" : [ "10.0.4.50", "10.0.4.49" ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VSAN",
    "gateway" : "10.0.4.253"
  }, {
    "subnet" : "10.0.8.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.8.3",
      "endIpAddress" : "10.0.8.50"
    } ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VMOTION",
    "gateway" : "10.0.8.253"
  } ],
  "nsxtSpec" : {
    "nsxtManagerSize" : "medium",
    "nsxtManagers" : [ {
      "hostname" : "sfo-m01-nsx01a",
      "ip" : "10.0.0.31"
    }, {
      "hostname" : "sfo-m01-nsx01b",
      "ip" : "10.0.0.32"
    }, {
      "hostname" : "sfo-m01-nsx01c",
      "ip" : "10.0.0.33"
    } ],
    "rootNsxtManagerPassword" : "xxxxxxx",
    "nsxtAdminPassword" : "xxxxxxx",
    "nsxtAuditPassword" : "xxxxxxx",
    "rootLoginEnabledForNsxtManager" : "true",
    "sshEnabledForNsxtManager" : "true",
    "overLayTransportZone" : {
      "zoneName" : "sfo-m01-tz-overlay01",
      "networkName" : "net-overlay"
    },
    "vlanTransportZone" : {
      "zoneName" : "sfo-m01-tz-vlan01",
      "networkName" : "net-vlan"
    },
    "vip" : "10.0.0.30",
    "vipFqdn" : "sfo-m01-nsx01",
    "nsxtLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "transportVlanId" : 0,
    "nsxtEdgeSpec" : {
      "edgeClusterName" : "sfo-m01-ec01",
      "edgeRootPassword" : "xxxxxxx",
      "edgeAdminPassword" : "xxxxxxx",
      "edgeAuditPassword" : "xxxxxxx",
      "edgeFormFactor" : "MEDIUM",
      "edgeServicesSpecs" : {
        "tier0GatewayName" : "sfo-m01-ec01-t0-gw01",
        "tier1GatewayName" : "sfo-m01-ec01-t1-gw01"
      },
      "tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
      "asn" : 65000,
      "edgeNodeSpecs" : [ {
        "edgeNodeName" : "sfo-m01-en01",
        "edgeNodeHostname" : "sfo-m01-en01",
        "managementCidr" : "172.28.211.69/24",
        "edgeVtep1Cidr" : "172.28.217.2/24",
        "edgeVtep2Cidr" : "172.28.217.3/24",
        "interfaces" : [ {
          "name" : "uplink-edge1-tor1",
          "interfaceCidr" : "172.28.215.2/24"
        }, {
          "name" : "uplink-edge1-tor2",
          "interfaceCidr" : "172.28.216.2/24"
        } ]
      }, {
        "edgeNodeName" : "sfo-m01-en02",
        "edgeNodeHostname" : "sfo-m01-en02",
        "managementCidr" : "172.28.211.70/24",
        "edgeVtep1Cidr" : "172.28.217.4/24",
        "edgeVtep2Cidr" : "172.28.217.5/24",
        "interfaces" : [ {
          "name" : "uplink-edge2-tor1",
          "interfaceCidr" : "172.28.215.3/24"
        }, {
          "name" : "uplink-edge2-tor2",
          "interfaceCidr" : "172.28.216.3/24"
        } ]
      } ],
      "bgpNeighbours" : [ {
        "neighbourIp" : "172.28.215.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      }, {
        "neighbourIp" : "172.28.216.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      } ]
    },
    "logicalSegments" : [ {
      "name" : "sfo-m01-seg01",
      "networkType" : "REGION_SPECIFIC"
    }, {
      "name" : "sfo-m01-seg02",
      "networkType" : "X_REGION"
    } ]
  },
  "vsanSpec" : {
    "vsanName" : "sfo-m01-cl01-ds-vsan01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "datastoreName" : "sfo-m01-cl01-ds-vsan01"
  },
  "dvsSpecs" : [ {
    "mtu" : 8940,
    "niocSpecs" : [ {
      "trafficType" : "VSAN",
      "value" : "HIGH"
    }, {
      "trafficType" : "VMOTION",
      "value" : "LOW"
    }, {
      "trafficType" : "VDP",
      "value" : "LOW"
    }, {
      "trafficType" : "VIRTUALMACHINE",
      "value" : "HIGH"
    }, {
      "trafficType" : "MANAGEMENT",
      "value" : "NORMAL"
    }, {
      "trafficType" : "NFS",
      "value" : "LOW"
    }, {
      "trafficType" : "HBR",
      "value" : "LOW"
    }, {
      "trafficType" : "FAULTTOLERANCE",
      "value" : "LOW"
    }, {
      "trafficType" : "ISCSI",
      "value" : "LOW"
    } ],
    "dvsName" : "sfo-m01-cl01-vds01",
    "vmnics" : [ "vmnic0", "vmnic1" ],
    "networks" : [ "MANAGEMENT", "VSAN", "VMOTION" ]
  } ],
  "clusterSpec" : {
    "clusterName" : "sfo-m01-cl01",
    "clusterEvcMode" : "",
    "resourcePoolSpecs" : [ {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-mgmt",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "management"
    }, {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-network",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "network"
    }, {
      "cpuSharesLevel" : "normal",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-compute",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "compute"
    }, {
      "name" : "sfo-m01-cl01-rp-user-compute",
      "type" : "compute",
      "cpuReservationMhz" : 2100,
      "cpuLimit" : -1,
      "cpuReservationExpandable" : true,
      "cpuSharesLevel" : "normal",
      "memoryReservationMb" : 3128,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "memorySharesValue" : 0
    } ]
  },
  "pscSpecs" : [ {
    "pscId" : "psc-1",
    "pscSsoSpec" : {
      "ssoDomain" : "vsphere.local"
    },
    "adminUserSsoPassword" : "xxxxxxx"
  } ],
  "vcenterSpec" : {
    "vcenterIp" : "10.0.0.6",
    "vcenterHostname" : "sfo-m01-vc01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "rootVcenterPassword" : "xxxxxxx",
    "vmSize" : "tiny"
  },
  "hostSpecs" : [ {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.100",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx01",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-0",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.101",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx02",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-1",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.102",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx03",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-2",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.103",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx04",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-3",
    "association" : "sfo-m01-dc01"
  } ]
}'

HTTP Request

POST /v1/sddcs/validations HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 8923
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==

{
  "dvSwitchVersion" : "7.0.0",
  "skipEsxThumbprintValidation" : true,
  "managementPoolName" : "bringup-networkpool",
  "sddcManagerSpec" : {
    "secondUserCredentials" : {
      "username" : "vcf",
      "password" : "xxxxxxx"
    },
    "ipAddress" : "10.0.0.4",
    "netmask" : "255.255.255.0",
    "hostname" : "sfo-vcf01",
    "rootUserCredentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "restApiCredentials" : {
      "username" : "admin",
      "password" : "xxxxxxx"
    }
  },
  "sddcId" : "sddcId-public-api-1001",
  "esxLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
  "taskName" : "workflowconfig/workflowspec-ems.json",
  "ntpServers" : [ "10.0.0.250" ],
  "dnsSpec" : {
    "subdomain" : "vrack.vsphere.local",
    "domain" : "vsphere.local",
    "nameserver" : "10.0.0.250",
    "secondaryNameserver" : "10.0.0.250"
  },
  "networkSpecs" : [ {
    "subnet" : "10.0.0.0/22",
    "vlanId" : "0",
    "mtu" : "1500",
    "networkType" : "MANAGEMENT",
    "gateway" : "10.0.0.250"
  }, {
    "subnet" : "10.0.4.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.4.7",
      "endIpAddress" : "10.0.4.48"
    }, {
      "startIpAddress" : "10.0.4.3",
      "endIpAddress" : "10.0.4.6"
    } ],
    "includeIpAddress" : [ "10.0.4.50", "10.0.4.49" ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VSAN",
    "gateway" : "10.0.4.253"
  }, {
    "subnet" : "10.0.8.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.8.3",
      "endIpAddress" : "10.0.8.50"
    } ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VMOTION",
    "gateway" : "10.0.8.253"
  } ],
  "nsxtSpec" : {
    "nsxtManagerSize" : "medium",
    "nsxtManagers" : [ {
      "hostname" : "sfo-m01-nsx01a",
      "ip" : "10.0.0.31"
    }, {
      "hostname" : "sfo-m01-nsx01b",
      "ip" : "10.0.0.32"
    }, {
      "hostname" : "sfo-m01-nsx01c",
      "ip" : "10.0.0.33"
    } ],
    "rootNsxtManagerPassword" : "xxxxxxx",
    "nsxtAdminPassword" : "xxxxxxx",
    "nsxtAuditPassword" : "xxxxxxx",
    "rootLoginEnabledForNsxtManager" : "true",
    "sshEnabledForNsxtManager" : "true",
    "overLayTransportZone" : {
      "zoneName" : "sfo-m01-tz-overlay01",
      "networkName" : "net-overlay"
    },
    "vlanTransportZone" : {
      "zoneName" : "sfo-m01-tz-vlan01",
      "networkName" : "net-vlan"
    },
    "vip" : "10.0.0.30",
    "vipFqdn" : "sfo-m01-nsx01",
    "nsxtLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "transportVlanId" : 0,
    "nsxtEdgeSpec" : {
      "edgeClusterName" : "sfo-m01-ec01",
      "edgeRootPassword" : "xxxxxxx",
      "edgeAdminPassword" : "xxxxxxx",
      "edgeAuditPassword" : "xxxxxxx",
      "edgeFormFactor" : "MEDIUM",
      "edgeServicesSpecs" : {
        "tier0GatewayName" : "sfo-m01-ec01-t0-gw01",
        "tier1GatewayName" : "sfo-m01-ec01-t1-gw01"
      },
      "tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
      "asn" : 65000,
      "edgeNodeSpecs" : [ {
        "edgeNodeName" : "sfo-m01-en01",
        "edgeNodeHostname" : "sfo-m01-en01",
        "managementCidr" : "172.28.211.69/24",
        "edgeVtep1Cidr" : "172.28.217.2/24",
        "edgeVtep2Cidr" : "172.28.217.3/24",
        "interfaces" : [ {
          "name" : "uplink-edge1-tor1",
          "interfaceCidr" : "172.28.215.2/24"
        }, {
          "name" : "uplink-edge1-tor2",
          "interfaceCidr" : "172.28.216.2/24"
        } ]
      }, {
        "edgeNodeName" : "sfo-m01-en02",
        "edgeNodeHostname" : "sfo-m01-en02",
        "managementCidr" : "172.28.211.70/24",
        "edgeVtep1Cidr" : "172.28.217.4/24",
        "edgeVtep2Cidr" : "172.28.217.5/24",
        "interfaces" : [ {
          "name" : "uplink-edge2-tor1",
          "interfaceCidr" : "172.28.215.3/24"
        }, {
          "name" : "uplink-edge2-tor2",
          "interfaceCidr" : "172.28.216.3/24"
        } ]
      } ],
      "bgpNeighbours" : [ {
        "neighbourIp" : "172.28.215.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      }, {
        "neighbourIp" : "172.28.216.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      } ]
    },
    "logicalSegments" : [ {
      "name" : "sfo-m01-seg01",
      "networkType" : "REGION_SPECIFIC"
    }, {
      "name" : "sfo-m01-seg02",
      "networkType" : "X_REGION"
    } ]
  },
  "vsanSpec" : {
    "vsanName" : "sfo-m01-cl01-ds-vsan01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "datastoreName" : "sfo-m01-cl01-ds-vsan01"
  },
  "dvsSpecs" : [ {
    "mtu" : 8940,
    "niocSpecs" : [ {
      "trafficType" : "VSAN",
      "value" : "HIGH"
    }, {
      "trafficType" : "VMOTION",
      "value" : "LOW"
    }, {
      "trafficType" : "VDP",
      "value" : "LOW"
    }, {
      "trafficType" : "VIRTUALMACHINE",
      "value" : "HIGH"
    }, {
      "trafficType" : "MANAGEMENT",
      "value" : "NORMAL"
    }, {
      "trafficType" : "NFS",
      "value" : "LOW"
    }, {
      "trafficType" : "HBR",
      "value" : "LOW"
    }, {
      "trafficType" : "FAULTTOLERANCE",
      "value" : "LOW"
    }, {
      "trafficType" : "ISCSI",
      "value" : "LOW"
    } ],
    "dvsName" : "sfo-m01-cl01-vds01",
    "vmnics" : [ "vmnic0", "vmnic1" ],
    "networks" : [ "MANAGEMENT", "VSAN", "VMOTION" ]
  } ],
  "clusterSpec" : {
    "clusterName" : "sfo-m01-cl01",
    "clusterEvcMode" : "",
    "resourcePoolSpecs" : [ {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-mgmt",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "management"
    }, {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-network",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "network"
    }, {
      "cpuSharesLevel" : "normal",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-compute",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "compute"
    }, {
      "name" : "sfo-m01-cl01-rp-user-compute",
      "type" : "compute",
      "cpuReservationMhz" : 2100,
      "cpuLimit" : -1,
      "cpuReservationExpandable" : true,
      "cpuSharesLevel" : "normal",
      "memoryReservationMb" : 3128,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "memorySharesValue" : 0
    } ]
  },
  "pscSpecs" : [ {
    "pscId" : "psc-1",
    "pscSsoSpec" : {
      "ssoDomain" : "vsphere.local"
    },
    "adminUserSsoPassword" : "xxxxxxx"
  } ],
  "vcenterSpec" : {
    "vcenterIp" : "10.0.0.6",
    "vcenterHostname" : "sfo-m01-vc01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "rootVcenterPassword" : "xxxxxxx",
    "vmSize" : "tiny"
  },
  "hostSpecs" : [ {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.100",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx01",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-0",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.101",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx02",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-1",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.102",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx03",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-2",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.103",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx04",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-3",
    "association" : "sfo-m01-dc01"
  } ]
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 11058

{
  "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    \"secondUserCredentials\": {\n      \"username\": \"vcf\",\n      \"password\": \"xxxxxxx\"\n    },\n    \"ipAddress\": \"10.0.0.4\",\n    \"netmask\": \"255.255.255.0\",\n    \"hostname\": \"sfo-vcf01\",\n    \"rootUserCredentials\": {\n      \"username\": \"root\",\n      \"password\": \"xxxxxxx\"\n    },\n    \"restApiCredentials\": {\n      \"username\": \"admin\",\n      \"password\": \"xxxxxxx\"\n    }\n  },\n  \"sddcId\": \"sddcId-public-api-1001\",\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    \"nsxtEdgeSpec\": {\n      \"edgeClusterName\": \"sfo-m01-ec01\",\n      \"edgeRootPassword\": \"xxxxxxx\",\n      \"edgeAdminPassword\": \"xxxxxxx\",\n      \"edgeAuditPassword\": \"xxxxxxx\",\n      \"edgeFormFactor\": \"MEDIUM\",\n      \"edgeServicesSpecs\": {\n        \"tier0GatewayName\" : \"sfo-m01-ec01-t0-gw01\",\n        \"tier1GatewayName\" : \"sfo-m01-ec01-t1-gw01\"\n      },\n      \"tier0ServicesHighAvailability\": \"ACTIVE_ACTIVE\",\n      \"asn\": 65000,\n      \"edgeNodeSpecs\": [\n        {\n          \"edgeNodeName\": \"sfo-m01-en01\",\n          \"edgeNodeHostname\": \"sfo-m01-en01\",\n          \"managementCidr\": \"172.28.211.69/24\",\n          \"edgeVtep1Cidr\": \"172.28.217.2/24\",\n          \"edgeVtep2Cidr\": \"172.28.217.3/24\",\n          \"interfaces\": [\n            {\n              \"name\": \"uplink-edge1-tor1\",\n              \"interfaceCidr\": \"172.28.215.2/24\"\n            },\n            {\n              \"name\": \"uplink-edge1-tor2\",\n              \"interfaceCidr\": \"172.28.216.2/24\"\n            }\n          ]\n        },\n        {\n          \"edgeNodeName\": \"sfo-m01-en02\",\n          \"edgeNodeHostname\": \"sfo-m01-en02\",\n          \"managementCidr\": \"172.28.211.70/24\",\n          \"edgeVtep1Cidr\": \"172.28.217.4/24\",\n          \"edgeVtep2Cidr\": \"172.28.217.5/24\",\n          \"interfaces\": [\n            {\n              \"name\": \"uplink-edge2-tor1\",\n              \"interfaceCidr\": \"172.28.215.3/24\"\n            },\n            {\n              \"name\": \"uplink-edge2-tor2\",\n              \"interfaceCidr\": \"172.28.216.3/24\"\n            }\n          ]\n        }\n      ],\n      \"bgpNeighbours\": [\n        {\n          \"neighbourIp\": \"172.28.215.1\",\n          \"autonomousSystem\": 65001,\n          \"password\": \"xxxxxxx\"\n        },\n        {\n          \"neighbourIp\": \"172.28.216.1\",\n          \"autonomousSystem\": 65001,\n          \"password\": \"xxxxxxx\"\n        }\n      ]\n    },\n    \"logicalSegments\": [\n      {\n        \"name\": \"sfo-m01-seg01\",\n        \"networkType\": \"REGION_SPECIFIC\"\n      },\n      {\n        \"name\": \"sfo-m01-seg02\",\n        \"networkType\": \"X_REGION\"\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    \"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"
  }
}
  1. Poll the task until "executionStatus" is not "IN_PROGRESS" using the "id" from the previous response.

  2. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is
    "SUCCEEDED".

  3. In case of errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is
    "FAILED".

  4. Validate the input specification.

Note
Make changes to the input specification and re-validate using a new API invocation.
  1. Download the validation report (optional).

cURL Request

$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/validations/3db39253-16c4-43dd-9bdb-3c7316f635ca/report' -i -u 'admin:VMwareInfra@1' -X GET \
    -H 'Content-Type: application/octet-stream'

HTTP Request

GET /v1/sddcs/validations/3db39253-16c4-43dd-9bdb-3c7316f635ca/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".
  1. 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 '{
  "dvSwitchVersion" : "7.0.0",
  "skipEsxThumbprintValidation" : true,
  "managementPoolName" : "bringup-networkpool",
  "sddcManagerSpec" : {
    "secondUserCredentials" : {
      "username" : "vcf",
      "password" : "xxxxxxx"
    },
    "ipAddress" : "10.0.0.4",
    "netmask" : "255.255.255.0",
    "hostname" : "sfo-vcf01",
    "rootUserCredentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "restApiCredentials" : {
      "username" : "admin",
      "password" : "xxxxxxx"
    }
  },
  "sddcId" : "sddcId-public-api-1001",
  "esxLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
  "taskName" : "workflowconfig/workflowspec-ems.json",
  "ntpServers" : [ "10.0.0.250" ],
  "dnsSpec" : {
    "subdomain" : "vrack.vsphere.local",
    "domain" : "vsphere.local",
    "nameserver" : "10.0.0.250",
    "secondaryNameserver" : "10.0.0.250"
  },
  "networkSpecs" : [ {
    "subnet" : "10.0.0.0/22",
    "vlanId" : "0",
    "mtu" : "1500",
    "networkType" : "MANAGEMENT",
    "gateway" : "10.0.0.250"
  }, {
    "subnet" : "10.0.4.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.4.7",
      "endIpAddress" : "10.0.4.48"
    }, {
      "startIpAddress" : "10.0.4.3",
      "endIpAddress" : "10.0.4.6"
    } ],
    "includeIpAddress" : [ "10.0.4.50", "10.0.4.49" ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VSAN",
    "gateway" : "10.0.4.253"
  }, {
    "subnet" : "10.0.8.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.8.3",
      "endIpAddress" : "10.0.8.50"
    } ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VMOTION",
    "gateway" : "10.0.8.253"
  } ],
  "nsxtSpec" : {
    "nsxtManagerSize" : "medium",
    "nsxtManagers" : [ {
      "hostname" : "sfo-m01-nsx01a",
      "ip" : "10.0.0.31"
    }, {
      "hostname" : "sfo-m01-nsx01b",
      "ip" : "10.0.0.32"
    }, {
      "hostname" : "sfo-m01-nsx01c",
      "ip" : "10.0.0.33"
    } ],
    "rootNsxtManagerPassword" : "xxxxxxx",
    "nsxtAdminPassword" : "xxxxxxx",
    "nsxtAuditPassword" : "xxxxxxx",
    "rootLoginEnabledForNsxtManager" : "true",
    "sshEnabledForNsxtManager" : "true",
    "overLayTransportZone" : {
      "zoneName" : "sfo-m01-tz-overlay01",
      "networkName" : "net-overlay"
    },
    "vlanTransportZone" : {
      "zoneName" : "sfo-m01-tz-vlan01",
      "networkName" : "net-vlan"
    },
    "vip" : "10.0.0.30",
    "vipFqdn" : "sfo-m01-nsx01",
    "nsxtLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "transportVlanId" : 0,
    "nsxtEdgeSpec" : {
      "edgeClusterName" : "sfo-m01-ec01",
      "edgeRootPassword" : "xxxxxxx",
      "edgeAdminPassword" : "xxxxxxx",
      "edgeAuditPassword" : "xxxxxxx",
      "edgeFormFactor" : "MEDIUM",
      "edgeServicesSpecs" : {
        "tier0GatewayName" : "sfo-m01-ec01-t0-gw01",
        "tier1GatewayName" : "sfo-m01-ec01-t1-gw01"
      },
      "tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
      "asn" : 65000,
      "edgeNodeSpecs" : [ {
        "edgeNodeName" : "sfo-m01-en01",
        "edgeNodeHostname" : "sfo-m01-en01",
        "managementCidr" : "172.28.211.69/24",
        "edgeVtep1Cidr" : "172.28.217.2/24",
        "edgeVtep2Cidr" : "172.28.217.3/24",
        "interfaces" : [ {
          "name" : "uplink-edge1-tor1",
          "interfaceCidr" : "172.28.215.2/24"
        }, {
          "name" : "uplink-edge1-tor2",
          "interfaceCidr" : "172.28.216.2/24"
        } ]
      }, {
        "edgeNodeName" : "sfo-m01-en02",
        "edgeNodeHostname" : "sfo-m01-en02",
        "managementCidr" : "172.28.211.70/24",
        "edgeVtep1Cidr" : "172.28.217.4/24",
        "edgeVtep2Cidr" : "172.28.217.5/24",
        "interfaces" : [ {
          "name" : "uplink-edge2-tor1",
          "interfaceCidr" : "172.28.215.3/24"
        }, {
          "name" : "uplink-edge2-tor2",
          "interfaceCidr" : "172.28.216.3/24"
        } ]
      } ],
      "bgpNeighbours" : [ {
        "neighbourIp" : "172.28.215.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      }, {
        "neighbourIp" : "172.28.216.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      } ]
    },
    "logicalSegments" : [ {
      "name" : "sfo-m01-seg01",
      "networkType" : "REGION_SPECIFIC"
    }, {
      "name" : "sfo-m01-seg02",
      "networkType" : "X_REGION"
    } ]
  },
  "vsanSpec" : {
    "vsanName" : "sfo-m01-cl01-ds-vsan01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "datastoreName" : "sfo-m01-cl01-ds-vsan01"
  },
  "dvsSpecs" : [ {
    "mtu" : 8940,
    "niocSpecs" : [ {
      "trafficType" : "VSAN",
      "value" : "HIGH"
    }, {
      "trafficType" : "VMOTION",
      "value" : "LOW"
    }, {
      "trafficType" : "VDP",
      "value" : "LOW"
    }, {
      "trafficType" : "VIRTUALMACHINE",
      "value" : "HIGH"
    }, {
      "trafficType" : "MANAGEMENT",
      "value" : "NORMAL"
    }, {
      "trafficType" : "NFS",
      "value" : "LOW"
    }, {
      "trafficType" : "HBR",
      "value" : "LOW"
    }, {
      "trafficType" : "FAULTTOLERANCE",
      "value" : "LOW"
    }, {
      "trafficType" : "ISCSI",
      "value" : "LOW"
    } ],
    "dvsName" : "sfo-m01-cl01-vds01",
    "vmnics" : [ "vmnic0", "vmnic1" ],
    "networks" : [ "MANAGEMENT", "VSAN", "VMOTION" ]
  } ],
  "clusterSpec" : {
    "clusterName" : "sfo-m01-cl01",
    "clusterEvcMode" : "",
    "resourcePoolSpecs" : [ {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-mgmt",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "management"
    }, {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-network",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "network"
    }, {
      "cpuSharesLevel" : "normal",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-compute",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "compute"
    }, {
      "name" : "sfo-m01-cl01-rp-user-compute",
      "type" : "compute",
      "cpuReservationMhz" : 2100,
      "cpuLimit" : -1,
      "cpuReservationExpandable" : true,
      "cpuSharesLevel" : "normal",
      "memoryReservationMb" : 3128,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "memorySharesValue" : 0
    } ]
  },
  "pscSpecs" : [ {
    "pscId" : "psc-1",
    "pscSsoSpec" : {
      "ssoDomain" : "vsphere.local"
    },
    "adminUserSsoPassword" : "xxxxxxx"
  } ],
  "vcenterSpec" : {
    "vcenterIp" : "10.0.0.6",
    "vcenterHostname" : "sfo-m01-vc01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "rootVcenterPassword" : "xxxxxxx",
    "vmSize" : "tiny"
  },
  "hostSpecs" : [ {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.100",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx01",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-0",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.101",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx02",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-1",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.102",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx03",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-2",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.103",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx04",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-3",
    "association" : "sfo-m01-dc01"
  } ]
}'

HTTP Request

POST /v1/sddcs HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 8923
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==

{
  "dvSwitchVersion" : "7.0.0",
  "skipEsxThumbprintValidation" : true,
  "managementPoolName" : "bringup-networkpool",
  "sddcManagerSpec" : {
    "secondUserCredentials" : {
      "username" : "vcf",
      "password" : "xxxxxxx"
    },
    "ipAddress" : "10.0.0.4",
    "netmask" : "255.255.255.0",
    "hostname" : "sfo-vcf01",
    "rootUserCredentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "restApiCredentials" : {
      "username" : "admin",
      "password" : "xxxxxxx"
    }
  },
  "sddcId" : "sddcId-public-api-1001",
  "esxLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
  "taskName" : "workflowconfig/workflowspec-ems.json",
  "ntpServers" : [ "10.0.0.250" ],
  "dnsSpec" : {
    "subdomain" : "vrack.vsphere.local",
    "domain" : "vsphere.local",
    "nameserver" : "10.0.0.250",
    "secondaryNameserver" : "10.0.0.250"
  },
  "networkSpecs" : [ {
    "subnet" : "10.0.0.0/22",
    "vlanId" : "0",
    "mtu" : "1500",
    "networkType" : "MANAGEMENT",
    "gateway" : "10.0.0.250"
  }, {
    "subnet" : "10.0.4.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.4.7",
      "endIpAddress" : "10.0.4.48"
    }, {
      "startIpAddress" : "10.0.4.3",
      "endIpAddress" : "10.0.4.6"
    } ],
    "includeIpAddress" : [ "10.0.4.50", "10.0.4.49" ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VSAN",
    "gateway" : "10.0.4.253"
  }, {
    "subnet" : "10.0.8.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.8.3",
      "endIpAddress" : "10.0.8.50"
    } ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VMOTION",
    "gateway" : "10.0.8.253"
  } ],
  "nsxtSpec" : {
    "nsxtManagerSize" : "medium",
    "nsxtManagers" : [ {
      "hostname" : "sfo-m01-nsx01a",
      "ip" : "10.0.0.31"
    }, {
      "hostname" : "sfo-m01-nsx01b",
      "ip" : "10.0.0.32"
    }, {
      "hostname" : "sfo-m01-nsx01c",
      "ip" : "10.0.0.33"
    } ],
    "rootNsxtManagerPassword" : "xxxxxxx",
    "nsxtAdminPassword" : "xxxxxxx",
    "nsxtAuditPassword" : "xxxxxxx",
    "rootLoginEnabledForNsxtManager" : "true",
    "sshEnabledForNsxtManager" : "true",
    "overLayTransportZone" : {
      "zoneName" : "sfo-m01-tz-overlay01",
      "networkName" : "net-overlay"
    },
    "vlanTransportZone" : {
      "zoneName" : "sfo-m01-tz-vlan01",
      "networkName" : "net-vlan"
    },
    "vip" : "10.0.0.30",
    "vipFqdn" : "sfo-m01-nsx01",
    "nsxtLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "transportVlanId" : 0,
    "nsxtEdgeSpec" : {
      "edgeClusterName" : "sfo-m01-ec01",
      "edgeRootPassword" : "xxxxxxx",
      "edgeAdminPassword" : "xxxxxxx",
      "edgeAuditPassword" : "xxxxxxx",
      "edgeFormFactor" : "MEDIUM",
      "edgeServicesSpecs" : {
        "tier0GatewayName" : "sfo-m01-ec01-t0-gw01",
        "tier1GatewayName" : "sfo-m01-ec01-t1-gw01"
      },
      "tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
      "asn" : 65000,
      "edgeNodeSpecs" : [ {
        "edgeNodeName" : "sfo-m01-en01",
        "edgeNodeHostname" : "sfo-m01-en01",
        "managementCidr" : "172.28.211.69/24",
        "edgeVtep1Cidr" : "172.28.217.2/24",
        "edgeVtep2Cidr" : "172.28.217.3/24",
        "interfaces" : [ {
          "name" : "uplink-edge1-tor1",
          "interfaceCidr" : "172.28.215.2/24"
        }, {
          "name" : "uplink-edge1-tor2",
          "interfaceCidr" : "172.28.216.2/24"
        } ]
      }, {
        "edgeNodeName" : "sfo-m01-en02",
        "edgeNodeHostname" : "sfo-m01-en02",
        "managementCidr" : "172.28.211.70/24",
        "edgeVtep1Cidr" : "172.28.217.4/24",
        "edgeVtep2Cidr" : "172.28.217.5/24",
        "interfaces" : [ {
          "name" : "uplink-edge2-tor1",
          "interfaceCidr" : "172.28.215.3/24"
        }, {
          "name" : "uplink-edge2-tor2",
          "interfaceCidr" : "172.28.216.3/24"
        } ]
      } ],
      "bgpNeighbours" : [ {
        "neighbourIp" : "172.28.215.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      }, {
        "neighbourIp" : "172.28.216.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      } ]
    },
    "logicalSegments" : [ {
      "name" : "sfo-m01-seg01",
      "networkType" : "REGION_SPECIFIC"
    }, {
      "name" : "sfo-m01-seg02",
      "networkType" : "X_REGION"
    } ]
  },
  "vsanSpec" : {
    "vsanName" : "sfo-m01-cl01-ds-vsan01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "datastoreName" : "sfo-m01-cl01-ds-vsan01"
  },
  "dvsSpecs" : [ {
    "mtu" : 8940,
    "niocSpecs" : [ {
      "trafficType" : "VSAN",
      "value" : "HIGH"
    }, {
      "trafficType" : "VMOTION",
      "value" : "LOW"
    }, {
      "trafficType" : "VDP",
      "value" : "LOW"
    }, {
      "trafficType" : "VIRTUALMACHINE",
      "value" : "HIGH"
    }, {
      "trafficType" : "MANAGEMENT",
      "value" : "NORMAL"
    }, {
      "trafficType" : "NFS",
      "value" : "LOW"
    }, {
      "trafficType" : "HBR",
      "value" : "LOW"
    }, {
      "trafficType" : "FAULTTOLERANCE",
      "value" : "LOW"
    }, {
      "trafficType" : "ISCSI",
      "value" : "LOW"
    } ],
    "dvsName" : "sfo-m01-cl01-vds01",
    "vmnics" : [ "vmnic0", "vmnic1" ],
    "networks" : [ "MANAGEMENT", "VSAN", "VMOTION" ]
  } ],
  "clusterSpec" : {
    "clusterName" : "sfo-m01-cl01",
    "clusterEvcMode" : "",
    "resourcePoolSpecs" : [ {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-mgmt",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "management"
    }, {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-network",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "network"
    }, {
      "cpuSharesLevel" : "normal",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-compute",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "compute"
    }, {
      "name" : "sfo-m01-cl01-rp-user-compute",
      "type" : "compute",
      "cpuReservationMhz" : 2100,
      "cpuLimit" : -1,
      "cpuReservationExpandable" : true,
      "cpuSharesLevel" : "normal",
      "memoryReservationMb" : 3128,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "memorySharesValue" : 0
    } ]
  },
  "pscSpecs" : [ {
    "pscId" : "psc-1",
    "pscSsoSpec" : {
      "ssoDomain" : "vsphere.local"
    },
    "adminUserSsoPassword" : "xxxxxxx"
  } ],
  "vcenterSpec" : {
    "vcenterIp" : "10.0.0.6",
    "vcenterHostname" : "sfo-m01-vc01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "rootVcenterPassword" : "xxxxxxx",
    "vmSize" : "tiny"
  },
  "hostSpecs" : [ {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.100",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx01",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-0",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.101",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx02",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-1",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.102",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx03",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-2",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.103",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx04",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-3",
    "association" : "sfo-m01-dc01"
  } ]
}

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/sddcs/97f5c5fe-187f-46d3-b446-73e310187428
Content-Type: application/json
Content-Length: 2514

{
  "id" : "97f5c5fe-187f-46d3-b446-73e310187428",
  "name" : "Bringup-Ems",
  "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" : "NSXvConfiguration",
    "processingStateDescription" : "Deploy and Configure NSX for vSphere",
    "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"
  } ]
}
  1. 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 "SUCCESSFUL", the task is completed successfully.

  • If the "status" is "FAILED", the task can be re-executed.

Tip
Refer to: Retry an SDDC creation.

2.3.2. Get the SDDCS

Steps
  1. 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: 2651

{
  "elements" : [ {
    "id" : "97f5c5fe-187f-46d3-b446-73e310187428",
    "name" : "Bringup-Ems",
    "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" : "NSXvConfiguration",
      "processingStateDescription" : "Deploy and Configure NSX for vSphere",
      "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
  1. The following data is required

    • ID of the SDDC

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-cb01.rainpole.local/v1/sddcs/b285bfc6-8ef2-48d3-a8e2-4ccf921b1f1a' -i -u 'admin:VMwareInfra@1' -X GET \
    -H 'Accept: application/json'

HTTP Request

GET /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: 2514

{
  "id" : "97f5c5fe-187f-46d3-b446-73e310187428",
  "name" : "Bringup-Ems",
  "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" : "NSXvConfiguration",
    "processingStateDescription" : "Deploy and Configure NSX for vSphere",
    "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
  1. The following data is required

    • ID of the failed task

  2. The following data is optional

    • 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
  1. 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: 2514

{
  "id" : "97f5c5fe-187f-46d3-b446-73e310187428",
  "name" : "Bringup-Ems",
  "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" : "NSXvConfiguration",
    "processingStateDescription" : "Deploy and Configure NSX for vSphere",
    "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"
  } ]
}
  1. 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 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d '{
  "dvSwitchVersion" : "7.0.0",
  "skipEsxThumbprintValidation" : true,
  "managementPoolName" : "bringup-networkpool",
  "sddcManagerSpec" : {
    "secondUserCredentials" : {
      "username" : "vcf",
      "password" : "xxxxxxx"
    },
    "ipAddress" : "10.0.0.4",
    "netmask" : "255.255.255.0",
    "hostname" : "sfo-vcf01",
    "rootUserCredentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "restApiCredentials" : {
      "username" : "admin",
      "password" : "xxxxxxx"
    }
  },
  "sddcId" : "sddcId-public-api-1001",
  "esxLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
  "taskName" : "workflowconfig/workflowspec-ems.json",
  "ntpServers" : [ "10.0.0.250" ],
  "dnsSpec" : {
    "subdomain" : "vrack.vsphere.local",
    "domain" : "vsphere.local",
    "nameserver" : "10.0.0.250",
    "secondaryNameserver" : "10.0.0.250"
  },
  "networkSpecs" : [ {
    "subnet" : "10.0.0.0/22",
    "vlanId" : "0",
    "mtu" : "1500",
    "networkType" : "MANAGEMENT",
    "gateway" : "10.0.0.250"
  }, {
    "subnet" : "10.0.4.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.4.7",
      "endIpAddress" : "10.0.4.48"
    }, {
      "startIpAddress" : "10.0.4.3",
      "endIpAddress" : "10.0.4.6"
    } ],
    "includeIpAddress" : [ "10.0.4.50", "10.0.4.49" ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VSAN",
    "gateway" : "10.0.4.253"
  }, {
    "subnet" : "10.0.8.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.8.3",
      "endIpAddress" : "10.0.8.50"
    } ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VMOTION",
    "gateway" : "10.0.8.253"
  } ],
  "nsxtSpec" : {
    "nsxtManagerSize" : "medium",
    "nsxtManagers" : [ {
      "hostname" : "sfo-m01-nsx01a",
      "ip" : "10.0.0.31"
    }, {
      "hostname" : "sfo-m01-nsx01b",
      "ip" : "10.0.0.32"
    }, {
      "hostname" : "sfo-m01-nsx01c",
      "ip" : "10.0.0.33"
    } ],
    "rootNsxtManagerPassword" : "xxxxxxx",
    "nsxtAdminPassword" : "xxxxxxx",
    "nsxtAuditPassword" : "xxxxxxx",
    "rootLoginEnabledForNsxtManager" : "true",
    "sshEnabledForNsxtManager" : "true",
    "overLayTransportZone" : {
      "zoneName" : "sfo-m01-tz-overlay01",
      "networkName" : "net-overlay"
    },
    "vlanTransportZone" : {
      "zoneName" : "sfo-m01-tz-vlan01",
      "networkName" : "net-vlan"
    },
    "vip" : "10.0.0.30",
    "vipFqdn" : "sfo-m01-nsx01",
    "nsxtLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "transportVlanId" : 0,
    "nsxtEdgeSpec" : {
      "edgeClusterName" : "sfo-m01-ec01",
      "edgeRootPassword" : "xxxxxxx",
      "edgeAdminPassword" : "xxxxxxx",
      "edgeAuditPassword" : "xxxxxxx",
      "edgeFormFactor" : "MEDIUM",
      "edgeServicesSpecs" : {
        "tier0GatewayName" : "sfo-m01-ec01-t0-gw01",
        "tier1GatewayName" : "sfo-m01-ec01-t1-gw01"
      },
      "tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
      "asn" : 65000,
      "edgeNodeSpecs" : [ {
        "edgeNodeName" : "sfo-m01-en01",
        "edgeNodeHostname" : "sfo-m01-en01",
        "managementCidr" : "172.28.211.69/24",
        "edgeVtep1Cidr" : "172.28.217.2/24",
        "edgeVtep2Cidr" : "172.28.217.3/24",
        "interfaces" : [ {
          "name" : "uplink-edge1-tor1",
          "interfaceCidr" : "172.28.215.2/24"
        }, {
          "name" : "uplink-edge1-tor2",
          "interfaceCidr" : "172.28.216.2/24"
        } ]
      }, {
        "edgeNodeName" : "sfo-m01-en02",
        "edgeNodeHostname" : "sfo-m01-en02",
        "managementCidr" : "172.28.211.70/24",
        "edgeVtep1Cidr" : "172.28.217.4/24",
        "edgeVtep2Cidr" : "172.28.217.5/24",
        "interfaces" : [ {
          "name" : "uplink-edge2-tor1",
          "interfaceCidr" : "172.28.215.3/24"
        }, {
          "name" : "uplink-edge2-tor2",
          "interfaceCidr" : "172.28.216.3/24"
        } ]
      } ],
      "bgpNeighbours" : [ {
        "neighbourIp" : "172.28.215.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      }, {
        "neighbourIp" : "172.28.216.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      } ]
    },
    "logicalSegments" : [ {
      "name" : "sfo-m01-seg01",
      "networkType" : "REGION_SPECIFIC"
    }, {
      "name" : "sfo-m01-seg02",
      "networkType" : "X_REGION"
    } ]
  },
  "vsanSpec" : {
    "vsanName" : "sfo-m01-cl01-ds-vsan01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "datastoreName" : "sfo-m01-cl01-ds-vsan01"
  },
  "dvsSpecs" : [ {
    "mtu" : 8940,
    "niocSpecs" : [ {
      "trafficType" : "VSAN",
      "value" : "HIGH"
    }, {
      "trafficType" : "VMOTION",
      "value" : "LOW"
    }, {
      "trafficType" : "VDP",
      "value" : "LOW"
    }, {
      "trafficType" : "VIRTUALMACHINE",
      "value" : "HIGH"
    }, {
      "trafficType" : "MANAGEMENT",
      "value" : "NORMAL"
    }, {
      "trafficType" : "NFS",
      "value" : "LOW"
    }, {
      "trafficType" : "HBR",
      "value" : "LOW"
    }, {
      "trafficType" : "FAULTTOLERANCE",
      "value" : "LOW"
    }, {
      "trafficType" : "ISCSI",
      "value" : "LOW"
    } ],
    "dvsName" : "sfo-m01-cl01-vds01",
    "vmnics" : [ "vmnic0", "vmnic1" ],
    "networks" : [ "MANAGEMENT", "VSAN", "VMOTION" ]
  } ],
  "clusterSpec" : {
    "clusterName" : "sfo-m01-cl01",
    "clusterEvcMode" : "",
    "resourcePoolSpecs" : [ {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-mgmt",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "management"
    }, {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-network",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "network"
    }, {
      "cpuSharesLevel" : "normal",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-compute",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "compute"
    }, {
      "name" : "sfo-m01-cl01-rp-user-compute",
      "type" : "compute",
      "cpuReservationMhz" : 2100,
      "cpuLimit" : -1,
      "cpuReservationExpandable" : true,
      "cpuSharesLevel" : "normal",
      "memoryReservationMb" : 3128,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "memorySharesValue" : 0
    } ]
  },
  "pscSpecs" : [ {
    "pscId" : "psc-1",
    "pscSsoSpec" : {
      "ssoDomain" : "vsphere.local"
    },
    "adminUserSsoPassword" : "xxxxxxx"
  } ],
  "vcenterSpec" : {
    "vcenterIp" : "10.0.0.6",
    "vcenterHostname" : "sfo-m01-vc01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "rootVcenterPassword" : "xxxxxxx",
    "vmSize" : "tiny"
  },
  "hostSpecs" : [ {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.100",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx01",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-0",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.101",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx02",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-1",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.102",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx03",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-2",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.103",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx04",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-3",
    "association" : "sfo-m01-dc01"
  } ]
}'

HTTP Request

PATCH /v1/sddcs/b285bfc6-8ef2-48d3-a8e2-4ccf921b1f1a HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 8923
Host: sfo-cb01.rainpole.local
Authorization: Basic YWRtaW46Vk13YXJlSW5mcmFAMQ==

{
  "dvSwitchVersion" : "7.0.0",
  "skipEsxThumbprintValidation" : true,
  "managementPoolName" : "bringup-networkpool",
  "sddcManagerSpec" : {
    "secondUserCredentials" : {
      "username" : "vcf",
      "password" : "xxxxxxx"
    },
    "ipAddress" : "10.0.0.4",
    "netmask" : "255.255.255.0",
    "hostname" : "sfo-vcf01",
    "rootUserCredentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "restApiCredentials" : {
      "username" : "admin",
      "password" : "xxxxxxx"
    }
  },
  "sddcId" : "sddcId-public-api-1001",
  "esxLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
  "taskName" : "workflowconfig/workflowspec-ems.json",
  "ntpServers" : [ "10.0.0.250" ],
  "dnsSpec" : {
    "subdomain" : "vrack.vsphere.local",
    "domain" : "vsphere.local",
    "nameserver" : "10.0.0.250",
    "secondaryNameserver" : "10.0.0.250"
  },
  "networkSpecs" : [ {
    "subnet" : "10.0.0.0/22",
    "vlanId" : "0",
    "mtu" : "1500",
    "networkType" : "MANAGEMENT",
    "gateway" : "10.0.0.250"
  }, {
    "subnet" : "10.0.4.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.4.7",
      "endIpAddress" : "10.0.4.48"
    }, {
      "startIpAddress" : "10.0.4.3",
      "endIpAddress" : "10.0.4.6"
    } ],
    "includeIpAddress" : [ "10.0.4.50", "10.0.4.49" ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VSAN",
    "gateway" : "10.0.4.253"
  }, {
    "subnet" : "10.0.8.0/24",
    "includeIpAddressRanges" : [ {
      "startIpAddress" : "10.0.8.3",
      "endIpAddress" : "10.0.8.50"
    } ],
    "vlanId" : "0",
    "mtu" : "8940",
    "networkType" : "VMOTION",
    "gateway" : "10.0.8.253"
  } ],
  "nsxtSpec" : {
    "nsxtManagerSize" : "medium",
    "nsxtManagers" : [ {
      "hostname" : "sfo-m01-nsx01a",
      "ip" : "10.0.0.31"
    }, {
      "hostname" : "sfo-m01-nsx01b",
      "ip" : "10.0.0.32"
    }, {
      "hostname" : "sfo-m01-nsx01c",
      "ip" : "10.0.0.33"
    } ],
    "rootNsxtManagerPassword" : "xxxxxxx",
    "nsxtAdminPassword" : "xxxxxxx",
    "nsxtAuditPassword" : "xxxxxxx",
    "rootLoginEnabledForNsxtManager" : "true",
    "sshEnabledForNsxtManager" : "true",
    "overLayTransportZone" : {
      "zoneName" : "sfo-m01-tz-overlay01",
      "networkName" : "net-overlay"
    },
    "vlanTransportZone" : {
      "zoneName" : "sfo-m01-tz-vlan01",
      "networkName" : "net-vlan"
    },
    "vip" : "10.0.0.30",
    "vipFqdn" : "sfo-m01-nsx01",
    "nsxtLicense" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "transportVlanId" : 0,
    "nsxtEdgeSpec" : {
      "edgeClusterName" : "sfo-m01-ec01",
      "edgeRootPassword" : "xxxxxxx",
      "edgeAdminPassword" : "xxxxxxx",
      "edgeAuditPassword" : "xxxxxxx",
      "edgeFormFactor" : "MEDIUM",
      "edgeServicesSpecs" : {
        "tier0GatewayName" : "sfo-m01-ec01-t0-gw01",
        "tier1GatewayName" : "sfo-m01-ec01-t1-gw01"
      },
      "tier0ServicesHighAvailability" : "ACTIVE_ACTIVE",
      "asn" : 65000,
      "edgeNodeSpecs" : [ {
        "edgeNodeName" : "sfo-m01-en01",
        "edgeNodeHostname" : "sfo-m01-en01",
        "managementCidr" : "172.28.211.69/24",
        "edgeVtep1Cidr" : "172.28.217.2/24",
        "edgeVtep2Cidr" : "172.28.217.3/24",
        "interfaces" : [ {
          "name" : "uplink-edge1-tor1",
          "interfaceCidr" : "172.28.215.2/24"
        }, {
          "name" : "uplink-edge1-tor2",
          "interfaceCidr" : "172.28.216.2/24"
        } ]
      }, {
        "edgeNodeName" : "sfo-m01-en02",
        "edgeNodeHostname" : "sfo-m01-en02",
        "managementCidr" : "172.28.211.70/24",
        "edgeVtep1Cidr" : "172.28.217.4/24",
        "edgeVtep2Cidr" : "172.28.217.5/24",
        "interfaces" : [ {
          "name" : "uplink-edge2-tor1",
          "interfaceCidr" : "172.28.215.3/24"
        }, {
          "name" : "uplink-edge2-tor2",
          "interfaceCidr" : "172.28.216.3/24"
        } ]
      } ],
      "bgpNeighbours" : [ {
        "neighbourIp" : "172.28.215.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      }, {
        "neighbourIp" : "172.28.216.1",
        "autonomousSystem" : 65001,
        "password" : "xxxxxxx"
      } ]
    },
    "logicalSegments" : [ {
      "name" : "sfo-m01-seg01",
      "networkType" : "REGION_SPECIFIC"
    }, {
      "name" : "sfo-m01-seg02",
      "networkType" : "X_REGION"
    } ]
  },
  "vsanSpec" : {
    "vsanName" : "sfo-m01-cl01-ds-vsan01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "datastoreName" : "sfo-m01-cl01-ds-vsan01"
  },
  "dvsSpecs" : [ {
    "mtu" : 8940,
    "niocSpecs" : [ {
      "trafficType" : "VSAN",
      "value" : "HIGH"
    }, {
      "trafficType" : "VMOTION",
      "value" : "LOW"
    }, {
      "trafficType" : "VDP",
      "value" : "LOW"
    }, {
      "trafficType" : "VIRTUALMACHINE",
      "value" : "HIGH"
    }, {
      "trafficType" : "MANAGEMENT",
      "value" : "NORMAL"
    }, {
      "trafficType" : "NFS",
      "value" : "LOW"
    }, {
      "trafficType" : "HBR",
      "value" : "LOW"
    }, {
      "trafficType" : "FAULTTOLERANCE",
      "value" : "LOW"
    }, {
      "trafficType" : "ISCSI",
      "value" : "LOW"
    } ],
    "dvsName" : "sfo-m01-cl01-vds01",
    "vmnics" : [ "vmnic0", "vmnic1" ],
    "networks" : [ "MANAGEMENT", "VSAN", "VMOTION" ]
  } ],
  "clusterSpec" : {
    "clusterName" : "sfo-m01-cl01",
    "clusterEvcMode" : "",
    "resourcePoolSpecs" : [ {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-mgmt",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "management"
    }, {
      "cpuSharesLevel" : "high",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-network",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "network"
    }, {
      "cpuSharesLevel" : "normal",
      "cpuSharesValue" : 0,
      "name" : "sfo-m01-cl01-rp-sddc-compute",
      "memorySharesValue" : 0,
      "cpuReservationPercentage" : 0,
      "memoryLimit" : -1,
      "memoryReservationPercentage" : 0,
      "cpuReservationExpandable" : true,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "cpuLimit" : -1,
      "type" : "compute"
    }, {
      "name" : "sfo-m01-cl01-rp-user-compute",
      "type" : "compute",
      "cpuReservationMhz" : 2100,
      "cpuLimit" : -1,
      "cpuReservationExpandable" : true,
      "cpuSharesLevel" : "normal",
      "memoryReservationMb" : 3128,
      "memoryReservationExpandable" : true,
      "memorySharesLevel" : "normal",
      "memorySharesValue" : 0
    } ]
  },
  "pscSpecs" : [ {
    "pscId" : "psc-1",
    "pscSsoSpec" : {
      "ssoDomain" : "vsphere.local"
    },
    "adminUserSsoPassword" : "xxxxxxx"
  } ],
  "vcenterSpec" : {
    "vcenterIp" : "10.0.0.6",
    "vcenterHostname" : "sfo-m01-vc01",
    "licenseFile" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
    "rootVcenterPassword" : "xxxxxxx",
    "vmSize" : "tiny"
  },
  "hostSpecs" : [ {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.100",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx01",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-0",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.252.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.101",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx02",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-1",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.102",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx03",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-2",
    "association" : "sfo-m01-dc01"
  }, {
    "credentials" : {
      "username" : "root",
      "password" : "xxxxxxx"
    },
    "ipAddressPrivate" : {
      "subnet" : "255.255.255.0",
      "cidr" : "",
      "ipAddress" : "10.0.0.103",
      "gateway" : "10.0.0.250"
    },
    "hostname" : "sfo01-m01-esx04",
    "vSwitch" : "vSwitch0",
    "serverId" : "host-3",
    "association" : "sfo-m01-dc01"
  } ]
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2514

{
  "id" : "97f5c5fe-187f-46d3-b446-73e310187428",
  "name" : "Bringup-Ems",
  "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" : "NSXvConfiguration",
    "processingStateDescription" : "Deploy and Configure NSX for vSphere",
    "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
  1. 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
  1. 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"
}
  1. 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. Network Pools

2.5.1. Create a Network Pool

  • Used to create a Network pool in the system. The added network pool would be used during domain deployments, host commission/expansion flows.

  • If a network pool which is already added before is added, you will get an error with HTTP status 400.

  • If a malformed network pool is added (payload for network parameters, name which is already exist), you will get an error.

Prerequisites
  1. The following data is required

    • Name

    • List of networks associated with network pool in which each network has

      • Network type - It can be VSAN, VMOTION or NFS Type.

      • VLAN ID - Valid Vlan id range is 0 to 4096.

      • MTU - Valid MTU range is 1500 to 9216.

      • Subnet - Networks of diferent types (e.g. VSAN/VMOTION/NFS) must not have overlapping subnets

      • Subnet mask

      • gateway - The gateway defined for the specified subnet

      • List of IP address ranges - the start and end IP address of each IP Pool should be part of the subnet

Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "name" : "engineering-networkpool",
  "networks" : [ {
    "type" : "VSAN",
    "vlanId" : 3002,
    "mtu" : 9001,
    "subnet" : "192.168.8.0",
    "mask" : "255.255.252.0",
    "gateway" : "192.168.8.1",
    "ipPools" : [ {
      "start" : "192.168.8.5",
      "end" : "192.168.8.8"
    } ]
  } ]
}'

HTTP Request

POST /v1/network-pools HTTP/1.1
Content-Type: application/json
Content-Length: 304
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "name" : "engineering-networkpool",
  "networks" : [ {
    "type" : "VSAN",
    "vlanId" : 3002,
    "mtu" : 9001,
    "subnet" : "192.168.8.0",
    "mask" : "255.255.252.0",
    "gateway" : "192.168.8.1",
    "ipPools" : [ {
      "start" : "192.168.8.5",
      "end" : "192.168.8.8"
    } ]
  } ]
}

HTTP Response

HTTP/1.1 201 Created
Location: /v1/network-pools/1f2a9cf9-daff-4bfe-883d-6937404c43dd
Content-Type: application/json
Content-Length: 165

{
  "id" : "1f2a9cf9-daff-4bfe-883d-6937404c43dd",
  "name" : "engineering-networkpool",
  "networks" : [ {
    "id" : "91a1318a-aea6-4545-97a5-6a2e276b0f02"
  } ]
}

2.5.2. Get the Network Pools

Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/network-pools 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: 375

{
  "elements" : [ {
    "id" : "f137fb81-ca2b-4567-9e74-5ebf0ab43a16",
    "name" : "engineering-networkpool",
    "networks" : [ {
      "id" : "0fb8eef5-f109-4ace-abf2-6bfad76c9d82"
    } ]
  }, {
    "id" : "bc48af46-285b-482f-aa13-52f76f188914",
    "name" : "finance-networkpool",
    "networks" : [ {
      "id" : "1172322b-9c9d-44f2-ad9f-b1c82acf7ba0"
    } ]
  } ]
}

2.5.3. Get a Network Pool

Prerequisites
  1. The following data is required

    • ID of the network pool

Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools/0b46f0b8-5f77-4c4e-8462-bddc58f01bd4' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/network-pools/0b46f0b8-5f77-4c4e-8462-bddc58f01bd4 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: 165

{
  "id" : "0b46f0b8-5f77-4c4e-8462-bddc58f01bd4",
  "name" : "engineering-networkpool",
  "networks" : [ {
    "id" : "072fb1f6-d621-4c5c-a2e5-14f8befbff9e"
  } ]
}

2.5.4. Get a Network of a Network Pool

Prerequisites
  1. The following data is required

    • ID of the network

Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools/d29e7c9a-d0a7-428c-8107-e3894a01538c/networks/e89f2fa9-108d-4a9f-a67a-5a04384b990a' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 270

{
  "id" : "e89f2fa9-108d-4a9f-a67a-5a04384b990a",
  "type" : "VSAN",
  "vlanId" : 3002,
  "mtu" : 9216,
  "subnet" : "192.168.8.0",
  "mask" : "255.255.252.0",
  "gateway" : "192.168.8.1",
  "ipPools" : [ {
    "start" : "192.168.8.5",
    "end" : "192.168.8.8"
  } ]
}

2.5.5. Rename a Network Pool

Prerequisites
  1. Network pool must exist.

Steps
  1. Get the ID of the network pool. Filter the response by the network pool’s current name to get the corresponding ID.

  1. Create a network pool update spec. Create a JSON with the "name" field containing the desired new network pool name.

  1. Invoke the network pool rename (update) task using the input spec and network pool ID.

Note
Running the updateNetworkPool API will ensure that the requested new name is valid. The API call will fail if the requested new name is invalid.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools/b0525265-b787-4f7a-9836-5103b699e7a8' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "name" : "new_name"
}'

HTTP Request

PATCH /v1/network-pools/b0525265-b787-4f7a-9836-5103b699e7a8 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: 165

{
  "id" : "b0525265-b787-4f7a-9836-5103b699e7a8",
  "name" : "engineering-networkpool",
  "networks" : [ {
    "id" : "f7fc53ab-204d-43fa-9949-389edc65f465"
  } ]
}

2.5.6. Delete a Network Pool

  • Used to delete a Network pool.

  • Deleting a networkpool which is being used, will give an error.

  • Deleting a networkpool which does not exist, will give a HTTP response code 404.

Prerequisites
  1. The following data is required

    • ID of the network pool

Steps
  1. Invoke the API

Tip
Refer to: Get the Network Pools to retrieve all network pools in the system and use the ID of network pool to be deleted.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools/f3836e3b-b3f0-4dcb-be90-3a5cb5ecfd49' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

DELETE /v1/network-pools/f3836e3b-b3f0-4dcb-be90-3a5cb5ecfd49 HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 204 No Content

2.5.7. Add an IP Pool to a Network of a Network Pool

Prerequisites
  1. The following data is required

    • ID of the network pool

Tip
Refer to: Get the Network Pools
  • ID of the network.

  • The start and end IP addresses for the IP pool

Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools/b97b98ad-69a7-4f49-a6bc-d06d963a4012/networks/b692853b-0fb8-4a6c-b847-9b4f9dcfa81d/ip-pools' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "start" : "192.168.8.5",
  "end" : "192.168.8.8"
}'
Request Body
POST /v1/network-pools/b97b98ad-69a7-4f49-a6bc-d06d963a4012/networks/b692853b-0fb8-4a6c-b847-9b4f9dcfa81d/ip-pools HTTP/1.1
Content-Type: application/json
Content-Length: 54
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "start" : "192.168.8.5",
  "end" : "192.168.8.8"
}
Response Body
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 270

{
  "id" : "6457fa03-3a76-4d4b-9f10-e993ad53b05a",
  "type" : "VSAN",
  "vlanId" : 3002,
  "mtu" : 9216,
  "subnet" : "192.168.8.0",
  "mask" : "255.255.252.0",
  "gateway" : "192.168.8.1",
  "ipPools" : [ {
    "start" : "192.168.8.5",
    "end" : "192.168.8.8"
  } ]
}

2.5.8. Delete an IP Pool from a Network of a Network Pool

Prerequisites
  1. The following data is required

    • ID of the IP pool

Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/network-pools/8d4585a7-2c1b-451c-9db8-e4042772096a/networks/e569e156-914e-4c67-82ff-6e68bc7c49b2/ip-pools' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "start" : "192.168.8.5",
  "end" : "192.168.8.8"
}'
Response Body
DELETE /v1/network-pools/8d4585a7-2c1b-451c-9db8-e4042772096a/networks/e569e156-914e-4c67-82ff-6e68bc7c49b2/ip-pools HTTP/1.1
Content-Type: application/json
Content-Length: 54
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "start" : "192.168.8.5",
  "end" : "192.168.8.8"
}
Response Body
HTTP/1.1 204 No Content

2.6. Tasks

2.6.1. Get the Tasks

Steps
  1. 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: 1888

{
  "elements" : [ {
    "id" : "e6dedc13-6368-4ef1-9469-63fdc0a0f9e0",
    "name" : "Commissioning host(s) sfo01-w01-esx05.rainpole.io to VMware Cloud Foundation",
    "status" : "Failed",
    "creationTimestamp" : "2019-06-20T12:03:18.890Z",
    "subTasks" : [ {
      "name" : "HostVibValidationAction",
      "description" : "Validate the hosts for any disallowed VIBS",
      "status" : "SUCCESSFUL",
      "creationTimestamp" : "2019-06-20T12:03:18.890Z"
    }, {
      "name" : "HostMaintenanceModeValidationAction",
      "description" : "Verifies that none of the hosts are in maintenance mode",
      "status" : "FAILED",
      "creationTimestamp" : "2019-06-20T12:03:18.890Z"
    }, {
      "name" : "FetchDnsAndNtpAction",
      "description" : "Fetches DNS \\u0026 NTP IPs",
      "status" : "PENDING",
      "creationTimestamp" : "2019-06-20T12:03:18.890Z"
    } ],
    "errors" : [ {
      "errorCode" : "COMMISION_HOST_FAILED",
      "message" : "Failed to Commissioning host(s) sfo01-w01-esx05.rainpole.io to VMware Cloud Foundation",
      "causes" : [ ]
    } ],
    "resources" : [ {
      "resourceId" : "5a093718-5f08-4f9d-ba80-0eb6ed7dea1a",
      "type" : "HOST"
    } ],
    "resolutionStatus" : "UNRESOLVED",
    "isCancellable" : false
  }, {
    "id" : "82a09533-f5cb-4377-9be1-97094a9e054c",
    "name" : "Credentials rotate operation",
    "status" : "Successful",
    "creationTimestamp" : "2019-06-20T12:03:18.890Z",
    "subTasks" : [ {
      "name" : "sfo-vcf01.rainpole.io:FTP",
      "description" : "Password rotate for sfo-vcf01.rainpole.io and credential type FTP",
      "status" : "SUCCESSFUL",
      "creationTimestamp" : "2019-06-20T12:03:18.890Z"
    } ],
    "resources" : [ {
      "resourceId" : "5334cdf6-0234-474d-88ce-73e64bc92ce7",
      "type" : "HOST"
    } ],
    "resolutionStatus" : "UNRESOLVED",
    "isCancellable" : false
  } ]
}

2.6.2. Get a Task

Prerequisites
  1. The following data is required

    • ID of the task

Steps
  1. Invoke the API by providing the ID of the task as input.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/tasks/0e40db3c-ca65-49c0-95a8-31f231d4ab5a' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/tasks/0e40db3c-ca65-49c0-95a8-31f231d4ab5a 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: 942

{
  "id" : "0e40db3c-ca65-49c0-95a8-31f231d4ab5a",
  "name" : "Vi workload Domain Creation",
  "status" : "FAILED",
  "creationTimestamp" : "1970-01-19T12:50:02.869Z",
  "subTasks" : [ {
    "name" : "HostVibValidationAction",
    "description" : "Validate the hosts for any disallowed VIBS",
    "status" : "SUCCESSFUL",
    "creationTimestamp" : "2019-06-20T12:03:18.890Z"
  }, {
    "name" : "HostMaintenanceModeValidationAction",
    "description" : "Verifies that none of the hosts are in maintenance mode",
    "status" : "FAILED",
    "creationTimestamp" : "2019-06-20T12:03:18.890Z"
  }, {
    "name" : "FetchDnsAndNtpAction",
    "description" : "Fetches DNS \\u0026 NTP IPs",
    "status" : "PENDING",
    "creationTimestamp" : "2019-06-20T12:03:18.890Z"
  } ],
  "resources" : [ {
    "resourceId" : "71cbed21-46d5-47fe-bfde-ae76c7a5a5a0",
    "type" : "HOST"
  } ],
  "resolutionStatus" : "UNRESOLVED",
  "isCancellable" : false
}

2.6.3. Retry a Task

Used to retry a failed task/workflow.

Prerequisites
  1. The following data is required

    • ID of the failed task

Steps
  1. Invoke the API by providing the ID of the task as input.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/tasks/7dbc5c6a-44a1-4e93-a985-faf1f14af2e9' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

PATCH /v1/tasks/7dbc5c6a-44a1-4e93-a985-faf1f14af2e9 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.7. Hosts

2.7.1. Commission the Hosts

Prerequisites
  1. The following data is required

    • Username of each host

    • Password of each host

    • FQDN of each host

    • Network pool name to which each host has to be associated with (Optional)

    • Network pool ID to which each host has to be associated with

  1. The host, if intended to be used for a vSAN domain, should be vSAN compliant and certified as per the VMware Hardware Compatibility Guide.

  2. BIOS, HBA, SSD, HDD, etc. of the host must match the VMware Hardware Compatibility Guide.

  3. The host must have the drivers and firmware versions specified in the VMware Hardware Compatibility Guide.

  4. The host must have the supported version of ESXi (i.e 6.7.0-13006603) pre-installed on it.

  5. SSH and syslog must be enabled on the host.

  6. The host must be configured with DNS server for forward and reverse lookup and FQDN.

  7. The host name must be same as the FQDN.

  8. The host must have a standard switch with two NIC ports with a minimum 10 Gbps speed.

  9. The management IP must be configured to the first NIC port.

  10. Ensure that the host has a standard switch and the default uplinks with 10Gb speed are configured starting with traditional numbering (e.g., vmnic0) and increasing sequentially.

  11. Ensure that the host hardware health status is healthy without any errors.

  12. All disk partitions on HDD / SSD are deleted.

  13. The hosts, if intended to be used for vSAN, domain must be associated with vSAN enabled network pool.

  14. The hosts, if intended to be used for NFS, domain must be associated with NFS enabled network pool.

  15. The hosts, if intended to be used for VMFS on FC, domain must be associated with either a NFS enabled or vMotion enabled network pool.

  16. The hosts, if intended to be used for VVOL, domain must be associated with either a NFS enabled or vMotion enabled network pool.

Steps
  1. Validate the input specification.

For VSAN storage type

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/validations' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "58d74167-ee80-4eb8-90d9-cdfb3c1cd9f3",
  "networkPoolName" : "engineering-networkpool"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "1ff2838a-1983-4747-a94d-d30b2d13a973",
  "networkPoolName" : "finance-networkpool"
} ]'

HTTP Request

POST /v1/hosts/validations HTTP/1.1
Content-Type: application/json
Content-Length: 542
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "58d74167-ee80-4eb8-90d9-cdfb3c1cd9f3",
  "networkPoolName" : "engineering-networkpool"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "1ff2838a-1983-4747-a94d-d30b2d13a973",
  "networkPoolName" : "finance-networkpool"
} ]

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/hosts/validations/8fb0aa75-e692-40e7-b05e-1e30612e16f3
Content-Type: application/json
Content-Length: 526

{
  "id" : "8fb0aa75-e692-40e7-b05e-1e30612e16f3",
  "description" : "Validate input specification to commission one or more hosts to VMware Cloud Foundation",
  "executionStatus" : "IN_PROGRESS",
  "validationChecks" : [ {
    "description" : "Validating input specification",
    "resultStatus" : "UNKNOWN"
  }, {
    "description" : "Validating host sfo01-m01-esx01.rainpole.io",
    "resultStatus" : "UNKNOWN"
  }, {
    "description" : "Validating host sfo01-m01-esx02.rainpole.io",
    "resultStatus" : "UNKNOWN"
  } ]
}

For vVol storage type

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/validations' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VVOL",
  "vvolStorageProtocolType" : "ISCSI",
  "networkPoolId" : "58d74167-ee80-4eb8-90d9-cdfb3c1cd9f3",
  "networkPoolName" : "engineering-networkpool"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VVOL",
  "vvolStorageProtocolType" : "NFS",
  "networkPoolId" : "1ff2838a-1983-4747-a94d-d30b2d13a973",
  "networkPoolName" : "finance-networkpool"
} ]'

HTTP Request

POST /v1/hosts/validations HTTP/1.1
Content-Type: application/json
Content-Length: 546
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VVOL",
  "vvolStorageProtocolType" : "ISCSI",
  "networkPoolId" : "58d74167-ee80-4eb8-90d9-cdfb3c1cd9f3",
  "networkPoolName" : "engineering-networkpool"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VVOL",
  "vvolStorageProtocolType" : "NFS",
  "networkPoolId" : "1ff2838a-1983-4747-a94d-d30b2d13a973",
  "networkPoolName" : "finance-networkpool"
} ]

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/hosts/validations/41014d9e-9924-45ee-9861-7607a5f139be
Content-Type: application/json
Content-Length: 526

{
  "id" : "41014d9e-9924-45ee-9861-7607a5f139be",
  "description" : "Validate input specification to commission one or more hosts to VMware Cloud Foundation",
  "executionStatus" : "IN_PROGRESS",
  "validationChecks" : [ {
    "description" : "Validating input specification",
    "resultStatus" : "UNKNOWN"
  }, {
    "description" : "Validating host sfo01-m01-esx01.rainpole.io",
    "resultStatus" : "UNKNOWN"
  }, {
    "description" : "Validating host sfo01-m01-esx02.rainpole.io",
    "resultStatus" : "UNKNOWN"
  } ]
}
  1. Poll until "executionStatus" is not "IN_PROGRESS" using the "id" from the previous response.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/validations/8fb0aa75-e692-40e7-b05e-1e30612e16f3' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/hosts/validations/8fb0aa75-e692-40e7-b05e-1e30612e16f3 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: 436

{
  "id" : "8fb0aa75-e692-40e7-b05e-1e30612e16f3",
  "description" : "Validate input specification to commission one or more hosts to VMware Cloud Foundation",
  "executionStatus" : "IN_PROGRESS",
  "validationChecks" : [ {
    "description" : "Validating host sfo01-m01-esx01.rainpole.io",
    "resultStatus" : "SUCCEEDED"
  }, {
    "description" : "Validating host sfo01-m01-esx02.rainpole.io",
    "resultStatus" : "UNKNOWN"
  } ]
}
  1. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts/validations/8fb0aa75-e692-40e7-b05e-1e30612e16f3' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/hosts/validations/8fb0aa75-e692-40e7-b05e-1e30612e16f3 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: 468

{
  "id" : "8fb0aa75-e692-40e7-b05e-1e30612e16f3",
  "description" : "Validate input specification to commission one or more hosts to VMware Cloud Foundation",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "Validating host sfo01-m01-esx01.rainpole.io",
    "resultStatus" : "SUCCEEDED"
  }, {
    "description" : "Validating host sfo01-m01-esx02.rainpole.io",
    "resultStatus" : "SUCCEEDED"
  } ]
}
  1. 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.
  1. Trigger the task using the valid input specification.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "58d74167-ee80-4eb8-90d9-cdfb3c1cd9f3",
  "networkPoolName" : "engineering-networkpool"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "1ff2838a-1983-4747-a94d-d30b2d13a973",
  "networkPoolName" : "finance-networkpool"
} ]'

HTTP Request

POST /v1/hosts HTTP/1.1
Content-Type: application/json
Content-Length: 542
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "58d74167-ee80-4eb8-90d9-cdfb3c1cd9f3",
  "networkPoolName" : "engineering-networkpool"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "storageType" : "VSAN",
  "vvolStorageProtocolType" : null,
  "networkPoolId" : "1ff2838a-1983-4747-a94d-d30b2d13a973",
  "networkPoolName" : "finance-networkpool"
} ]

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/tasks/e8520888-4c24-461c-9b82-390be58d5e56
Content-Type: application/json
Content-Length: 246

{
  "id" : "e8520888-4c24-461c-9b82-390be58d5e56",
  "name" : "Commission Hosts - [esx-1.vrack.vsphere.local, esx-2.vrack.vsphere.local] to VMware Cloud Foundation",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:34:34.639Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.7.2. Get the Hosts

Prerequisites

None

Get All Hosts

Steps
  1. 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: 4393

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "hybrid" : false
  }, {
    "id" : "8045e44e-974e-4f43-9862-7f0326782638",
    "esxiVersion" : "6.5.0-13006603",
    "fqdn" : "sfo01-m01-esx02.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "status" : "UNASSIGNED_USEABLE",
    "hybrid" : true
  }, {
    "id" : "8045e44e-974e-4f43-9862-7f0326782638",
    "esxiVersion" : "6.5.0-13006603",
    "fqdn" : "sfo01-m01-esx03.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "status" : "UNASSIGNED_UNUSEABLE",
    "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
  1. 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: 1601

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "hybrid" : false
  } ]
}

Get UNASSIGNED_USEABLE Hosts

This API can be used to fetch all the hosts that are currently not assigned to any domain and hence can be used for other domain tasks

Steps
  1. Invoke the API by specifying the "status" as "UNASSIGNED_USEABLE".

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?status=UNASSIGNED_USEABLE' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/hosts?status=UNASSIGNED_USEABLE 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: 1416

{
  "elements" : [ {
    "id" : "8045e44e-974e-4f43-9862-7f0326782638",
    "esxiVersion" : "6.5.0-13006603",
    "fqdn" : "sfo01-m01-esx02.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "status" : "UNASSIGNED_USEABLE",
    "hybrid" : true
  } ]
}

Get UNASSIGNED_UNUSEABLE Hosts

This API can be used to fetch all the hosts that are currently not assigned to any domain and can be used for other domain tasks after completion of cleanup operation

Note
Cleanup operations must be performed to get these host back into "UNASSIGNED" and "USEABLE" state.
Steps
  1. Invoke the API by specifying the "status" as "UNASSIGNED_UNUSEABLE".

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?status=UNASSIGNED_UNUSEABLE' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/hosts?status=UNASSIGNED_UNUSEABLE 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: 1418

{
  "elements" : [ {
    "id" : "8045e44e-974e-4f43-9862-7f0326782638",
    "esxiVersion" : "6.5.0-13006603",
    "fqdn" : "sfo01-m01-esx03.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "status" : "UNASSIGNED_UNUSEABLE",
    "hybrid" : true
  } ]
}

Get Hosts by Domain

This API can be used to fetch all the hosts that are currently assigned to a given domain.

Steps
  1. 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: 1601

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "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
  1. 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: 1601

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "hybrid" : false
  } ]
}

Get Hosts by Network Pool

This API can be used to fetch all the hosts that are currently assigned to a given network pool.

Steps
  1. Invoke the API by specifying the "networkpoolId".

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?networkpoolId=1205afdd-84f5-403e-a052-1a9bba09ef41' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/hosts?networkpoolId=1205afdd-84f5-403e-a052-1a9bba09ef41 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: 1601

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "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 "VMFS_FC" , "VVOL".
Steps
  1. Invoke the API by specifying the "storageType".

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts?storageType=VMFS_FC' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/hosts?storageType=VMFS_FC 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: 1601

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "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
  1. 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: 1601

{
  "elements" : [ {
    "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
    "esxiVersion" : "6.7.0-13006603",
    "fqdn" : "sfo01-m01-esx01.rainpole.io",
    "hardwareVendor" : "VMware, Inc.",
    "hardwareModel" : "VMware Virtual Platform",
    "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"
    }, {
      "deviceName" : "vmnic1",
      "macAddress" : "02:00:1b:31:93:d3"
    } ],
    "domain" : {
      "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
    },
    "networkpool" : {
      "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
    },
    "cluster" : {
      "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
    },
    "status" : "ASSIGNED",
    "compatibleStorageType" : "VMFS_FC",
    "hybrid" : false
  } ]
}

2.7.3. Get a Host

Prerequisites
  1. The following data is required

    • ID of the host

Steps
  1. 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: 1462

{
  "id" : "c0703437-6746-470b-9e1c-f9d3bbc9b1c1",
  "esxiVersion" : "6.7.0-13006603",
  "fqdn" : "sfo01-m01-esx01.rainpole.io",
  "hardwareVendor" : "VMware, Inc.",
  "hardwareModel" : "VMware Virtual Platform",
  "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"
  }, {
    "deviceName" : "vmnic1",
    "macAddress" : "02:00:1b:31:93:d3"
  } ],
  "domain" : {
    "id" : "377236f7-4965-4179-895e-eeb4eb9a6ad1"
  },
  "networkpool" : {
    "id" : "1205afdd-84f5-403e-a052-1a9bba09ef41"
  },
  "cluster" : {
    "id" : "4205afdd-94f5-403e-a051-1a9bba09ef40"
  },
  "status" : "ASSIGNED",
  "compatibleStorageType" : "VMFS_FC",
  "hybrid" : false
}

2.7.4. Get the Hosts based on a Criterion

This API is used to get the hosts that meets a specific criterion.

Prerequisites

None

Get the hosts based on a criterion

Steps
  1. 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: 272

{
  "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"
  } ]
}
  1. Pick one of the criterion and post a query

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" : "HOST_COMPATIBLE_WITH_CLUSTER_USING_PNICS",
  "arguments" : {
    "storageType" : "VSAN",
    "clusterId" : ""
  },
  "description" : "fetch all the hosts compatible with a cluster"
}'

HTTP Request

POST /v1/hosts/queries HTTP/1.1
Content-Type: application/json
Content-Length: 196
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "name" : "HOST_COMPATIBLE_WITH_CLUSTER_USING_PNICS",
  "arguments" : {
    "storageType" : "VSAN",
    "clusterId" : ""
  },
  "description" : "fetch all the hosts compatible with a cluster"
}

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/hosts/queries/e69575f2-9f75-4f18-af0c-07f226637757
Content-Type: application/json
Content-Length: 127

{
  "queryInfo" : {
    "status" : "IN_PROGRESS",
    "processing" : true,
    "completed" : false,
    "failure" : false
  }
}
  1. Read the tracking URL returned as Location header in the previous step.

  1. Poll the tracking URL until the "status" is not "IN_PROGRESS".

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: 3363

{
  "queryInfo" : {
    "status" : "COMPLETED",
    "processing" : false,
    "completed" : true,
    "failure" : false
  },
  "result" : {
    "elements" : [ {
      "id" : "44806db8-4401-4d74-be0a-f9067d048314",
      "esxiVersion" : "6.7.0-14320388",
      "fqdn" : "sfo01-m01-esx01.rainpole.io",
      "hardwareVendor" : "VMware, Inc.",
      "hardwareModel" : "VMware Virtual Platform",
      "ipAddresses" : [ {
        "ipAddress" : "10.0.0.100",
        "type" : "MANAGEMENT"
      }, {
        "ipAddress" : "10.0.4.3",
        "type" : "VSAN"
      }, {
        "ipAddress" : "10.0.8.3",
        "type" : "VMOTION"
      } ],
      "cpu" : {
        "frequencyMHz" : 19155.640625,
        "usedFrequencyMHz" : 767.0,
        "cores" : 8,
        "cpuCores" : [ {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        }, {
          "frequencyMHz" : 2394.455078125,
          "model" : "intel",
          "manufacturer" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz"
        } ]
      },
      "memory" : {
        "totalCapacityMB" : 63999.42578125,
        "usedCapacityMB" : 29454.0
      },
      "storage" : {
        "totalCapacityMB" : 1757712.0,
        "usedCapacityMB" : 587753.125,
        "disks" : [ {
          "capacityMB" : 146484.375,
          "diskType" : "HDD"
        }, {
          "capacityMB" : 146484.375,
          "diskType" : "HDD"
        }, {
          "capacityMB" : 146484.375,
          "diskType" : "FLASH"
        }, {
          "capacityMB" : 146484.375,
          "diskType" : "HDD"
        } ]
      },
      "physicalNics" : [ {
        "deviceName" : "vmnic0",
        "macAddress" : "02:00:ed:4e:e1:e2"
      }, {
        "deviceName" : "vmnic1",
        "macAddress" : "02:00:ed:f3:29:03"
      }, {
        "deviceName" : "vmnic2",
        "macAddress" : "02:00:ed:f0:44:b6"
      }, {
        "deviceName" : "vmnic3",
        "macAddress" : "02:00:ed:f0:91:45"
      } ],
      "domain" : {
        "id" : "7572b048-51b3-44c6-bf62-356b3baef8f9"
      },
      "networkpool" : {
        "id" : "bea95488-1fbb-4fe7-8bf7-e431c4afdd68",
        "name" : "bringup-networkpool"
      },
      "cluster" : {
        "id" : "a481407c-7e00-4489-afb1-c89f21dc8c84"
      },
      "status" : "ASSIGNED",
      "bundleRepoDatastore" : "lcm-bundle-repo",
      "hybrid" : false
    } ]
  }
}

2.7.5. Decommission the Hosts

Prerequisites
  1. The following data is required

    • FQDN of each host

  2. The host must not be assigned to a domain i.e "status" must be "UNASSIGNED_USEABLE".

Tip
Refer to: Get the Hosts to fetch the hosts with the required "status"
Steps
  1. Invoke the API

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/hosts' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io"
} ]'

HTTP Request

DELETE /v1/hosts HTTP/1.1
Content-Type: application/json
Content-Length: 94
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

[ {
  "fqdn" : "sfo01-m01-esx01.rainpole.io"
}, {
  "fqdn" : "sfo01-m01-esx02.rainpole.io"
} ]

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/tasks/4ab41dc2-10b3-4a45-8ec0-d47b19d6a0b5
Content-Type: application/json
Content-Length: 248

{
  "id" : "4ab41dc2-10b3-4a45-8ec0-d47b19d6a0b5",
  "name" : "Decommission Hosts - [esx-1.vrack.vsphere.local, esx-2.vrack.vsphere.local] to VMware Cloud Foundation",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:34:34.229Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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. License Keys

2.8.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
  1. The following data is required

    • License key

    • Product type

    • License key description

Steps
  1. 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.8.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.

Prerequisites

None

Get All License Keys

Steps
  1. 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" : "ebf422de-6124-483b-afbb-3d4ca4ac7292",
    "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" : "d4bcfcfe-ba21-4186-b954-2527b90bf7e1",
    "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
  1. 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" : "315a65c3-7be0-4fcb-904b-af161a978e23",
    "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
  1. 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" : "ae99a69a-c1c5-4c45-8956-6a1ed97ea0f5",
    "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.8.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
  1. The following data is required

    • License key

Steps
  1. 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" : "925d7d23-a1b4-470f-a309-0df9a8d8c900",
  "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.8.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
  1. The following data is required

    • License key

Steps
  1. 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.9. Domains

A workload domain is a policy based resource container with specific availability and performance attributes that combines compute (vSphere), storage (vSAN/NFS/VMFS on FC/VVOL) and networking (NSX) into a single consumable entity.

2.9.1. Create a Domain

The 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.

  • Connects the specified ESXi servers to this vCenter Server instance and groups them into a cluster. Each host is configured with the port groups applicable for the domain.

  • Configures networking on each ESXi host.

  • If vSAN or NFS storage is provided, they are configured on the ESXi hosts. If VMFS on FC storage provided, it’s consumed.

  • For the first 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 share this NSX-T Manager Cluster or create its own.

  • From NSX-T version 3.0 onwards NSX-T manager uses vSphere Distributed Switch(VDS) created by vCenter to configure transport nodes and handle overlay traffic.

  • In case of single vSphere Distributed Switch domain, the same vSphere Distributed Switch will be used for configuring overlay traffic.

  • For a domain which creates multiple vSphere Distributed Switches, the boolean isUsedByNsxt in the VdsSpec should be set to true to identify the vSphere Distributed Switch which should be used by NSX-T for configuring overlay traffic.
    Refer to: VdsSpec.

  • In case of multiple vSphere Distributed Switches, at least one vSphere Distributed Switch has to be marked for use by NSX-T.

  • NSX Edges are needed to enable overlay VI networks and public networks for north-south traffic. Note that edges need to be deployed separately.

The result is a workload-ready SDDC environment.

Prerequisites
  1. The following data is required

    • 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)

      • Name of the datacenter where vCenter needs to be deployed

    • List of clusters

      • For each cluster

        • Name of the cluster

        • List of hosts

          • For each host

            • ID of the host (UUID)

            • License key for the host

            • List of VDS names to associate with host

            • ID of the vmNic host to be associated with VDS, once added to cluster

        • Datastore details

          Note
          Only one of "vsanDatastoreSpec" (For VSAN), "nfsDatastoreSpec" (For NFS), "vmfsDatastoreSpec" (For VMFS on FC) or "vvolDatastoreSpec" (For VVOL) must be specified.
          • For VSAN

            • Number of host failures to tolerate (can be 0, 1, or 2)

            • License key for the vSAN datastore

              {
                "vsanDatastoreSpec" : {
                  "failuresToTolerate" : 1,
                  "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
                  "datastoreName" : "sfo-w01-cl01-ds-vsan01"
                }
              }
          • For NFS

            • List of NFS server names

            • Shared directory path

            • User tag used to annotate NFS share

            • Boolean to identify if the mount directory should be read-only

              {
                "nfsDatastoreSpecs" : [ {
                  "nasVolume" : {
                    "serverName" : [ "10.0.0.250" ],
                    "path" : "/nfs_mount/my_read_write_folder",
                    "readOnly" : false
                  },
                  "datastoreName" : "sfo-w01-cl01-ds-nfs01"
                } ]
              }
          • For VMFS on FC

            • Ensure that the ESXi hosts have the given VMFS on FC datastore name configured.

              {
                "vmfsDatastoreSpec" : {
                  "fcSpec" : [ {
                    "datastoreName" : "sfo-w01-cl01-ds-fc01"
                  } ]
                }
              }
          • For VVOL

            • Ensure that Vasa provider is pre-configured

            • Vasa provider guid

            • Vasa container guid

            • Protocol type for vVol container

            • Vasa user guid

            {
              "vvolDatastoreSpecs" : [ {
                "name" : "sfo-w01-cl01-ds-vvol01",
                "vasaProviderSpec" : {
                  "vasaProviderId" : "42de6c36-e85e-483b-89c1-4aee5e8deebe",
                  "storageContainerId" : "908ce3e4-4e8d-414b-84e7-847ba9883521",
                  "storageProtocolType" : "ISCSI",
                  "userId" : "d0ed4dd6-1375-4b12-af8c-96c18c46d319"
                }
              } ]
            }
        • Network Details

          • List of VDS details

            • For each VDS
              Port group names and the corresponding transport type
              DVS host Infrastructure traffic resource type
              Maximum allowed usage for a traffic class
              Amount of bandwidth to be reserved for the host infrastructure traffic class

          • NSX cluster Details

            • For NSX-T
              VLAN ID of Geneve
              License key for NSX-T

        {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
    • NSX details

      • 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

        • FormFactor of the NSX-T manager. Supported values are "small", "medium" and "large"

          Note
          NSX-T manager of "large" form factor will be deployed if nothing is explicitly specified in the payload.
        • 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-T

        • NSX-T manager admin Password (basic authorization and SSH)

    {
      "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"
    }
  1. Network pool should be configured.

Tip
Refer to Create a Network Pool
  1. Hosts should be commissioned.

Tip
Refer to Commission the Hosts
  1. A DHCP server must be configured on the Geneve VLAN of the respective domains. When NSX-T creates VTEPs for the hosts in the domain, they are assigned IP addresses from the DHCP server. Ensure that host configuration has a minimum of two active vmNics.
    There must be a free uplink on each host to be used for the domain.

  2. Evaluate if you need to have pNICs on multiple vSphere Distributed Switches if it is NSX-T domain. At least two pNICs are needed on a single switch. Below is a spec sample:

    {
      "vmNics" : [ {
        "id" : "vmnic0",
        "vdsName" : "sfo-w01-cl01-vds01"
      }, {
        "id" : "vmnic1",
        "vdsName" : "sfo-w01-cl01-vds01"
      }, {
        "id" : "vmnic2",
        "vdsName" : "sfo-w01-cl01-vds02"
      }, {
        "id" : "vmnic3",
        "vdsName" : "sfo-w01-cl01-vds02"
      } ]
    }
Steps
  1. Validate the input specification.

Note
The below example is for creating a domain using vSAN storage (i.e "vsanDatastoreSpec") and NSX-T (i.e "nsxTSpec" and "nsxTClusterSpec")

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"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "hostSpecs" : [ {
        "id" : "fff4446d-82cf-41f7-825b-ace80eb765f0",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "cd3e63e4-036b-4aee-b876-067a935a4c38",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "579f3efb-e5b4-4028-92f1-b75f425bab36",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
          "datastoreName" : "sfo-w01-cl01-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "portGroupSpecs" : [ {
            "name" : "sfo-w01-cl01-vds01-pg-mgmt",
            "transportType" : "MANAGEMENT"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vsan",
            "transportType" : "VSAN"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vmotion",
            "transportType" : "VMOTION"
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
      }
    } ]
  },
  "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: 3925
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"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "hostSpecs" : [ {
        "id" : "fff4446d-82cf-41f7-825b-ace80eb765f0",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "cd3e63e4-036b-4aee-b876-067a935a4c38",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "579f3efb-e5b4-4028-92f1-b75f425bab36",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
          "datastoreName" : "sfo-w01-cl01-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "portGroupSpecs" : [ {
            "name" : "sfo-w01-cl01-vds01-pg-mgmt",
            "transportType" : "MANAGEMENT"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vsan",
            "transportType" : "VSAN"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vmotion",
            "transportType" : "VMOTION"
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
      }
    } ]
  },
  "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 200 OK
Content-Type: application/json
Content-Length: 290

{
  "id" : "90e4f7fd-c1be-4c5f-93ad-21a0f4a93ac6",
  "description" : "Validating Domain Creation Spec",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "DomainCreationSpecValidation",
    "resultStatus" : "SUCCEEDED"
  } ]
}
  1. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  2. 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.
  1. 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"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "hostSpecs" : [ {
        "id" : "797efd01-cd0f-4cdd-af22-2d7b887d552a",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "ac56c3f3-3977-482c-ab9e-4b75e80eca38",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "8c04a3f2-5e4c-4e9d-9dcf-fd202a680644",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
          "datastoreName" : "sfo-w01-cl01-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "portGroupSpecs" : [ {
            "name" : "sfo-w01-cl01-vds01-pg-mgmt",
            "transportType" : "MANAGEMENT"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vsan",
            "transportType" : "VSAN"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vmotion",
            "transportType" : "VMOTION"
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
      }
    } ]
  },
  "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: 3925
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"
  },
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl01",
      "hostSpecs" : [ {
        "id" : "797efd01-cd0f-4cdd-af22-2d7b887d552a",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "ac56c3f3-3977-482c-ab9e-4b75e80eca38",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      }, {
        "id" : "8c04a3f2-5e4c-4e9d-9dcf-fd202a680644",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl01-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl01-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl01-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
          "datastoreName" : "sfo-w01-cl01-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl01-vds01",
          "portGroupSpecs" : [ {
            "name" : "sfo-w01-cl01-vds01-pg-mgmt",
            "transportType" : "MANAGEMENT"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vsan",
            "transportType" : "VSAN"
          }, {
            "name" : "sfo-w01-cl01-vds01-pg-vmotion",
            "transportType" : "VMOTION"
          } ]
        }, {
          "name" : "sfo-w01-cl01-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 2
          }
        }
      }
    } ]
  },
  "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/3028e6c7-ba5e-4a58-9347-cecd859a89c5
Content-Length: 142

{
  "id" : "3028e6c7-ba5e-4a58-9347-cecd859a89c5",
  "name" : "",
  "status" : "UNKNOWN",
  "creationTimestamp" : "2020-09-29T18:37:06.099Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip
Refer 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. Get the Domains

Steps
  1. 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.9.3. Get a Domain

Prerequisites
  1. The following data is required

    • ID of the domain

Steps
  1. 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.9.4. Get Domain Endpoints

Prerequisites
  1. The following data is required

    • ID of the domain

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/ab161962-ff68-44da-b698-16cce09c252e/endpoints' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/domains/ab161962-ff68-44da-b698-16cce09c252e/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.9.5. Rename a Domain

Prerequisites
  1. Domain must exist.

Steps
  1. Get the ID of the domain. Filter the response by the domain’s current name to get the corresponding ID.

  1. 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.
  1. 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" : "53bd0bdc-be1e-48b4-b7fc-1400ba460efd",
  "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.
  1. 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.9.6. Delete a Domain

When you delete a domain, the clusters within the domain are deleted and the hosts are returned to the free pool.

Warning
Deleting a domain is an irreversible operation. All clusters and VMs within the domain are deleted and the underlying datastores are destroyed.
Warning
Deleting a domain puts the host "status" to UNASSIGNED_UNUSEABLE. Cleanup the hosts to change the "status" to UNASSIGNED_USEABLE.
Note
The network pools used by the domain are not deleted as part of task and must be deleted separately.
Prerequisites
  1. The following data is required

    • 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
  1. 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: 113

{
  "name" : "Mark domain with id f74c2d97-621a-4984-9ab6-5d84effde82f for deletion",
  "status" : "SUCCESSFUL"
}
  1. Trigger the deletion.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/domains/f74c2d97-621a-4984-9ab6-5d84effde82f' -i -X DELETE \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

DELETE /v1/domains/f74c2d97-621a-4984-9ab6-5d84effde82f HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/1e8c8261-0f6b-4f2f-b1b5-b23c27e224d0
Content-Length: 142

{
  "id" : "1e8c8261-0f6b-4f2f-b1b5-b23c27e224d0",
  "name" : "",
  "status" : "UNKNOWN",
  "creationTimestamp" : "2020-09-29T18:37:02.596Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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. Clusters

2.10.1. Create a Cluster

After you add the primary cluster, you can add more clusters to expand the domain.

Prerequisites
  1. The following data is required

    • ID of the domain in which the cluster is to be created

    • Cluster details

      • Name of the cluster

      • Hosts details

        • ID of the host (UUID)

        • License key for the host

        • List of VDS names to associate with host

        • ID of the vmNic host to be associated with VDS / N-VDS, once added to cluster

      • Datastore details

        Note
        Only one of "vsanDatastoreSpec" (For VSAN), "nfsDatastoreSpec" (For NFS) or "vmfsDatastoreSpec" (For VMFS on FC) or vvolDatastoreSpec (For VVOL) must be specified.
        • For VSAN

          • Number of host failures to tolerate (can be 0, 1, or 2)

          • License key for the vSAN datastore

            {
              "vsanDatastoreSpec" : {
                "failuresToTolerate" : 1,
                "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
                "datastoreName" : "sfo-w01-cl01-ds-vsan01"
              }
            }
        • For NFS

          • List of NFS server names

          • Shared directory path

          • User tag used to annotate NFS share

          • Boolean to identify if the mount directory should be read-only

            {
              "nfsDatastoreSpecs" : [ {
                "nasVolume" : {
                  "serverName" : [ "10.0.0.250" ],
                  "path" : "/nfs_mount/my_read_write_folder",
                  "readOnly" : false
                },
                "datastoreName" : "sfo-w01-cl01-ds-nfs01"
              } ]
            }
        • For VMFS on FC

          • Ensure that the ESXi hosts have the given VMFS on FC datastore name configured.

        {
          "vmfsDatastoreSpec" : {
            "fcSpec" : [ {
              "datastoreName" : "sfo-w01-cl01-ds-fc01"
            } ]
          }
        }
        • For VVOL

          • Ensure that the ESXi hosts have the given VVOL datastore name configured.

            • Vasa provider guid

            • Vasa container guid

            • Protocol type for vVol container

            • Vasa user guid

              {
                "vvolDatastoreSpecs" : [ {
                  "name" : "sfo-w01-cl01-ds-vvol01",
                  "vasaProviderSpec" : {
                    "vasaProviderId" : "42de6c36-e85e-483b-89c1-4aee5e8deebe",
                    "storageContainerId" : "908ce3e4-4e8d-414b-84e7-847ba9883521",
                    "storageProtocolType" : "ISCSI",
                    "userId" : "d0ed4dd6-1375-4b12-af8c-96c18c46d319"
                  }
                } ]
              }
        • Network Details

          • List of VDS details

            • For each VDS
              Port group names and the corresponding transport type
              DVS host Infrastructure traffic resource type
              Maximum allowed usage for a traffic class
              Amount of bandwidth to be reserved for the host infrastructure traffic class

          • NSX cluster Details

            • For NSX-T
              VLAN ID of the Geneve
              License key for NSX-T

    {
      "nsxTClusterSpec" : {
        "geneveVlanId" : 2
      }
    }
  2. Network pool must be configured.

  3. Logical VMware Cloud Foundation container (Workload Domain) must be provisioned.

Note
NSX-T management cluster is configured when the domain is created.
  1. Prerequisites for vSAN, NFS or VMFS on FC or VVOL must be met.

  2. License key details may be provisioned in vCenter.

  3. Host configuration must have minimum two active vmNics.

  4. There must be at least three hosts available in the VMware Cloud Foundation inventory.

  5. Ensure that the hosts you want to add to the cluster are in UNASSIGNED_USEABLE state.

  6. You must have valid host and vSAN (if using vSAN storage) license key specified with adequate sockets available for the host to be added.

  7. A DHCP server must be configured on the Geneve VLAN of the respective domains. When NSX-T creates VTEPs for the hosts in the domain, they are assigned IP addresses from the DHCP server.

  8. Evaluate if you want to have pNICs on multiple vSphere Distributed Switches in the NSX-T domain. At least two pNICs are needed on a single switch. Below is a spec sample:

    {
      "vmNics" : [ {
        "id" : "vmnic0",
        "vdsName" : "sfo-w01-cl01-vds01"
      }, {
        "id" : "vmnic1",
        "vdsName" : "sfo-w01-cl01-vds01"
      }, {
        "id" : "vmnic2",
        "vdsName" : "sfo-w01-cl01-vds02"
      }, {
        "id" : "vmnic3",
        "vdsName" : "sfo-w01-cl01-vds02"
      } ]
    }
Steps
  1. 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" : "893be35f-9776-4ad8-a980-5c4b52d56cbb",
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl02",
      "hostSpecs" : [ {
        "id" : "b1182719-a0fb-4d3e-9bb6-643493db00c3",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "033a6013-c424-4ce4-b28f-21b123131033",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "ae9743ca-5aa7-41dc-a498-9c988420ddb6",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXX-XXXX",
          "datastoreName" : "sfo-w01-cl02-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl02-vds01",
          "isUsedByNsxt" : false,
          "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"
          } ]
        }, {
          "name" : "sfo-w01-cl02-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 0
          }
        }
      },
      "advancedOptions" : {
        "evcMode" : "",
        "highAvailability" : {
          "enabled" : false
        }
      }
    } ]
  }
}'

HTTP Request

POST /v1/clusters/validations HTTP/1.1
Content-Type: application/json
Content-Length: 2855
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "domainId" : "893be35f-9776-4ad8-a980-5c4b52d56cbb",
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl02",
      "hostSpecs" : [ {
        "id" : "b1182719-a0fb-4d3e-9bb6-643493db00c3",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "033a6013-c424-4ce4-b28f-21b123131033",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "ae9743ca-5aa7-41dc-a498-9c988420ddb6",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXX-XXXX",
          "datastoreName" : "sfo-w01-cl02-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl02-vds01",
          "isUsedByNsxt" : false,
          "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"
          } ]
        }, {
          "name" : "sfo-w01-cl02-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 0
          }
        }
      },
      "advancedOptions" : {
        "evcMode" : "",
        "highAvailability" : {
          "enabled" : false
        }
      }
    } ]
  }
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 292

{
  "id" : "8b1aef69-8cb8-4982-80d5-ce8d8a54f424",
  "description" : "Validating Cluster Creation Spec",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "ClusterCreationSpecValidation",
    "resultStatus" : "SUCCEEDED"
  } ]
}
  1. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  2. 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.
  1. 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" : "a7ea9ea4-3209-420a-9b45-3c003f69edb4",
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl02",
      "hostSpecs" : [ {
        "id" : "421e9585-997d-4572-8d86-137649ecdd32",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "3900c7ae-367e-4a99-8e08-51928101c3ee",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "db328ed3-39b7-4d0a-be77-554154e19f1c",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXX-XXXX",
          "datastoreName" : "sfo-w01-cl02-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl02-vds01",
          "isUsedByNsxt" : false,
          "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"
          } ]
        }, {
          "name" : "sfo-w01-cl02-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 0
          }
        }
      },
      "advancedOptions" : {
        "evcMode" : "",
        "highAvailability" : {
          "enabled" : false
        }
      }
    } ]
  }
}'

HTTP Request

POST /v1/clusters HTTP/1.1
Content-Type: application/json
Content-Length: 2855
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "domainId" : "a7ea9ea4-3209-420a-9b45-3c003f69edb4",
  "computeSpec" : {
    "clusterSpecs" : [ {
      "name" : "sfo-w01-cl02",
      "hostSpecs" : [ {
        "id" : "421e9585-997d-4572-8d86-137649ecdd32",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "3900c7ae-367e-4a99-8e08-51928101c3ee",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      }, {
        "id" : "db328ed3-39b7-4d0a-be77-554154e19f1c",
        "licenseKey" : "XXXX-XXXX",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      } ],
      "datastoreSpec" : {
        "vsanDatastoreSpec" : {
          "failuresToTolerate" : 1,
          "licenseKey" : "XXXX-XXXX",
          "datastoreName" : "sfo-w01-cl02-ds-vsan01"
        }
      },
      "networkSpec" : {
        "vdsSpecs" : [ {
          "name" : "sfo-w01-cl02-vds01",
          "isUsedByNsxt" : false,
          "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"
          } ]
        }, {
          "name" : "sfo-w01-cl02-vds02",
          "isUsedByNsxt" : true
        } ],
        "nsxClusterSpec" : {
          "nsxTClusterSpec" : {
            "geneveVlanId" : 0
          }
        }
      },
      "advancedOptions" : {
        "evcMode" : "",
        "highAvailability" : {
          "enabled" : false
        }
      }
    } ]
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/3f52d733-58e5-41ff-a40e-dfc4834adc14
Content-Length: 166

{
  "id" : "3f52d733-58e5-41ff-a40e-dfc4834adc14",
  "name" : "Add Cluster Workflow",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:36:20.274Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.2. Get the Clusters

Steps
  1. 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: 1737

{
  "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" : "8045e44e-974e-4f43-9862-7f0326782677",
    "name" : "sfo-w01-cl01",
    "primaryDatastoreName" : "sfo-w01-cl01-ds-nfs01",
    "primaryDatastoreType" : "NFS",
    "hosts" : [ {
      "id" : "c0703437-6746-470z-9e1c-f9d3bbc9b1c6"
    }, {
      "id" : "c0703431-6742-470t-9e1d-f9d3bbc9b1c1"
    } ],
    "isStretched" : false
  }, {
    "id" : "8045e44e-974e-4f43-9861-7f0326782633",
    "name" : "sfo-w02-cl01",
    "primaryDatastoreName" : "sfo-w02-cl01-ds-nfs01",
    "primaryDatastoreType" : "NFS",
    "hosts" : [ {
      "id" : "c0703437-6746-470e-9e1c-f9d3bbc9b1c3"
    }, {
      "id" : "c0703431-6742-470r-9e1d-f9d3bbc9b1c4"
    } ],
    "isStretched" : false
  }, {
    "id" : "8045e44e-974e-4f43-9861-7f0326782677",
    "name" : "sfo-w03-cl01",
    "primaryDatastoreName" : "sfo-w03-cl01-ds-fc01",
    "primaryDatastoreType" : "FC",
    "hosts" : [ {
      "id" : "c0703437-6746-470e-9e2c-f9d3bbc9b1c3"
    }, {
      "id" : "c0703431-6742-460r-9e1d-f9d3bbc9b1c4"
    } ],
    "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

Steps
  1. 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

Steps
  1. 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: 1393

{
  "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" : "8045e44e-974e-4f43-9862-7f0326782677",
    "name" : "sfo-w01-cl01",
    "primaryDatastoreName" : "sfo-w01-cl01-ds-nfs01",
    "primaryDatastoreType" : "NFS",
    "hosts" : [ {
      "id" : "c0703437-6746-470z-9e1c-f9d3bbc9b1c6"
    }, {
      "id" : "c0703431-6742-470t-9e1d-f9d3bbc9b1c1"
    } ],
    "isStretched" : false
  }, {
    "id" : "8045e44e-974e-4f43-9861-7f0326782633",
    "name" : "sfo-w02-cl01",
    "primaryDatastoreName" : "sfo-w02-cl01-ds-nfs01",
    "primaryDatastoreType" : "NFS",
    "hosts" : [ {
      "id" : "c0703437-6746-470e-9e1c-f9d3bbc9b1c3"
    }, {
      "id" : "c0703431-6742-470r-9e1d-f9d3bbc9b1c4"
    } ],
    "isStretched" : false
  }, {
    "id" : "8045e44e-974e-4f43-9861-7f0326782677",
    "name" : "sfo-w03-cl01",
    "primaryDatastoreName" : "sfo-w03-cl01-ds-fc01",
    "primaryDatastoreType" : "FC",
    "hosts" : [ {
      "id" : "c0703437-6746-470e-9e2c-f9d3bbc9b1c3"
    }, {
      "id" : "c0703431-6742-460r-9e1d-f9d3bbc9b1c4"
    } ],
    "isStretched" : false
  } ]
}

2.10.3. Get a Cluster

Prerequisites
  1. The following data is required

    • ID of the cluster

Steps
  1. 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
Steps
  1. 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.10.4. Expand a Cluster

Adding an individual host to a cluster adds the resources of that host to the cluster. You can add multiple hosts at a time to a cluster.

Prerequisites
  1. The following data is required

    • ID of the cluster

    • For each host

      • ID of the host (UUID)

      • List of VDS names to associate with host

      • ID of the vmNic, host is associated to

      • Availability zone name to which host is mapped, if expand operation to be performed is on a stretched cluster

    • License key of ESXi

  2. The cluster in a domain to which hosts are to be added must exist.

  3. There must be a host available in the VMware Cloud Foundation inventory.

  4. The hosts to be added must have been commissioned.

  5. Ensure that the host you want to add is in an active state.

  6. For expanding a cluster which uses more than 2 vmnics, get the hosts which are compatible with the cluster using hosts query API with the criterion "HOST_COMPATIBLE_WITH_CLUSTER_USING_PNICS".

  1. You must have a valid ESXi license specified with adequate sockets available for the host to be added.

  2. Ensure that the host to be added to the cluster matches the configuration of the hosts already in the cluster. This ensures a balanced configuration of the cluster.

  3. Cluster should be in Stretched state, if expansion to be performed is on Stretched cluster.

Steps
  1. 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 '{
  "clusterUpdateSpec" : {
    "clusterExpansionSpec" : {
      "hostSpecs" : [ {
        "id" : "9b47c71d-bf60-4648-870b-ea5554039217",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      } ]
    }
  }
}'

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....

{
  "clusterUpdateSpec" : {
    "clusterExpansionSpec" : {
      "hostSpecs" : [ {
        "id" : "9b47c71d-bf60-4648-870b-ea5554039217",
        "username" : "root",
        "hostNetworkSpec" : {
          "vmNics" : [ {
            "id" : "vmnic0",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic1",
            "vdsName" : "sfo-w01-cl02-vds01"
          }, {
            "id" : "vmnic2",
            "vdsName" : "sfo-w01-cl02-vds02"
          }, {
            "id" : "vmnic3",
            "vdsName" : "sfo-w01-cl02-vds02"
          } ]
        }
      } ]
    }
  }
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 294

{
  "id" : "7a110fb8-c154-4e86-991e-94d274e12426",
  "description" : "Validating Cluster Expansion Spec",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "ClusterExpansionSpecValidation",
    "resultStatus" : "SUCCEEDED"
  } ]
}
  1. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  2. 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.
  1. 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" : [ {
      "id" : "a5648d15-1d18-4489-b801-e66ce96a9fcc",
      "username" : "root",
      "hostNetworkSpec" : {
        "vmNics" : [ {
          "id" : "vmnic0",
          "vdsName" : "sfo-w01-cl02-vds01"
        }, {
          "id" : "vmnic1",
          "vdsName" : "sfo-w01-cl02-vds01"
        }, {
          "id" : "vmnic2",
          "vdsName" : "sfo-w01-cl02-vds02"
        }, {
          "id" : "vmnic3",
          "vdsName" : "sfo-w01-cl02-vds02"
        } ]
      }
    } ]
  }
}'

HTTP Request

PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 536
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "clusterExpansionSpec" : {
    "hostSpecs" : [ {
      "id" : "a5648d15-1d18-4489-b801-e66ce96a9fcc",
      "username" : "root",
      "hostNetworkSpec" : {
        "vmNics" : [ {
          "id" : "vmnic0",
          "vdsName" : "sfo-w01-cl02-vds01"
        }, {
          "id" : "vmnic1",
          "vdsName" : "sfo-w01-cl02-vds01"
        }, {
          "id" : "vmnic2",
          "vdsName" : "sfo-w01-cl02-vds02"
        }, {
          "id" : "vmnic3",
          "vdsName" : "sfo-w01-cl02-vds02"
        } ]
      }
    } ]
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/28df25da-3bf0-43bf-8186-d7495e1f4165
Content-Length: 166

{
  "id" : "28df25da-3bf0-43bf-8186-d7495e1f4165",
  "name" : "Add Cluster Workflow",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:36:17.173Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.5. 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
  1. The following data is required

    • For each host to be removed

      • ID of the host

Steps
  1. 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" : "7464c6ef-5427-4fa7-96a6-a7f8521a5275"
    } ]
  }
}'

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" : "7464c6ef-5427-4fa7-96a6-a7f8521a5275"
    } ]
  }
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 296

{
  "id" : "c7cec184-dc85-4d64-9150-c1274928f9ef",
  "description" : "Validating Cluster Compaction Spec",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "ClusterCompactionSpecValidation",
    "resultStatus" : "SUCCEEDED"
  } ]
}
  1. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  2. 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.
  1. 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" : "aa4323d9-97c0-4e7a-806a-21a6b40bb0a9"
    } ]
  }
}'

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" : "aa4323d9-97c0-4e7a-806a-21a6b40bb0a9"
    } ]
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/332a9e02-7b28-4e52-8bdd-c5074c17804b
Content-Length: 166

{
  "id" : "332a9e02-7b28-4e52-8bdd-c5074c17804b",
  "name" : "Add Cluster Workflow",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:36:21.729Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.6. Stretch a Cluster

Convert a Standard vSAN cluster to a Stretched cluster

Prerequisites
  1. The following data is required

    • ID of the cluster

    • Secondary AZ overlay vLAN Id

    • For each host

      • ID of the host (UUID)

      • License key of ESXi

    • For each Witness host

      • ID of witness host

      • FQDN of witness host

      • vSAN subnet cidr of witness host

  2. The following data is optional

    • Witness traffic shared with vSAN (or Management VMK)

    • Edge cluster configured Multi-AZ

  3. The cluster must exist.

  4. There must be a host available in the VMware Cloud Foundation inventory.

  5. The hosts to be added must have been commissioned.

  6. Ensure that the host you want to add is in an active state.

  7. You must have a valid ESXi license specified with adequate sockets available for the host to be added.

  8. Ensure that the host to be added to the cluster matches the configuration of the hosts already in the cluster. This ensures a balanced configuration of the cluster.

  9. vSAN witness should be configured.

  10. Underlying physical network should have proper MTUs and vSAN/vMotion connectivity between availability zones and the witness.

Steps
  1. 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" : [ {
      "id" : "5c4611f2-4900-4148-9934-ce26540c7b0f",
      "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
      "username" : "root",
      "hostNetworkSpec" : {
        "vmNics" : [ {
          "id" : "vmnic0",
          "vdsName" : "sfo-w01-cl02-vds01",
          "moveToNvds" : false
        }, {
          "id" : "vmnic1",
          "vdsName" : "sfo-w01-cl02-vds02",
          "moveToNvds" : true
        } ]
      }
    } ],
    "witnessSpec" : {
      "vsanIp" : "10.0.4.88",
      "fqdn" : "witness-vsan.sfo.rainpole.io",
      "vsanCidr" : "10.0.4.0/24"
    },
    "witnessTrafficSharedWithVsanTraffic" : false,
    "secondaryAzOverlayVlanId" : 0
  }
}'

HTTP Request

POST /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32/validations HTTP/1.1
Content-Type: application/json
Content-Length: 711
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "clusterStretchSpec" : {
    "hostSpecs" : [ {
      "id" : "5c4611f2-4900-4148-9934-ce26540c7b0f",
      "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
      "username" : "root",
      "hostNetworkSpec" : {
        "vmNics" : [ {
          "id" : "vmnic0",
          "vdsName" : "sfo-w01-cl02-vds01",
          "moveToNvds" : false
        }, {
          "id" : "vmnic1",
          "vdsName" : "sfo-w01-cl02-vds02",
          "moveToNvds" : true
        } ]
      }
    } ],
    "witnessSpec" : {
      "vsanIp" : "10.0.4.88",
      "fqdn" : "witness-vsan.sfo.rainpole.io",
      "vsanCidr" : "10.0.4.0/24"
    },
    "witnessTrafficSharedWithVsanTraffic" : false,
    "secondaryAzOverlayVlanId" : 0
  }
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 290

{
  "id" : "6bac0740-2d37-4e4f-89be-a49bff61ae75",
  "description" : "Validating Cluster Stretch Spec",
  "executionStatus" : "COMPLETED",
  "resultStatus" : "SUCCEEDED",
  "validationChecks" : [ {
    "description" : "ClusterStretchSpecValidation",
    "resultStatus" : "SUCCEEDED"
  } ]
}
  1. In case of no errors in the input specification, the "executionStatus" is "COMPLETED" and "resultStatus" is "SUCCEEDED".

  2. 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.
  1. 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" : [ {
      "id" : "b34a5500-7dc3-4962-93c6-ee6f62aebd00",
      "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
      "username" : "root",
      "hostNetworkSpec" : {
        "vmNics" : [ {
          "id" : "vmnic0",
          "vdsName" : "sfo-w01-cl02-vds01",
          "moveToNvds" : false
        }, {
          "id" : "vmnic1",
          "vdsName" : "sfo-w01-cl02-vds02",
          "moveToNvds" : true
        } ]
      }
    } ],
    "witnessSpec" : {
      "vsanIp" : "10.0.4.88",
      "fqdn" : "witness-vsan.sfo.rainpole.io",
      "vsanCidr" : "10.0.4.0/24"
    },
    "witnessTrafficSharedWithVsanTraffic" : false,
    "secondaryAzOverlayVlanId" : 0
  }
}'

HTTP Request

PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 711
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "clusterStretchSpec" : {
    "hostSpecs" : [ {
      "id" : "b34a5500-7dc3-4962-93c6-ee6f62aebd00",
      "licenseKey" : "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX",
      "username" : "root",
      "hostNetworkSpec" : {
        "vmNics" : [ {
          "id" : "vmnic0",
          "vdsName" : "sfo-w01-cl02-vds01",
          "moveToNvds" : false
        }, {
          "id" : "vmnic1",
          "vdsName" : "sfo-w01-cl02-vds02",
          "moveToNvds" : true
        } ]
      }
    } ],
    "witnessSpec" : {
      "vsanIp" : "10.0.4.88",
      "fqdn" : "witness-vsan.sfo.rainpole.io",
      "vsanCidr" : "10.0.4.0/24"
    },
    "witnessTrafficSharedWithVsanTraffic" : false,
    "secondaryAzOverlayVlanId" : 0
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/ac52af42-7f0c-4e11-a97d-612b4b1fc193
Content-Length: 166

{
  "id" : "ac52af42-7f0c-4e11-a97d-612b4b1fc193",
  "name" : "Add Cluster Workflow",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:36:20.758Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.7. Unstretch a Cluster

Convert a Stretched cluster to a Standard vSAN cluster

Prerequisites
  1. The following data is required

    • ID of the cluster

  2. The cluster must exist.

  3. Cluster should be in Stretched state.

Steps
  1. 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 '{
  "clusterUnstretchSpec" : { }
}'

HTTP Request

PATCH /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Content-Type: application/json
Content-Length: 34
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "clusterUnstretchSpec" : { }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/19f5a830-a57f-4990-9a8e-98b121e3d7c0
Content-Length: 166

{
  "id" : "19f5a830-a57f-4990-9a8e-98b121e3d7c0",
  "name" : "Add Cluster Workflow",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:36:19.893Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.8. 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.
Prerequisites
  1. The following data is required

    • ID of the cluster to be deleted

  2. Ensure that a cluster with the given ID exists.

  3. The cluster has been marked for deletion.

  4. Migrate or backup the VMs and data on the data store associated with the cluster to another location.

Steps
  1. 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
  1. Trigger the deletion.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32' -i -X DELETE \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

DELETE /v1/clusters/2d54bb6c-637a-49a4-a94c-622671d0ab32 HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/15245f86-5d63-4337-a544-cd5439666ee4
Content-Length: 166

{
  "id" : "15245f86-5d63-4337-a544-cd5439666ee4",
  "name" : "Add Cluster Workflow",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:36:19.040Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.11. Multi Site Management

2.11.1. Create a Multi Site Management Federation

A federation is a group of Cloud Foundation instances, such that each member can view information about the other Cloud Foundation instances in the group. The federation creator is granted the controller role by default.

You can create multiple federations within your organization, but global visibility is available only within a federation. Members can belong to only a single federation at a time.

Prerequisites
  1. The following data is required

    • Name of the federation

    • Member Details

      • FQDN of the Member

      • Role of the Member (CONTROLLER)

      • Site Type (DATACENTER)

      • Site Name

      • City where the site is located

      • State where the site is located (Optional)

      • Country where the site is located

      • Location coordinates

        • Longitude

        • Latitude

  2. Ensure, VCF Instance Role is set to NOT_JOINED.

Steps
  1. Trigger the Create Federation
    cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation' -i -X PUT \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWR....' \
    -d '{
  "federationName" : "New Federation",
  "memberJoinDetail" : {
    "role" : "CONTROLLER",
    "fqdn" : "sfo-vcf01.rainpole.io",
    "siteType" : "DATACENTER",
    "siteName" : "Palo Alto Epic Center",
    "country" : "USA",
    "state" : "California",
    "city" : "Palo Alto",
    "coordinate" : {
      "longitude" : -122.838,
      "latitude" : 37.286
    }
  }
}'

HTTP Request

PUT /v1/sddc-federation HTTP/1.1
Content-Type: application/json
Content-Length: 369
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

{
  "federationName" : "New Federation",
  "memberJoinDetail" : {
    "role" : "CONTROLLER",
    "fqdn" : "sfo-vcf01.rainpole.io",
    "siteType" : "DATACENTER",
    "siteName" : "Palo Alto Epic Center",
    "country" : "USA",
    "state" : "California",
    "city" : "Palo Alto",
    "coordinate" : {
      "longitude" : -122.838,
      "latitude" : 37.286
    }
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 246

{
  "status" : "SUCCEEDED",
  "operation" : null,
  "taskId" : "67e1515d-4400-4876-8d1c-809085294bc0",
  "remoteOperationTask" : null,
  "progressDetails" : null,
  "created" : null,
  "lastUpdated" : null,
  "errors" : null,
  "payload" : null
}
  1. Create federation API returns a task object. Task object has the task id.

  2. Poll for the status of the workflow using the task ID with request
    TIP: Refer to: Get a Task

  3. Validate the input specification.

    • Validates if VCF instance Role is other than CONTROLLER

  4. Initialize the fabric services

  5. Initialize the topics

  6. Initialize persistent store

  7. Add member to federation

  8. Update persistent store with new member details

    • If the "status" is "SUCCEEDED", the task is completed successfully.

    • If the "status" is "FAILED", the task can be re-executed.

2.11.2. Invite

You can invite Cloud Foundation instances to join a federation. They can be invited as a controller or a regular member.
In the InvitationSpec or http/curl request if inviteeRole is MEMBER, the vcf instance will have limited access and will not be able to view federation details.
Inorder to view federation details, use inviteeRole as CONTROLLER or MANAGER.
Since a federation can include a maximum of three controllers, you may want to assign the controller role to the primary data centers within the federation.

Prerequisites
  1. Federation must be created.

  2. You must have the controller role to invite a member to a federation.

  3. Only one member can be invited at a time.

  4. The following data is required

    • Role of the Invitee

    • FQDN of the Invitee

Steps
  1. Trigger the task using the valid invite spec.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation/membership-tokens' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWR....' \
    -d '{
  "inviteeRole" : "MEMBER",
  "inviteeFqdn" : "sfo-vcf01.rainpole.io",
  "tokenExpiryHours" : 0.0
}'

HTTP Request

POST /v1/sddc-federation/membership-tokens HTTP/1.1
Content-Type: application/json
Content-Length: 101
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

{
  "inviteeRole" : "MEMBER",
  "inviteeFqdn" : "sfo-vcf01.rainpole.io",
  "tokenExpiryHours" : 0.0
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 203

{
  "controllerFqdn" : [ "sfo-vcf01.rainpole.io" ],
  "inviteeRole" : "MEMBER",
  "inviteeFqdn" : "sfo-vcf01.rainpole.io",
  "invitationToken" : "43f525b6-6c11-41c2-92de-f020650f3b7a",
  "error" : null
}
  1. This is a sync call, and on success should get a token, role and name.

  2. If there is a failure, appropriate error is returned. Perform relevant corrective actions before retrying this API.

2.11.3. Join the Federation

You can join a federation as a controller/manager/member depending on the assigned role in the invitation.
Use the token you received as part of the invitation, to trigger a join API.

An invitation is valid for ten days. You must request a new invitation after this period.

Prerequisites
  1. The following data is required

    • Controller FQDN

      • You can provide any of the controllers FQDN to join the federation. However, it is preferred to provide
        the FQDN of the controller who sent out the invitation.

    • Token

      • Token you received from the controller as part of the invitation.

    • Member Details

      • Role of the invitee, this should match the role you provided during invite.

      • FQDN of the invitee

      • Type of the site, it will always be "DATACENTER" for 1.0 release

      • Name of the site

      • Country

      • State

      • City

      • Coordinate of the site

        • Longitude

        • Latitude

Steps

Provide above inputs and invoke the API.
If the request goes through successfully, we should see this new member on the world map.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation/members' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWR....' \
    -d '{
  "controllerFqdn" : "sfo-vcf01.rainpole.io",
  "joinToken" : "test",
  "commonName" : "nyc-vcf01.rainpole.io",
  "memberJoinDetail" : {
    "role" : "MEMBER",
    "fqdn" : "nyc-vcf01.rainpole.io",
    "siteType" : "DATACENTER",
    "siteName" : "New York Epic Center",
    "country" : "USA",
    "state" : "New York",
    "city" : "New York",
    "coordinate" : {
      "longitude" : -74.006,
      "latitude" : 40.712
    }
  }
}'

HTTP Request

POST /v1/sddc-federation/members HTTP/1.1
Content-Type: application/json
Content-Length: 433
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

{
  "controllerFqdn" : "sfo-vcf01.rainpole.io",
  "joinToken" : "test",
  "commonName" : "nyc-vcf01.rainpole.io",
  "memberJoinDetail" : {
    "role" : "MEMBER",
    "fqdn" : "nyc-vcf01.rainpole.io",
    "siteType" : "DATACENTER",
    "siteName" : "New York Epic Center",
    "country" : "USA",
    "state" : "New York",
    "city" : "New York",
    "coordinate" : {
      "longitude" : -74.006,
      "latitude" : 40.712
    }
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 246

{
  "status" : "SUCCEEDED",
  "operation" : null,
  "taskId" : "6a8d1586-cb60-4564-984d-8352f2ec1e39",
  "remoteOperationTask" : null,
  "progressDetails" : null,
  "created" : null,
  "lastUpdated" : null,
  "errors" : null,
  "payload" : null
}

2.11.4. Get progress

Use this API to get progress of long running operations in the system. When operations like bootstrap, join or teardown are triggered, as part of response
you receive a request ID. Use this request ID to track the status of the operation.

Prerequisites
  • Request ID

Steps
  1. Provide a valid request ID and invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation/tasks/e579c77c-8e26-4499-bf6a-2027abfd7f5c' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer etYWR....'

HTTP Request

GET /v1/sddc-federation/tasks/e579c77c-8e26-4499-bf6a-2027abfd7f5c HTTP/1.1
Content-Type: application/json
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 212

{
  "status" : "SUCCEEDED",
  "operation" : null,
  "taskId" : null,
  "remoteOperationTask" : null,
  "progressDetails" : null,
  "created" : null,
  "lastUpdated" : null,
  "errors" : null,
  "payload" : null
}

2.11.5. Get Multi Site Management Federation Details

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation' -i -X GET \
    -H 'Authorization: Bearer etYWR....'

HTTP Request

GET /v1/sddc-federation HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 3212

[ {
  "memberDetails" : {
    "role" : "CONTROLLER",
    "fqdn" : "sfo-vcf01.rainpole.io",
    "siteType" : "DATACENTER",
    "siteName" : "Palo Alto Epic Center",
    "country" : "USA",
    "state" : "California",
    "city" : "Palo Alto",
    "coordinate" : {
      "longitude" : -122.838,
      "latitude" : 37.286
    }
  },
  "memberInventory" : {
    "capacity" : {
      "summary" : {
        "domainCount" : 2,
        "aggregatedCapacity" : {
          "cpu" : {
            "free" : 58.795,
            "total" : 79.799,
            "used" : 21.00399,
            "unallocated" : 0.0,
            "unit" : "GHZ"
          },
          "hostCount" : {
            "total" : 10,
            "unallocated" : 4,
            "used" : 6
          },
          "datastores" : [ {
            "used" : 0.866,
            "datastoreName" : "sfo-m01-cl01-ds-vsan01",
            "datastoreType" : "VSAN",
            "freeSpace" : 5.839,
            "capacity" : 6.705,
            "unallocated" : 2.694,
            "unit" : "TB"
          }, {
            "used" : 0.866,
            "datastoreName" : "sfo-m01-cl01-ds-vsan02",
            "datastoreType" : "VSAN",
            "freeSpace" : 5.839,
            "capacity" : 6.705,
            "unallocated" : 2.694,
            "unit" : "TB"
          } ],
          "memory" : {
            "free" : 76.109,
            "total" : 375.0,
            "used" : 298.89,
            "unallocated" : 0.0,
            "unit" : "GB"
          }
        },
        "domainTypeInfo" : [ {
          "type" : null,
          "domainCount" : 2,
          "aggregatedCapacity" : {
            "cpu" : {
              "free" : 58.795,
              "total" : 79.799,
              "used" : 21.00399,
              "unallocated" : 0.0,
              "unit" : "GHZ"
            },
            "hostCount" : {
              "total" : 10,
              "unallocated" : 4,
              "used" : 6
            },
            "datastores" : [ {
              "used" : 0.866,
              "datastoreName" : "sfo-m01-cl01-ds-vsan01",
              "datastoreType" : "VSAN",
              "freeSpace" : 5.839,
              "capacity" : 6.705,
              "unallocated" : 2.694,
              "unit" : "TB"
            }, {
              "used" : 0.866,
              "datastoreName" : "sfo-m01-cl01-ds-vsan02",
              "datastoreType" : "VSAN",
              "freeSpace" : 5.839,
              "capacity" : 6.705,
              "unallocated" : 2.694,
              "unit" : "TB"
            } ],
            "memory" : {
              "free" : 76.109,
              "total" : 375.0,
              "used" : 298.89,
              "unallocated" : 0.0,
              "unit" : "GB"
            }
          }
        } ],
        "domainInfo" : null
      }
    },
    "inventoryInfo" : null,
    "softwareInfo" : {
      "pendingUpdates" : 1
    },
    "creationTime" : null,
    "createTime" : "1595522545"
  },
  "memberLiveness" : {
    "livelinessCode" : "GREEN",
    "livelinessDetails" : [ "The vcf site Palo Alto Epic Centeris live" ]
  },
  "memberHealth" : {
    "healthCode" : "GREEN",
    "healthDetails" : [ "Category: CPU, usage: 60.0, and it is normal." ]
  }
} ]

This API can be used to get list of all VCF instances in the federation with details.
* VCF instance details
* VCF instance inventory
* VCF instance liveness
* VCF instance health

2.11.6. Get Members

Get the details of the members.

Prerequisites
  1. Federation must be created.

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation/members' -i -X GET \
    -H 'Authorization: Bearer etYWR....'

HTTP Request

GET /v1/sddc-federation/members HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 413

{
  "memberDetail" : {
    "role" : "CONTROLLER",
    "fqdn" : "sfo-vcf01.rainpole.io",
    "siteType" : "DATACENTER",
    "siteName" : "Palo Alto Epic Center",
    "country" : "USA",
    "state" : "California",
    "city" : "Palo Alto",
    "coordinate" : {
      "longitude" : -122.838,
      "latitude" : 37.286
    }
  },
  "federationName" : "New Federation",
  "permissions" : [ "JOIN" ],
  "error" : null
}

2.11.7. Leave from the federation

Leaving a federation removes the Multi-Instance Management view from your SDDC Manager dashboard.

If you are a controller, you can leave a federation only if there is at least one more controller in the federation.
If you are the only controller member in a federation, you must dismantle a federation instead of leaving it.

Prerequisites
  1. The following data is required

    • ID (FQDN) of the member to be deleted, specified as a path variable.

      • If member ID is equal to the FQDN of invoking SDDC Manager, it is treated as leave.

      • Otherwise, it is treated as evicting the member (specified by ID) by invoking SDDC Manager. In this case the invoking SDDC Manager must be a Controller.

  2. The Request param 'force' is optional

    • If force is set to true, the leaving member will not contact controller, but shut down local system.
      Default value for force is false, in which case leaving member will issue REST request to a remote controller asking for leave.

  3. If the invoking SDDC Manager is the only member in the federation, do not use leave, but teardown instead.

Steps
  1. If ID is the same as FQDN of invoking SDDC Manager and force is false

    • This member will issue rest request to a remote controller asking for leave, if the remote response
      is successful, it will then shut down its local system. Persistent store will be archived and cleaned up.

  2. If ID is the same as FQDN of invoking SDDC Manager and force is true

    • This member will not contact remote controller but shut down its local system directly. Persistent store will be archived and cleaned up.

  3. If ID is the different from FQDN of invoking SDDC Manager

    • The invoking SDDC Manager will evict the member (specified by ID) from federation and ask the evictee to clean its system.
      force variable in this case doesn’t matter.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation/members/nyc-vcf01.rainpole.io' -i -X DELETE \
    -H 'Authorization: Bearer etYWR....'

HTTP Request

DELETE /v1/sddc-federation/members/nyc-vcf01.rainpole.io HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

HTTP Response

HTTP/1.1 202 Accepted
Content-Disposition: inline;filename=f.txt
Content-Type: application/json
Content-Length: 246

{
  "status" : "SUCCEEDED",
  "operation" : null,
  "taskId" : "26335c7d-89ff-4167-8411-bd7ea853f768",
  "remoteOperationTask" : null,
  "progressDetails" : null,
  "created" : null,
  "lastUpdated" : null,
  "errors" : null,
  "payload" : null
}

To Force remove the member use following:

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation/members/nyc-vcf01.rainpole.io?force=true' -i -X DELETE \
    -H 'Authorization: Bearer etYWR....'

HTTP Request

DELETE /v1/sddc-federation/members/nyc-vcf01.rainpole.io?force=true HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

HTTP Response

HTTP/1.1 202 Accepted
Content-Disposition: inline;filename=f.txt
Content-Type: application/json
Content-Length: 246

{
  "status" : "SUCCEEDED",
  "operation" : null,
  "taskId" : "57005788-32ee-4457-834e-dbed9eed3912",
  "remoteOperationTask" : null,
  "progressDetails" : null,
  "created" : null,
  "lastUpdated" : null,
  "errors" : null,
  "payload" : null
}

2.11.8. Tear Down Federation

You can dismantle a federation if you are the last controller member in the federation.
Only members with the controller role can dismantle a federation.

Prerequisites
  1. No request body is needed.

  2. Invoking SDDC Manager must be of Controller role, and the only one in the federation.

Steps
  1. When Teardown API is invoked, it does the following

    • All fabric services previously set up will be shut down.

    • Persistent store will be archived and cleaned up.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/sddc-federation' -i -X DELETE \
    -H 'Authorization: Bearer etYWR....'

HTTP Request

DELETE /v1/sddc-federation HTTP/1.1
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWR....

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 246

{
  "status" : "SUCCEEDED",
  "operation" : null,
  "taskId" : "62565abd-576b-46ac-bb34-2d5654dbab2b",
  "remoteOperationTask" : null,
  "progressDetails" : null,
  "created" : null,
  "lastUpdated" : null,
  "errors" : null,
  "payload" : null
}

2.12. AVNs

2.12.1. Get the AVNs

This API is used to fetch all configured AVNs

Steps
  1. 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.12.2. Get the AVNs by RegionType

This API is used to fetch all configured AVNs for a given region type

Prerequisites
  1. The following data is required

    • RegionType of the AVN

Steps
  1. 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.13. vRealize Suite Lifecycle Manager

2.13.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
  1. 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

  2. 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
  1. Assemble the vRealize Suite Lifecycle Manager deployment input specification.

Tip
Refer to VrslcmDeploymentSpec
  1. 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"
}
  1. 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
  1. 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.

  2. 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"
}
  1. 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

2.13.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
  1. 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
  1. 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"
}
  1. 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.

Tip
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.

2.14. Workspace ONE Access for vRealize

2.14.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.

Steps
  1. Deploy vRealize Suite Lifecycle Manager.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.

2.15. vRealize Automation

2.15.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.

Steps
  1. Deploy vRealize Suite Lifecycle Manager.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating vRealize Automation environment.

  1. Refer to vRealize Automation Public API documentation for connection vRealize Automation to workload domains.

2.16. vRealize Operations

2.16.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.

Steps
  1. Deploy vRealize Suite Lifecycle Manager.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating vRealize Operations Manager environment.

  1. vRealize Operations Manager is being automatically connected to the management domain after deployment.

  1. Refer to Connect vRealize Operations to workload domain for connecting vRealize Operations Manager to workload domains.

2.16.2. Connect vRealize Operations to workload domain

You can connect vRealize Operations product deployment in Cloud Foundation to your workload domains.

Prerequisites
  1. 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
  1. Assemble the vRealize Operations domain specification.

Tip
Refer to DomainIntegration
  1. 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" : "e7618cf9-bdc5-451e-b9ba-4104f7fa176c",
  "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" : "e7618cf9-bdc5-451e-b9ba-4104f7fa176c",
  "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.
  1. Track the task status using the "id" from the previous response.

Tip
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
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.17. vRealize Log Insight

2.17.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.

Steps
  1. Deploy vRealize Suite Lifecycle Manager.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating global environment.

  1. Refer to vRealize Suite Lifecycle Manager Public API documentation for creating vRealize Log Insight environment.

  1. vRealize Log Insight is being automatically connected to the management domain after deployment.

  1. Refer to Connect vRealize Log Insight to workload domains for connection vRealize Log Insight to workload domains.

2.17.2. Connect vRealize Log Insight to workload domains

You can connect vRealize Log Insight product deployment in Cloud Foundation to your workload domains.

Prerequisites
  1. Verify that the vRealize Log Insight cluster is online and operational.

Steps
  1. Assemble the vRealize Log Insight domain specification.

Tip
Refer to Vrli
  1. 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" : "67477236-4ce4-406b-9b04-054e3d822b32",
  "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" : "67477236-4ce4-406b-9b04-054e3d822b32",
  "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.
  1. Track the task status using the "id" from the previous response.

Tip
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
For task re-execution refer to: Retry a Task.

2.18. Backup and Restore

Back up and restore solution is provided to backup SDDC manager and configure NSX manager backup.

2.18.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.

Prerequisites
  1. The following data is required

    • 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 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
  1. 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
    }
  } ]
}'
Request Body
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
    }
  } ]
}
Response Body
HTTP/1.1 202 Accepted
Location: /v1/tasks/5aa03ad0-3379-44bb-b760-d023236d3dfb
Content-Type: application/json
Content-Length: 210

{
  "id" : "5aa03ad0-3379-44bb-b760-d023236d3dfb",
  "name" : "Configure backup on VCF Components and register backup locations",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.18.2. Edit the Backup Configuration

Prerequisites
  1. The following data is required

    • 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
  1. Invoke the API

Tip
To get the current backup configuration Refer to: Get the Backup Configuration
  1. 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"
  } ]
}'
Request Body
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"
  } ]
}
Response Body
HTTP/1.1 202 Accepted
Location: /v1/tasks/9bfdf576-c944-42af-8c8b-09cd0c678a10
Content-Type: application/json
Content-Length: 210

{
  "id" : "9bfdf576-c944-42af-8c8b-09cd0c678a10",
  "name" : "Configure backup on VCF Components and register backup locations",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
  1. 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
    }
  } ]
}'
Request Body
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
    }
  } ]
}
Response Body
HTTP/1.1 202 Accepted
Location: /v1/tasks/58ae38f6-ddbb-41cd-bf7e-f88262b18c55
Content-Type: application/json
Content-Length: 209

{
  "id" : "58ae38f6-ddbb-41cd-bf7e-f88262b18c55",
  "name" : "Configure backup on VCF Components and register backup schedule",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2019-05-10T11:13:22.551Z"
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.18.3. Get the Backup Configuration

Steps
  1. 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.18.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
  1. The following action needs to be performed

    • Backup must be configured

  2. 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.

  3. 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.
Steps
  1. 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"
  } ]
}
  1. Poll the task until "status" is not "IN_PROGRESS" using the "id" from the previous response.

Tip
Refer 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.

  1. The backup files are saved in the /nfs/vmware/vcf/nfs-mount/sddc-manager-backup directory on the SDDC Manager VM.

  2. 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.18.5. Initiate Restore of SDDC Manager

In case of a failure, you can restore SDDC Manager from a saved backup.

Prerequisites
  1. The following data is required

    • 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
  1. Power off the original SDDC Manager VM.

  2. Rename the VM to something like sddc-manager-original using the management domain vCenter Server.

  3. Identify the backup file to be used for the restore operation.

Tip
In most cases, you should select the most recently taken backup.
  1. 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.

  2. 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 enc -d -aes256 -in filename-of-selected-file | tar -xz
  1. At the prompt, enter the passphrase that you configured before backing up SDDC Manager.

  2. In order to restore SDDC Manager, you need to deploy the SDDC Manager OVA.

  3. The link to download the OVA is found in the metadata.json file in the backup file.

  4. Download the SDDC Manager OVA from the link provided.

  5. Deploy SDDC Manager VM from vCenter Server or with the OVF Tool.

    • 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.

        • Leave the DNS and NTP fields empty

        • (Optional) Existing PSC Settings section.

      • 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.

        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
      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://root@10.0.0.100:443/
      Deploying to VI: vi://root@10.0.0.100:443/
      Transfer Completed
      Powering on VM: sddc-manager
      Task Completed
      Waiting for IP address...
      Received IP address: 10.0.0.4
      Completed successfully
      • 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.

  6. Take a snapshot of the SDDC Manager VM.

  7. Copy the encrypted backup file to the /tmp directory on the SDDC Manager VM.

  8. 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: c0191bcc-2730-4e1b-b08c-de4cb99ab5a5
Content-Type: application/json
Content-Length: 79

{
  "id" : "c0191bcc-2730-4e1b-b08c-de4cb99ab5a5",
  "status" : "IN_PROGRESS"
}
  1. 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
}
  1. If the "status" is "SUCCESSFUL", the task is completed successfully.

  2. 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.

  1. 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.19. Depot Settings

2.19.1. Get Depot Settings

Online:

Offline:

Steps
  1. 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: 211

{
  "vmwareAccount" : {
    "username" : "acmeuser",
    "password" : "acmepassword",
    "status" : "DEPOT_CONNECTION_SUCCESSFUL",
    "message" : "Depot Status: Success"
  },
  "dellEmcSupportAccount" : null
}

2.19.2. Update Depot Settings

Online:

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:

  • Username of My VMware Account.

  • Password of My VMware Account.

Tip
Refer to: DepotSettings and DepotAccount.
Steps
  1. 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"
  }
}'

HTTP Request

PUT /v1/system/settings/depot HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 90
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "vmwareAccount" : {
    "username" : "acmeuser",
    "password" : "acmepassword"
  }
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 211

{
  "vmwareAccount" : {
    "username" : "acmeuser",
    "password" : "acmepassword",
    "status" : "DEPOT_CONNECTION_SUCCESSFUL",
    "message" : "Depot Status: Success"
  },
  "dellEmcSupportAccount" : null
}

2.20. Prechecks

2.20.1. Perform System Precheck

Precheck System API 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
  1. 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/b1cb150e-a886-4a76-9481-1e4ac2e3c673
Content-Length: 667

{
  "id" : "b1cb150e-a886-4a76-9481-1e4ac2e3c673",
  "name" : "Precheck Task",
  "type" : "PRECHECK",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:45.385Z",
  "completionTimestamp" : "2020-09-29T18:37:45.385Z",
  "subTasks" : [ {
    "name" : "Upgrade - DOMAIN ",
    "description" : "Upgrade - DOMAIN ",
    "status" : "PENDING",
    "creationTimestamp" : "2020-09-29T18:37:45.386Z",
    "resources" : [ {
      "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
      "type" : "DOMAIN"
    } ]
  } ],
  "resources" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "type" : "DOMAIN"
  } ],
  "isCancellable" : false
}
  1. 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.20.2. Get System Precheck Task

Get Precheck Task by ID API is used to retrieve a precheck task.

Prerequisites
  1. The following data is required

    • ID of the precheck task

Steps
  1. 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/b1cb150e-a886-4a76-9481-1e4ac2e3c673' -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" : "b1cb150e-a886-4a76-9481-1e4ac2e3c673",
  "name" : "Precheck Task",
  "type" : "PRECHECK",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:46.085Z",
  "completionTimestamp" : "2020-09-29T18:37:46.085Z",
  "subTasks" : [ {
    "name" : "Upgrade - DOMAIN ",
    "description" : "Upgrade - DOMAIN ",
    "status" : "PENDING",
    "creationTimestamp" : "2020-09-29T18:37:46.085Z",
    "resources" : [ {
      "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
      "type" : "DOMAIN"
    } ]
  } ],
  "resources" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "type" : "DOMAIN"
  } ],
  "isCancellable" : false
}

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 667

{
  "id" : "b1cb150e-a886-4a76-9481-1e4ac2e3c673",
  "name" : "Precheck Task",
  "type" : "PRECHECK",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:46.085Z",
  "completionTimestamp" : "2020-09-29T18:37:46.085Z",
  "subTasks" : [ {
    "name" : "Upgrade - DOMAIN ",
    "description" : "Upgrade - DOMAIN ",
    "status" : "PENDING",
    "creationTimestamp" : "2020-09-29T18:37:46.085Z",
    "resources" : [ {
      "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
      "type" : "DOMAIN"
    } ]
  } ],
  "resources" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "type" : "DOMAIN"
  } ],
  "isCancellable" : false
}

2.21. Bundles

2.21.1. Upload a Bundle

Offline:

  • Upload a Bundle API 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

The following data is required:

  • Bundle file path.

  • Bundle manifest file path.

  • Bundle manifest signature file path.

Tip
Refer to: BundleUploadSpec.
Steps
  1. 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/0b31ca3a-e7ff-4f66-ad2f-4ca648361933
Content-Length: 366

{
  "id" : "0b31ca3a-e7ff-4f66-ad2f-4ca648361933",
  "name" : "Upload BUNDLE - PSC:6.7.0-13010631 VCENTER:6.7.0-13010631",
  "type" : "BUNDLE_UPLOAD",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:47.172Z",
  "resources" : [ {
    "resourceId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "type" : "BUNDLE"
  } ],
  "isCancellable" : false
}
  1. 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.21.2. Get the Bundles

Steps
  1. 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: 1840

{
  "elements" : [ {
    "id" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "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" : "9bc9760f-847d-4a90-ae8c-a885e9cabaf6",
    "type" : "VMWARE_SOFTWARE",
    "description" : "PSC-VC -67U2-Update bundle ( 11726888 ==> 13010631)",
    "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" : "PSC Update Bundle",
      "vendor" : "VMware",
      "releasedDate" : "2019-05-10T10:29:10.645Z",
      "toVersion" : "6.7.0-13010631",
      "fromVersion" : "6.7.0-11726888",
      "imageType" : "PATCH",
      "id" : "690cbe9e-241b-4086-bbf3-719b40499d6f",
      "type" : "PSC"
    }, {
      "description" : "VCENTER Update Bundle",
      "vendor" : "VMware",
      "releasedDate" : "2019-05-10T10:29:10.645Z",
      "toVersion" : "6.7.0-13010631",
      "fromVersion" : "6.7.0-11726888",
      "imageType" : "PATCH",
      "id" : "690cbe9e-241b-4086-bbf3-719b40499d6f",
      "type" : "VCENTER"
    } ]
  } ]
}

2.21.3. Get a Bundle

Prerequisites
  1. The following data is required:

    • ID of the Bundle

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles/630e39b1-cccc-411b-bdc1-7f473527da84' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/bundles/630e39b1-cccc-411b-bdc1-7f473527da84 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: 997

{
  "id" : "9bc9760f-847d-4a90-ae8c-a885e9cabaf6",
  "type" : "VMWARE_SOFTWARE",
  "description" : "PSC-VC -67U2-Update bundle ( 11726888 ==> 13010631)",
  "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" : "PSC Update Bundle",
    "vendor" : "VMware",
    "releasedDate" : "2019-05-10T10:29:10.645Z",
    "toVersion" : "6.7.0-13010631",
    "fromVersion" : "6.7.0-11726888",
    "imageType" : "PATCH",
    "id" : "690cbe9e-241b-4086-bbf3-719b40499d6f",
    "type" : "PSC"
  }, {
    "description" : "VCENTER Update Bundle",
    "vendor" : "VMware",
    "releasedDate" : "2019-05-10T10:29:10.645Z",
    "toVersion" : "6.7.0-13010631",
    "fromVersion" : "6.7.0-11726888",
    "imageType" : "PATCH",
    "id" : "690cbe9e-241b-4086-bbf3-719b40499d6f",
    "type" : "VCENTER"
  } ]
}

2.21.4. Update Bundle for Downloading

Online:

Tip
Refer to: Update Depot Settings to configure My VMware and Dell EMC Support Account in SDDC Manager.
Prerequisites
  1. The following data is required

    • ID of the bundle to be downloaded.

Steps
  1. Invoke the API. This API returns a task which can be polled and monitored.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/bundles/630e39b1-cccc-411b-bdc1-7f473527da84' -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/630e39b1-cccc-411b-bdc1-7f473527da84 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/8c32cbb0-d6b0-4b5e-aee4-553cc09d5278
Content-Length: 370

{
  "id" : "8c32cbb0-d6b0-4b5e-aee4-553cc09d5278",
  "name" : "Download BUNDLE - PSC:6.7.0-13010631 VCENTER:6.7.0-13010631",
  "type" : "BUNDLE_DOWNLOAD",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:45.762Z",
  "resources" : [ {
    "resourceId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "type" : "BUNDLE"
  } ],
  "isCancellable" : false
}
  1. 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.22. Personality

2.22.1. Upload a Personality with RAW mode.

Used when the vSphere cluster image/personality is to be exported to LCM from non VCF deployed vCenter.

Prerequisites

The following data is required:

  • vSphere exported software spec json file path

  • vSphere exported cluster settings json file path

  • vSphere exported cluster image zip file path

  • vSphere exported cluster image iso file path

Tip
Refer to: PersonalityUploadSpec.
Steps
  1. Invoke the API. This API returns a task which can be polled and monitored.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/personalities' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "uploadMode" : "RAW",
  "uploadSpecRawMode" : {
    "personalityInfoJSONFilePath" : "/home/vcf/personality/info.json",
    "personalityJSONFilePath" : "/home/vcf/personality/spec.json",
    "personalityZIPFilePath" : "/home/vcf/personality/offline.zip",
    "personalityISOFilePath" : "/home/vcf/personality/bundle.iso"
  },
  "name" : "Sample Raw Personality"
}'

HTTP Request

POST /v1/personalities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 366
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "uploadMode" : "RAW",
  "uploadSpecRawMode" : {
    "personalityInfoJSONFilePath" : "/home/vcf/personality/info.json",
    "personalityJSONFilePath" : "/home/vcf/personality/spec.json",
    "personalityZIPFilePath" : "/home/vcf/personality/offline.zip",
    "personalityISOFilePath" : "/home/vcf/personality/bundle.iso"
  },
  "name" : "Sample Raw Personality"
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/8e29bcc3-b6ef-4488-ba70-aa01f6e16415
Content-Length: 245

{
  "id" : "8e29bcc3-b6ef-4488-ba70-aa01f6e16415",
  "name" : "PERSONALITY_UPLOAD",
  "type" : "PERSONALITY_UPLOAD",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:45.523Z",
  "resources" : [ ],
  "isCancellable" : false
}
  1. 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.22.2. Upload a Personality with REFERRED mode.

Used when the vSphere cluster image/personality is to be exported to LCM from VCF deployed vCenter.

Prerequisites

The following data is required:

  • vCenter Id

  • Cluster Id

  • Name of the personality

Tip
Refer to: PersonalityUploadSpec.
Steps
  1. Invoke the API. This API returns a task which can be polled and monitored.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/personalities' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....' \
    -d '{
  "uploadMode" : "REFERRED",
  "uploadSpecReferredMode" : {
    "vCenterId" : "1578360b-095d-42e7-bddb-71eba84cfcf2",
    "clusterId" : "a6a04e1f-c8ae-44b8-93b9-1b78fe01eebb"
  },
  "name" : "vSphere7.0-Dell-SystemAdmin"
}'

HTTP Request

POST /v1/personalities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 224
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "uploadMode" : "REFERRED",
  "uploadSpecReferredMode" : {
    "vCenterId" : "1578360b-095d-42e7-bddb-71eba84cfcf2",
    "clusterId" : "a6a04e1f-c8ae-44b8-93b9-1b78fe01eebb"
  },
  "name" : "vSphere7.0-Dell-SystemAdmin"
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/8e29bcc3-b6ef-4488-ba70-aa01f6e16415
Content-Length: 245

{
  "id" : "8e29bcc3-b6ef-4488-ba70-aa01f6e16415",
  "name" : "PERSONALITY_UPLOAD",
  "type" : "PERSONALITY_UPLOAD",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:45.967Z",
  "resources" : [ ],
  "isCancellable" : false
}
  1. 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.22.3. Get a cluster image/personality by name

Prerequisites
  1. The following data is required:

    • Name of the cluster image

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/personalities?personalityName=esx-personality' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/personalities?personalityName=esx-personality 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: 865

{
  "version" : "1",
  "personalityId" : "bbd38966-8537-46f1-9a54-06fbfe7079c6",
  "personalityName" : "test-display-name",
  "description" : "test-desc",
  "createdBy" : "USER",
  "imageChecksum" : "test-checksum",
  "displayName" : "test-display-name",
  "releaseDate" : 1601404664400,
  "tags" : [ ],
  "vsphereExportedZipPath" : "https://sddc-manager.vrack.vsphere.local/vmware/vcf/personalities/personality/bbd38966-8537-46f1-9a54-06fbfe7079c6/pers.zip",
  "vsphereExportedIsoPath" : "https://sddc-manager.vrack.vsphere.local/vmware/vcf/personalities/personality/bbd38966-8537-46f1-9a54-06fbfe7079c6/pers.iso",
  "vsphereExportedJsonPath" : "https://sddc-manager.vrack.vsphere.local/vmware/vcf/personalities/personality/bbd38966-8537-46f1-9a54-06fbfe7079c6/pers.json",
  "softwareInfo" : {
    "baseImage" : {
      "version" : "7.0.0-0.0.30340198"
    }
  }
}

2.22.4. Get a cluster image/personality by Id

Prerequisites
  1. The following data is required:

    • Id of the cluster image

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/personalities/20aeec11-6ccc-4dba-b542-0d7fa86a25a7' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/personalities/20aeec11-6ccc-4dba-b542-0d7fa86a25a7 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: 865

{
  "version" : "1",
  "personalityId" : "bbd38966-8537-46f1-9a54-06fbfe7079c6",
  "personalityName" : "test-display-name",
  "description" : "test-desc",
  "createdBy" : "USER",
  "imageChecksum" : "test-checksum",
  "displayName" : "test-display-name",
  "releaseDate" : 1601404665685,
  "tags" : [ ],
  "vsphereExportedZipPath" : "https://sddc-manager.vrack.vsphere.local/vmware/vcf/personalities/personality/bbd38966-8537-46f1-9a54-06fbfe7079c6/pers.zip",
  "vsphereExportedIsoPath" : "https://sddc-manager.vrack.vsphere.local/vmware/vcf/personalities/personality/bbd38966-8537-46f1-9a54-06fbfe7079c6/pers.iso",
  "vsphereExportedJsonPath" : "https://sddc-manager.vrack.vsphere.local/vmware/vcf/personalities/personality/bbd38966-8537-46f1-9a54-06fbfe7079c6/pers.json",
  "softwareInfo" : {
    "baseImage" : {
      "version" : "7.0.0-0.0.30340198"
    }
  }
}

2.22.5. Get all the Personalities/cluster images by base version

  • Get the Personalities API is used to get all the personalities by the base version.
    Similarly the api can be used for filtering based on the other Personality attributes such as addOnName,
    addOnVendorName, componentName and componentVendorNames.

Prerequisites
  1. The following data is required:

    • Base Version of the Personality

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/personalities?baseOSVersion=6.7.0-15160138' -i -X GET \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/personalities?baseOSVersion=6.7.0-15160138 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: 22

{
  "elements" : [ ]
}

2.23. Manifests

2.23.1. Get latest supported LCM manifest

  • Get manifest API is used to get the latest supported LCM manifest

Steps
  1. 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: 729

{
  "version" : 1,
  "sequenceNumber" : 2,
  "creationTime" : "2020-09-29T18:37:46.393Z",
  "publishedDate" : "2020-09-29T18:37:46.393Z",
  "releases" : [ {
    "product" : "vcf",
    "version" : "3.0.0",
    "description" : "VMware Cloud Foundation 3.0.0 Release",
    "releaseDate" : "2018-09-20T07:00:00.000Z",
    "bom" : [ {
      "name" : "ESX_HOST",
      "version" : "6.5.0-9298722"
    }, {
      "name" : "NSX_MANAGER",
      "version" : "6.4.1-8599035"
    }, {
      "name" : "SDDC_MANAGER",
      "version" : "3.0.0"
    }, {
      "name" : "VCENTER",
      "version" : "6.5.0-9451637"
    }, {
      "name" : "VROPS",
      "version" : "6.7.0-8183617"
    } ],
    "updates" : [ ]
  } ],
  "recalledBundles" : [ ]
}

2.23.2. Save/Upload supported LCM manifest with updated sequence number to LCM.

  • Save/Load manifest API is used to save/upload supported LCM manifest with updated sequence number to LCM.

Prerequisites

The following data is required:

  • Manifest Version

  • Sequence Number

  • Creation time of the manifest file

  • Collection of Releases till date

Tip
Refer to: Manifest.
Steps
  1. 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" : "2020-09-29T18:37:43.652Z",
  "publishedDate" : "2020-09-29T18:37:43.652Z",
  "releases" : [ {
    "product" : "vcf",
    "version" : "3.0.0",
    "description" : "VMware Cloud Foundation 3.0.0 Release",
    "releaseDate" : "2018-09-20T07:00:00Z",
    "bom" : [ {
      "name" : "ESX_HOST",
      "version" : "6.5.0-9298722"
    }, {
      "name" : "NSX_MANAGER",
      "version" : "6.4.1-8599035"
    }, {
      "name" : "SDDC_MANAGER",
      "version" : "3.0.0"
    }, {
      "name" : "VCENTER",
      "version" : "6.5.0-9451637"
    }, {
      "name" : "VROPS",
      "version" : "6.7.0-8183617"
    } ],
    "updates" : [ ],
    "patchBundles" : [ ]
  } ],
  "recalledBundles" : [ ]
}'

HTTP Request

POST /v1/manifests HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 751
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "version" : 1,
  "sequenceNumber" : 2,
  "creationTime" : "2020-09-29T18:37:43.652Z",
  "publishedDate" : "2020-09-29T18:37:43.652Z",
  "releases" : [ {
    "product" : "vcf",
    "version" : "3.0.0",
    "description" : "VMware Cloud Foundation 3.0.0 Release",
    "releaseDate" : "2018-09-20T07:00:00Z",
    "bom" : [ {
      "name" : "ESX_HOST",
      "version" : "6.5.0-9298722"
    }, {
      "name" : "NSX_MANAGER",
      "version" : "6.4.1-8599035"
    }, {
      "name" : "SDDC_MANAGER",
      "version" : "3.0.0"
    }, {
      "name" : "VCENTER",
      "version" : "6.5.0-9451637"
    }, {
      "name" : "VROPS",
      "version" : "6.7.0-8183617"
    } ],
    "updates" : [ ],
    "patchBundles" : [ ]
  } ],
  "recalledBundles" : [ ]
}

HTTP Response

HTTP/1.1 202 Accepted

2.24. Upgradables

2.24.1. Get the Upgradables

Get the Upgradables API 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.

Note
The Get the Upgradables DOES NOT provide the unassigned hosts which can be upgraded. Refer to: Unassigned Host Upgrade.
Steps
  1. 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: 381

{
  "elements" : [ {
    "bundleId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "bundleType" : "SDDC_MANAGER",
    "resource" : {
      "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
      "type" : "DOMAIN"
    },
    "softwareComponents" : [ {
      "id" : "de9ff5d0-2813-47d0-b754-e53bae02841d",
      "type" : "SDDC_MANAGER"
    } ],
    "status" : "AVAILABLE"
  } ]
}

2.25. Version Aliases

2.25.1. Get Version Aliases

Steps
  1. 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.25.2. Update Version Aliases

Update Version Alias Configurations
* Update Version Alias Configurations API is used to update multiple version alias configurations.

Prerequisites
  1. The following data is required

    • Bundle component type

    • One or more version aliases

Steps
  1. 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 API is used to update a specific version alias configuration.

Prerequisites
  1. The following data is required

    • Bundle component type

    • Version

    • Alias specification

Tip
Refer to: AliasSpec
Steps
  1. 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.25.3. Delete Version Aliases

Delete Version Aliases
* Delete Version Alias Configuration API is used to delete version alias configurations by bundle component type, version and alias version.

Prerequisites
  1. The following data is required

    • Bundle component type

    • Bundle component version

    • One or more alias versions to be removed

Steps
  1. 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 API is used to delete a version alias configuration by bundle component type and version.

Prerequisites
  1. The following data is required

    • Bundle component type

    • Bundle component version

Steps
  1. 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 API is used to delete a version alias configuration by bundle component type.

Prerequisites
  1. The following data is required

    • Bundle component type

Steps
  1. 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.26. Upgrades

2.26.1. Perform Upgrade

Perform Upgrade API 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.
  1. Download the required bundle.

  2. Execute Get the Upgradables API to retrieve the list of upgradables (bundle and resource detail) in the system.

  3. Execute Prechecks API to perform required system level health checks.

  4. Perform upgrade and monitor the upgrade progress.

Prerequisites

The following data is required:

  • 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.

Tip
Refer to: UpgradeSpec and ResourceUpgradeSpec.
Steps
  1. 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" : "630e39b1-cccc-411b-bdc1-7f473527da84",
  "resourceType" : "DOMAIN",
  "resourceUpgradeSpecs" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "scheduledTimestamp" : "2020-09-29T18:37:43.898Z",
    "upgradeNow" : false
  } ]
}'

HTTP Request

POST /v1/upgrades HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 263
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "bundleId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
  "resourceType" : "DOMAIN",
  "resourceUpgradeSpecs" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "scheduledTimestamp" : "2020-09-29T18:37:43.898Z",
    "upgradeNow" : false
  } ]
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/25047919-70d0-424a-ac65-b26444ec922c
Content-Length: 478

{
  "id" : "25047919-70d0-424a-ac65-b26444ec922c",
  "name" : "Upgrade DOMAIN - [acme-domain] using BUNDLE - PSC:6.7.0-13010631 VCENTER:6.7.0-13010631",
  "type" : "UPGRADE",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:43.898Z",
  "resources" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "type" : "DOMAIN"
  }, {
    "resourceId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "type" : "BUNDLE"
  } ],
  "isCancellable" : false
}
  1. 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.
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

The following data is required:

  • 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.

Tip
Refer to: UpgradeSpec and ResourceUpgradeSpec.
Steps
  1. 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" : "630e39b1-cccc-411b-bdc1-7f473527da84",
  "resourceType" : "CLUSTER",
  "resourceUpgradeSpecs" : [ {
    "resourceId" : "11f90f7d-68c1-4815-973a-47f9f3697fac",
    "scheduledTimestamp" : "2020-09-29T19:37:46.823Z",
    "upgradeNow" : false
  } ]
}'

HTTP Request

POST /v1/upgrades HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 264
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "bundleId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
  "resourceType" : "CLUSTER",
  "resourceUpgradeSpecs" : [ {
    "resourceId" : "11f90f7d-68c1-4815-973a-47f9f3697fac",
    "scheduledTimestamp" : "2020-09-29T19:37:46.823Z",
    "upgradeNow" : false
  } ]
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/25047919-70d0-424a-ac65-b26444ec922c
Content-Length: 456

{
  "id" : "25047919-70d0-424a-ac65-b26444ec922c",
  "name" : "Upgrade DOMAIN - [acme-domain] using BUNDLE - HOST:6.7.0-13006603",
  "type" : "UPGRADE",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:46.823Z",
  "resources" : [ {
    "resourceId" : "0caf9c8d-663d-4b35-8864-f08f78fc34b3",
    "type" : "DOMAIN"
  }, {
    "resourceId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "type" : "BUNDLE"
  } ],
  "isCancellable" : false
}
  1. 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.
Unassigned Host Upgrade

The Get the Upgradables DOES NOT provide the unassigned hosts which can be upgraded. These unassigned host details(current version, host ID) needs to be queried using Get the Hosts and Get the Clusters API’s.

Prerequisites

The following data is required:

  • Resource Type. Ex: UNASSIGNED_HOST.

  • One or more Resource upgrade specifications.

  • Each Resource upgrade specification should contain.

    • Resource ID. Ex: UnAssigned Host ID.

    • Upgrade scheduled time or Upgrade now option.

    • Flag denoting whether the VM’s should be shutdown.

    • The version to which the Host should be upgraded to.

Tip
Refer to: UpgradeSpec and ResourceUpgradeSpec.
Steps
  1. 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" : "630e39b1-cccc-411b-bdc1-7f473527da84",
  "resourceType" : "UNASSIGNED_HOST",
  "resourceUpgradeSpecs" : [ {
    "resourceId" : "1ec172ce-4345-48e1-8ba2-7865b99556a2",
    "shutdownVms" : true,
    "toVersion" : "6.7.0-13006603",
    "upgradeNow" : true
  } ]
}'

HTTP Request

POST /v1/upgrades HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 278
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "bundleId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
  "resourceType" : "UNASSIGNED_HOST",
  "resourceUpgradeSpecs" : [ {
    "resourceId" : "1ec172ce-4345-48e1-8ba2-7865b99556a2",
    "shutdownVms" : true,
    "toVersion" : "6.7.0-13006603",
    "upgradeNow" : true
  } ]
}

HTTP Response

HTTP/1.1 202 Accepted
Content-Type: application/json
Location: /v1/tasks/5e276346-3bdc-442f-a744-73835e272c9d
Content-Length: 451

{
  "id" : "5e276346-3bdc-442f-a744-73835e272c9d",
  "name" : "Upgrade HOST - [10.0.0.100] using BUNDLE - HOST:6.7.0-13006603",
  "type" : "UPGRADE",
  "status" : "IN_PROGRESS",
  "creationTimestamp" : "2020-09-29T18:37:45.253Z",
  "resources" : [ {
    "resourceId" : "1ec172ce-4345-48e1-8ba2-7865b99556a2",
    "type" : "HOST"
  }, {
    "resourceId" : "630e39b1-cccc-411b-bdc1-7f473527da84",
    "type" : "BUNDLE"
  } ],
  "isCancellable" : false
}
  1. 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.27. Credentials

2.27.1. Get the Credentials

This API is used to fetch all credentials known to the system.

Prerequisites
  1. The following data is required

    • 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
  1. 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" : "07495b6d-185a-4a27-a579-73a825dbeffb",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "789612e9-5bf7-42be-a032-80e3242d2798",
      "resourceName" : "sfo01-m01-esx01.rainpole.io",
      "resourceIp" : "10.0.0.100",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
      "resourceName" : "sfo01-m01-esx02.rainpole.io",
      "resourceIp" : "10.0.0.101",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "79369ec6-619f-43fa-9a55-ecffae45257d",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "01dca4ec-7782-460b-ba15-30d563aaa276",
      "resourceName" : "sfo01-m01-esx03.rainpole.io",
      "resourceIp" : "10.0.0.102",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "9ec73feb-414e-4f3c-8881-3ecf326821a2",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "f65299e3-8476-45d0-ab2c-bad18f827fdd",
      "resourceName" : "sfo01-m01-esx04.rainpole.io",
      "resourceIp" : "10.0.0.103",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "b3b8b14d-f955-47d2-8078-7f921006bbf9",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "f519eacb-90fd-4c65-9bc7-65258508db89",
      "resourceName" : "sfo01-m01-vc01.rainpole.io",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "VCENTER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "7109273f-16e7-4d66-bbd2-73dd2452cdac",
    "credentialType" : "SSO",
    "accountType" : "USER",
    "username" : "administrator@vsphere.local",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "dc1fb5d1-15a5-4650-9154-46cc7c01415e",
      "resourceName" : "sfo01-m01-vc01.rainpole.io",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "PSC",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "ebfefd3b-c6ad-4eea-945e-ea2ba256eef4",
    "credentialType" : "SSO",
    "accountType" : "SERVICE",
    "username" : "svc-vcf-vcenter@vsphere.local",
    "creationTimestamp" : "2020-09-29T18:33:38.235Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.235Z",
    "resource" : {
      "resourceId" : "d19c807b-5420-410e-a2cd-ad70d6accb6d",
      "resourceName" : "sfo01m01vcenter01.sfo01.rainpole.local",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "VCENTER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "8ddc8735-d273-42cb-9b57-c764871d302f",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "341195be-9138-48f0-8d35-bf14f59288e4",
      "resourceName" : "sfo01-m01-nsx01.rainpole.io",
      "resourceIp" : "10.0.0.9",
      "resourceType" : "NSXT_MANAGER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "471e592c-7d78-49e2-a17b-ceb5e7408f4c",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "0d25c183-fd45-406f-acbf-7b3a6cdfd151",
      "resourceName" : "sfo01-m01-nsx01.rainpole.io",
      "resourceIp" : "10.0.0.9",
      "resourceType" : "NSXT_MANAGER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "c6398a41-c088-460f-8fff-0aa8519aa8e2",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "55be451a-9769-4074-ab09-4e9bc0403d68",
      "resourceName" : "sfo-vrli01.rainpole.io",
      "resourceIp" : "10.0.0.15",
      "resourceType" : "VRLI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "de6f4447-d512-4451-8799-d24de9f4402d",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "0631a017-6b67-4257-b776-dc562bb86933",
      "resourceName" : "sfo-vrli01b.rainpole.io",
      "resourceIp" : "10.0.0.16",
      "resourceType" : "VRLI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "7c1e4005-5e8a-4417-96d4-5be11be22664",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "dde96aeb-0a73-48ec-a8a2-753975ba2fa0",
      "resourceName" : "xreg-vrops01a.rainpole.io",
      "resourceIp" : "10.0.1.33",
      "resourceType" : "VROPS",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "e97120ef-a902-48dd-8075-e527efb143ce",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "a18fab97-c79e-48e5-a5c7-2b28cee84ee6",
      "resourceName" : "xreg-vrops01.rainpole.io",
      "resourceIp" : "10.0.0.31",
      "resourceType" : "VROPS",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "e2f415e3-aaa8-4a77-896b-2fed68adefe4",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "4da7e8d3-e43a-46c0-8f57-da1c958a52a1",
      "resourceName" : "xreg-vrslcm01.rainpole.io",
      "resourceIp" : "10.0.0.32",
      "resourceType" : "VRSLCM",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "d711f9fd-cb30-41b7-a59d-245058087d56",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin@localhost",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.236Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.236Z",
    "resource" : {
      "resourceId" : "06934633-21fc-4958-9176-1c2db6b4fca4",
      "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
  1. 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" : "f57fb501-0d15-490f-8748-6cc21ae49e0b",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.297Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.297Z",
    "resource" : {
      "resourceId" : "91b24526-de50-4744-badb-bf60b412fc53",
      "resourceName" : "sfo01-m01-esx01.rainpole.io",
      "resourceIp" : "10.0.0.100",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.297Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.297Z",
    "resource" : {
      "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
      "resourceName" : "sfo01-m01-esx02.rainpole.io",
      "resourceIp" : "10.0.0.101",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "8d6954ba-e554-4f5d-a579-3b724eb90b28",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.297Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.297Z",
    "resource" : {
      "resourceId" : "1a61d679-675e-45f2-a984-7238d3f5533c",
      "resourceName" : "sfo01-m01-esx03.rainpole.io",
      "resourceIp" : "10.0.0.102",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "1e3bad9a-874f-4582-816c-ac6465c712bb",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.297Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.297Z",
    "resource" : {
      "resourceId" : "cb7e54fc-17a4-457e-b716-9722a8ebb36d",
      "resourceName" : "sfo01-m01-esx04.rainpole.io",
      "resourceIp" : "10.0.0.103",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "413b7c63-13db-4ed6-86c5-c0c557792be8",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.297Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.297Z",
    "resource" : {
      "resourceId" : "b2cac92e-6833-4762-a1ae-68ee091046f6",
      "resourceName" : "sfo01-m01-vc01.rainpole.io",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "VCENTER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "e6d54052-f11a-478d-970d-3b49d48c60ab",
    "credentialType" : "SSO",
    "accountType" : "USER",
    "username" : "administrator@vsphere.local",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.297Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.297Z",
    "resource" : {
      "resourceId" : "3d12b049-fa8a-42b9-85d8-bee5bea73630",
      "resourceName" : "sfo01-m01-vc01.rainpole.io",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "PSC",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "52d79fed-f8cf-4548-b59d-29de7d7328ed",
    "credentialType" : "SSO",
    "accountType" : "SERVICE",
    "username" : "svc-vcf-vcenter@vsphere.local",
    "creationTimestamp" : "2020-09-29T18:33:36.298Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.298Z",
    "resource" : {
      "resourceId" : "f23355f8-b1a9-47cf-92b5-13f6427cad24",
      "resourceName" : "sfo01m01vcenter01.sfo01.rainpole.local",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "VCENTER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "890aac02-0dd5-4c4a-ae9f-2723b6a4a758",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.298Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.298Z",
    "resource" : {
      "resourceId" : "7b2249f0-0c68-40d6-b51b-fc7f27c25f12",
      "resourceName" : "sfo01-m01-nsx01.rainpole.io",
      "resourceIp" : "10.0.0.9",
      "resourceType" : "NSXT_MANAGER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "c2938b69-3964-4b0e-98d8-102c51116e8b",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.298Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.298Z",
    "resource" : {
      "resourceId" : "b2cb1e32-6ce8-4151-9e47-1c62c18ee412",
      "resourceName" : "sfo01-m01-nsx01.rainpole.io",
      "resourceIp" : "10.0.0.9",
      "resourceType" : "NSXT_MANAGER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "3c04b99b-cbe3-4d93-aef2-f776442f0219",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.298Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.298Z",
    "resource" : {
      "resourceId" : "a60485fa-823a-4fe6-8a47-375ec8f473ab",
      "resourceName" : "sfo-vrli01.rainpole.io",
      "resourceIp" : "10.0.0.15",
      "resourceType" : "VRLI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "10b6f0c5-e1e5-43d1-8a23-ef1fac8c6d9a",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.298Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.298Z",
    "resource" : {
      "resourceId" : "6ebb80bf-c337-4472-a11b-8c1bb7fa4924",
      "resourceName" : "sfo-vrli01b.rainpole.io",
      "resourceIp" : "10.0.0.16",
      "resourceType" : "VRLI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "625b4c78-999e-4b1d-a499-1681c30f8bf7",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.299Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.299Z",
    "resource" : {
      "resourceId" : "96fc3680-f3ba-458e-89b7-614ee5755b2a",
      "resourceName" : "xreg-vrops01a.rainpole.io",
      "resourceIp" : "10.0.1.33",
      "resourceType" : "VROPS",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "10aaf5df-20cb-4c24-be41-fe1b0024c133",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.299Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.299Z",
    "resource" : {
      "resourceId" : "49688258-09b5-4463-92b7-995ded0c71c9",
      "resourceName" : "xreg-vrops01.rainpole.io",
      "resourceIp" : "10.0.0.31",
      "resourceType" : "VROPS",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "fd6db34d-49f1-42cc-85c1-b7935293bf7c",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.299Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.299Z",
    "resource" : {
      "resourceId" : "893b7175-f1ba-4925-9d26-50404a665788",
      "resourceName" : "xreg-vrslcm01.rainpole.io",
      "resourceIp" : "10.0.0.32",
      "resourceType" : "VRSLCM",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "83612e00-9a4e-4b25-b462-e8bba6ff2b6c",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin@localhost",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.299Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.299Z",
    "resource" : {
      "resourceId" : "de9aebb4-ce5b-4811-8d4a-37165906028f",
      "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
  1. 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" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:38.102Z",
    "modificationTimestamp" : "2020-09-29T18:33:38.102Z",
    "resource" : {
      "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
      "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
  1. 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" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.833Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.833Z",
    "resource" : {
      "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
      "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
  1. 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" : "6cd5a6bc-c897-4b64-9a7e-c7c6c99c58a8",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.156Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.156Z",
    "resource" : {
      "resourceId" : "a49891ac-328d-4b2c-9625-5972be7489dd",
      "resourceName" : "sfo01-m01-esx01.rainpole.io",
      "resourceIp" : "10.0.0.100",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.156Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.156Z",
    "resource" : {
      "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
      "resourceName" : "sfo01-m01-esx02.rainpole.io",
      "resourceIp" : "10.0.0.101",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "01238ae4-a058-4a67-a9d5-518e8f1d6d78",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.156Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.156Z",
    "resource" : {
      "resourceId" : "07473802-c1dc-4f5a-8582-ec6cd4f0d00f",
      "resourceName" : "sfo01-m01-esx03.rainpole.io",
      "resourceIp" : "10.0.0.102",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "d0148c51-2d51-4183-b1f3-281e7188a885",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:36.156Z",
    "modificationTimestamp" : "2020-09-29T18:33:36.156Z",
    "resource" : {
      "resourceId" : "76286e68-1a29-490f-8996-468a8be306da",
      "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
  1. 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" : "4abdfe3d-0239-439c-bb55-e9e5319fa43e",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.943Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.943Z",
    "resource" : {
      "resourceId" : "8d077dd0-7c17-4ed3-a116-378f730b358c",
      "resourceName" : "sfo01-m01-esx01.rainpole.io",
      "resourceIp" : "10.0.0.100",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.943Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.943Z",
    "resource" : {
      "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
      "resourceName" : "sfo01-m01-esx02.rainpole.io",
      "resourceIp" : "10.0.0.101",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "4038a1c5-e215-47d6-8fe1-2bb84531ee3e",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.943Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.943Z",
    "resource" : {
      "resourceId" : "2e2b63aa-387c-4886-8377-2ca7c5cbb940",
      "resourceName" : "sfo01-m01-esx03.rainpole.io",
      "resourceIp" : "10.0.0.102",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "99482b74-ff51-4c5f-b330-950db6f0b90e",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.943Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.943Z",
    "resource" : {
      "resourceId" : "2b77be15-4d0e-4fc3-acab-53d9b3f6c62c",
      "resourceName" : "sfo01-m01-esx04.rainpole.io",
      "resourceIp" : "10.0.0.103",
      "resourceType" : "ESXI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "40aeebf8-a7bb-4d60-9f48-4fd759295bb0",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.943Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.943Z",
    "resource" : {
      "resourceId" : "75b6419b-6a20-4317-b880-7d8766541583",
      "resourceName" : "sfo01-m01-vc01.rainpole.io",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "VCENTER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "d9e73097-fbaa-4e3a-9d19-160a45f66938",
    "credentialType" : "SSO",
    "accountType" : "USER",
    "username" : "administrator@vsphere.local",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.950Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.950Z",
    "resource" : {
      "resourceId" : "b5ede36a-2c50-4bac-a271-f90c88ec254c",
      "resourceName" : "sfo01-m01-vc01.rainpole.io",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "PSC",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "2a4418b3-2409-4ea1-8870-f21f88d99cce",
    "credentialType" : "SSO",
    "accountType" : "SERVICE",
    "username" : "svc-vcf-vcenter@vsphere.local",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "5b2aa804-d1cb-478d-8b81-0f9800396620",
      "resourceName" : "sfo01m01vcenter01.sfo01.rainpole.local",
      "resourceIp" : "10.0.0.6",
      "resourceType" : "VCENTER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "633b800e-a6ec-43fe-b6ee-c0f7e18f2b4a",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "bf6e2d76-f190-4eef-9e7a-b1c829feaffe",
      "resourceName" : "sfo01-m01-nsx01.rainpole.io",
      "resourceIp" : "10.0.0.9",
      "resourceType" : "NSXT_MANAGER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "c96339da-ec24-4fb1-a8c8-3f226662c98b",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "f04cfe51-43c6-4092-8171-bb43cd6eee5c",
      "resourceName" : "sfo01-m01-nsx01.rainpole.io",
      "resourceIp" : "10.0.0.9",
      "resourceType" : "NSXT_MANAGER",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "8c930f5b-37af-4e32-8e3e-4bd0d860fda3",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "0f2a290e-a31e-428c-b206-2e4d4f825a2f",
      "resourceName" : "sfo-vrli01.rainpole.io",
      "resourceIp" : "10.0.0.15",
      "resourceType" : "VRLI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "97d1cc71-c199-4419-9f15-1ef8f7e13364",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "3b7063a0-99c6-4951-800a-063d931f7c2b",
      "resourceName" : "sfo-vrli01b.rainpole.io",
      "resourceIp" : "10.0.0.16",
      "resourceType" : "VRLI",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "2095ca68-92e5-46d1-93ad-6adadf0e29ee",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "31144480-f68f-4b3b-97c1-519b437abd79",
      "resourceName" : "xreg-vrops01a.rainpole.io",
      "resourceIp" : "10.0.1.33",
      "resourceType" : "VROPS",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "e9d4f08f-e982-4827-b07d-66c38236412b",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.951Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.951Z",
    "resource" : {
      "resourceId" : "0e02ff67-10b6-4728-ae31-5320388fae82",
      "resourceName" : "xreg-vrops01.rainpole.io",
      "resourceIp" : "10.0.0.31",
      "resourceType" : "VROPS",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "f8e44bc1-34d7-4115-898c-5eb16d504b0a",
    "credentialType" : "SSH",
    "accountType" : "USER",
    "username" : "root",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.952Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.952Z",
    "resource" : {
      "resourceId" : "0d74e1a7-3847-45b1-914d-cbb90dbfa35b",
      "resourceName" : "xreg-vrslcm01.rainpole.io",
      "resourceIp" : "10.0.0.32",
      "resourceType" : "VRSLCM",
      "domainName" : "MGMT"
    }
  }, {
    "id" : "36d9883b-8dff-4792-8e0d-193335802278",
    "credentialType" : "API",
    "accountType" : "USER",
    "username" : "admin@localhost",
    "password" : "VMwareInfra@1",
    "creationTimestamp" : "2020-09-29T18:33:37.952Z",
    "modificationTimestamp" : "2020-09-29T18:33:37.952Z",
    "resource" : {
      "resourceId" : "a3dc21e3-532d-4728-878d-e5af0da269fa",
      "resourceName" : "xreg-vrslcm01.rainpole.io",
      "resourceIp" : "10.0.0.32",
      "resourceType" : "VRSLCM",
      "domainName" : "MGMT"
    }
  } ],
  "pageMetadata" : {
    "pageNumber" : 0,
    "pageSize" : 15,
    "totalElements" : 15,
    "totalPages" : 1
  }
}

2.27.2. Get a Credential

This API is used to fetch credential for an ID.

Prerequisites
  1. The following data is required

    • ID of the credential

Steps
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/b23198f1-730f-4db8-bd9d-703ec1ac00a5' -i -X GET \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

GET /v1/credentials/b23198f1-730f-4db8-bd9d-703ec1ac00a5 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" : "b23198f1-730f-4db8-bd9d-703ec1ac00a5",
  "credentialType" : "SSH",
  "accountType" : "USER",
  "username" : "root",
  "password" : "VMwareInfra@1",
  "creationTimestamp" : "2020-09-29T18:33:37.715Z",
  "modificationTimestamp" : "2020-09-29T18:33:37.715Z",
  "resource" : {
    "resourceId" : "217411a6-fe59-4a99-a7bf-9830d58127ac",
    "resourceName" : "sfo01-m01-esx02.rainpole.io",
    "resourceIp" : "10.0.0.101",
    "resourceType" : "ESXI",
    "domainName" : "MGMT"
  }
}

2.27.3. Update the Passwords

This API is used to update passwords for list of resources by supplying new passwords.

Prerequisites
  1. 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.
  1. 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
  1. 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/8f758f32-ea6d-4e11-b87a-cf16ed447a43
Content-Type: application/json
Content-Length: 100

{
  "id" : "8f758f32-ea6d-4e11-b87a-cf16ed447a43",
  "name" : "UPDATE",
  "status" : "IN_PROGRESS"
}
  1. Poll the status of the task using the task API with the ID from the response of the previous API.

  1. Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip
Refer 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.

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.27.4. Rotate the Passwords

This API is used to rotate passwords for list of resources using system generated passwords.

Prerequisites
  1. 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.
Steps
  1. 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/0f0bab37-ed7f-4a0c-938c-4c2830cd228a
Content-Type: application/json
Content-Length: 100

{
  "id" : "0f0bab37-ed7f-4a0c-938c-4c2830cd228a",
  "name" : "ROTATE",
  "status" : "IN_PROGRESS"
}
  1. Poll the status of the task using the task API with the ID from the response of the previous API.

  1. Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip
Refer 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.

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.27.5. Retry the Update Passwords Task

This API is used to retry a failed update passwords task.

Prerequisites
  1. 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.
  1. New password must be in compliance with the password policies.

Tip
Refer to: Password Compliance Guide.
Steps
  1. Trigger the task using the valid input specification.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/37c3f868-2e96-4a80-b15f-862f8284aa0f' -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/37c3f868-2e96-4a80-b15f-862f8284aa0f 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/37c3f868-2e96-4a80-b15f-862f8284aa0f
Content-Type: application/json
Content-Length: 100

{
  "id" : "37c3f868-2e96-4a80-b15f-862f8284aa0f",
  "name" : "UPDATE",
  "status" : "IN_PROGRESS"
}
  1. Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

  • 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.

  • The failed task can be cancelled.

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.27.6. Retry the Rotate Passwords Task

This API is used to retry a failed rotate passwords task.

Prerequisites
  1. The following data is required

    • 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
  1. Trigger the task using the valid input specification.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/6b4340b5-cef0-4f2b-89de-e4d775648b2f' -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/6b4340b5-cef0-4f2b-89de-e4d775648b2f 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/6b4340b5-cef0-4f2b-89de-e4d775648b2f
Content-Type: application/json
Content-Length: 100

{
  "id" : "6b4340b5-cef0-4f2b-89de-e4d775648b2f",
  "name" : "ROTATE",
  "status" : "IN_PROGRESS"
}
  1. Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

  • 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.

  • The failed task can be cancelled.

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.27.7. Cancel the Update/Rotate Passwords Task

  • This API is used to cancel a failed update or rotate passwords task.

Prerequisites
  1. The following data is required

    • 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
  1. Invoke the API.

cURL Request

$ curl 'https://sfo-vcf01.rainpole.io/v1/credentials/tasks/6b1bfb66-8c44-4a2f-a4b1-a32d62d54dff' -i -X DELETE \
    -H 'Authorization: Bearer etYWRta....'

HTTP Request

DELETE /v1/credentials/tasks/6b1bfb66-8c44-4a2f-a4b1-a32d62d54dff 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" : "6b1bfb66-8c44-4a2f-a4b1-a32d62d54dff",
  "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.27.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.
Steps
  1. 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: 1579

{
  "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" : "vracafe3.rainpole.io",
      "name" : "Password rotate for resource : vracafe3.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" : "vracafe2.rainpole.io",
      "name" : "Password rotate for resource : vracafe2.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" : "vracafe1.rainpole.io",
      "name" : "Password rotate for resource : vracafe1.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.27.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
  1. The following data is required

    • ID of the credentials task

Steps
  1. 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: 1476

{
  "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" : "vracafe3.rainpole.io",
    "name" : "Password rotate for resource : vracafe3.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" : "vracafe2.rainpole.io",
    "name" : "Password rotate for resource : vracafe2.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" : "vracafe1.rainpole.io",
    "name" : "Password rotate for resource : vracafe1.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.27.10. Get the Resource Credentials for Credentials Task

This API is used to fetch resource credentials for a credentials task ID.

Prerequisites
  1. The following data is required

    • ID of the credentials task

Tip
Refer to: Get the Credentials Tasks to get the ID of credentials tasks.
Steps
  1. 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: 569

[ {
  "resourceName" : "vracafe3.rainpole.io",
  "resourceType" : "VRA",
  "credentials" : [ {
    "credentialType" : "SSH",
    "username" : "root",
    "password" : "EvoSDDC2020!"
  } ]
}, {
  "resourceName" : "vracafe2.rainpole.io",
  "resourceType" : "VRA",
  "credentials" : [ {
    "credentialType" : "SSH",
    "username" : "root",
    "password" : "EvoSDDC2018!"
  } ]
}, {
  "resourceName" : "vracafe1.rainpole.io",
  "resourceType" : "VRA",
  "credentials" : [ {
    "credentialType" : "SSH",
    "username" : "root",
    "password" : "EvoSDDC2017!"
  } ]
} ]

2.27.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
  1. The following data is required

    • ID of the credentials task

    • ID of the credentials subtask

Steps
  1. 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: 658

{
  "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" : "vracafe3.rainpole.io",
    "name" : "Password rotate for resource : vracafe3.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.27.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
  1. The following data is required

    • 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
  1. 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/d8e1ce2c-2135-4487-9529-54d2e3ab446e
Content-Type: application/json
Content-Length: 103

{
  "id" : "d8e1ce2c-2135-4487-9529-54d2e3ab446e",
  "name" : "REMEDIATE",
  "status" : "IN_PROGRESS"
}
  1. Poll the status of the task using the task API with the ID from the response of the previous API.

  1. Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip
Refer 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.

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.28. Certificates

2.28.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
  1. VCF environment.

Steps
  1. 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: 383

{
  "elements" : [ {
    "id" : "OpenSSL",
    "commonName" : "test.openssl.eng.vmware.com",
    "country" : "India",
    "state" : "Karnataka",
    "locality" : "Bengaluru",
    "organization" : "VMware",
    "organizationUnit" : "ISBU"
  }, {
    "id" : "Microsoft",
    "username" : "Admin",
    "serverUrl" : "https://192.168.110.200/certsrv",
    "templateName" : "Vcms"
  } ]
}
  1. 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://192.168.110.200/certsrv",
    "templateName" : "Vcms"
  }
}'

HTTP Request

PUT /v1/certificate-authorities HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 188
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "microsoftCertificateAuthoritySpec" : {
    "username" : "Admin",
    "secret" : "VMwareInfra@1",
    "serverUrl" : "https://192.168.110.200/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" : "India",
    "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: 242
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "openSSLCertificateAuthoritySpec" : {
    "commonName" : "test.openssl.eng.vmware.com",
    "country" : "India",
    "state" : "Karnataka",
    "locality" : "Bengaluru",
    "organization" : "VMware",
    "organizationUnit" : "ISBU"
  }
}

HTTP Response

HTTP/1.1 200 OK
  1. 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
  1. 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: 126

{
  "id" : "Microsoft",
  "username" : "Admin",
  "serverUrl" : "https://192.168.110.200/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: 206

{
  "id" : "OpenSSL",
  "commonName" : "test.openssl.eng.vmware.com",
  "country" : "India",
  "state" : "Karnataka",
  "locality" : "Bengaluru",
  "organization" : "VMware",
  "organizationUnit" : "ISBU"
}
  1. After the successful certificate authority configuration, generate CSR by invoking the API

Tip
If "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" : "India",
    "state" : "Karnataka",
    "locality" : "Bengaluru",
    "organization" : "VMware",
    "organizationUnit" : "ISBU",
    "email" : "admin@vmware.com",
    "keySize" : "2048",
    "keyAlgorithm" : "RSA"
  },
  "resources" : [ {
    "fqdn" : "sfo-m01-nsx01.rainpole.io",
    "type" : "NSX_MANAGER"
  } ]
}'

HTTP Request

PUT /v1/domains/MGMT/csrs HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 360
Host: sfo-vcf01.rainpole.io
Authorization: Bearer etYWRta....

{
  "csrGenerationSpec" : {
    "country" : "India",
    "state" : "Karnataka",
    "locality" : "Bengaluru",
    "organization" : "VMware",
    "organizationUnit" : "ISBU",
    "email" : "admin@vmware.com",
    "keySize" : "2048",
    "keyAlgorithm" : "RSA"
  },
  "resources" : [ {
    "fqdn" : "sfo-m01-nsx01.rainpole.io",
    "type" : "NSX_MANAGER"
  } ]
}

HTTP Response

HTTP/1.1 202 Accepted
Location: /v1/tasks/b69d0c57-1c8b-43dd-9efb-05fac0196cfb
Content-Type: application/json
Content-Length: 79

{
  "id" : "b69d0c57-1c8b-43dd-9efb-05fac0196cfb",
  "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.

Tip
Refer 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.

  1. 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"
    }
  } ]
}
  1. 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/e43e9dd4-1759-42b0-a483-9696177599f0
Content-Type: application/json
Content-Length: 79

{
  "id" : "e43e9dd4-1759-42b0-a483-9696177599f0",
  "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
  • Poll the task until "status" is not "IN_PROGRESS" with the ID from the previous response.

Tip
Refer 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.

  1. 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/IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExIjAgBgNVBAoMGXBzYy0xLnZyYWNrLnZzcGhlcmUubG9jYWwxGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0xODA3MDIxNDE1NTJaFw0yODA2MjcxMjIyMzlaMIGwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMQ8wDQYDVQQKEwZWTXdhcmUxGzAZBgNVBAsTElZNd2FyZSBFbmdpbmVlcmluZzEqMCgGA1UEAxMhbG9hZC1iYWxhbmNlci52cmFjay52c3BoZXJlLmxvY2FsMR4wHAYJKoZIhvcNAQkBFg92bWNhQHZt