To create a new resource such as a VM, you can use the resources API to make a POST request with a project ID. The deployment creates a new resource without using a cloud template.
Prerequisites
- Verify that all general prerequisites have been satisfied. See Prerequisites for working with the Cloud Assembly APIs.
- Assign an API version variable for the Deployment API.
api_version_deployment='2020-08-25'
Note: The Deployment API and IaaS API have different API version values. You set the API version value for the IaaS API when you satisfied the general prerequisites. - Verify that you have the ID of the cloud account where you want to deploy the VM. See Adding Cloud Accounts.
- Verify that you know the cloud zone in your cloud account where you want the new VM to be deployed. See Create a Cloud Zone.
- Verify that you have the ID for a project that includes the cloud zone in your cloud account. See Add a Cloud Zone to Your Project.
- Verify that the flavor and image for the new VM exist in your cloud account.
- Verify that you know the resource type for the AWS machine, GCP machine, vSphere machine, or Azure machine that you plan to create. For a list of all resource types and request schema, see https://developer.vmware.com/apis/1090/vrealize-automation-cloud-resource-type-schema.
Procedure
Example: Create and deploy a VM
With a cloud account ID and cloud zone in the cloud account, create and deploy an AWS machine named cloud_machine_1 using the Cloud.AWS.EC2.Instance resource type.
Assign variables.
$ url='https://appliance.domain.com' $ api_version='2021-07-15' $ api_version_deployment='2020-08-25' $ cloud_account_id='14e6b70c-0e76-4c5e-bb61-e6d70a5b43ef' $ project_id='394a4ccb-22c6-4ef0-8c75-8b77efbefb51'
List all cloud zones.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $access_token" "$url/iaas/api/zones?apiVersion=$api_version" | jq "."
A snippet of the response shows the cloud account ID with the external region ID and cloud zone ID.
... "externalRegionId": "eu-west-1", "cloudAccountId": "14e6b70c-0e76-4c5e-bb61-e6d70a5b43ef", "name": "AWS / eu-west-1-changed", "description": "test description", "id": "f32a30fd-67ac-43e3-9512-60cf6ef7bee8" ...
Assign the external region ID variable.
$ external_region_id='eu-west-1'
Assign the cloud zone placement variable.
$ placement_name='/iaas/api/zone/f32a30fd-67ac-43e3-9512-60cf6ef7bee8'
To list the fabric images in your cloud account and zone, specify the cloud account ID and external region ID in the request.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $access_token" \ "$url/iaas/api/fabric-images/?apiVersion=$api_version&"\ '$filter'="(((externalRegionId eq '') or (externalRegionId eq '$external_region_id')) \ and ((cloudAccountId ne '*') or cloudAccountId eq '$cloud_account_id')))" | jq "."
Examine the response to find the image ID that you want.
... "externalRegionId": "eu-west-1", "isPrivate": false, "externalId": "ami-9a9012e9", ...
To list the fabric flavors in your cloud account and zone, specify the cloud account ID and external region ID in the request.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $access_token" \ "$url/iaas/api/fabric-flavors/?apiVersion=$api_version&"\ '$filter'="(((externalRegionId eq '') or (externalRegionId eq '$external_region_id')) \ and ((cloudAccountId ne '*') or cloudAccountId eq '$cloud_account_id')))" | jq "."
Examine the response to find the flavor ID that you want.
... { "id": "x1e.xlarge", "name": "x1e.xlarge", "cpuCount": 4, "memoryInMB": 124928, "storageType": "ssd", "dataDiskSizeInMB": 122880, "dataDiskMaxCount": 1, "networkType": "Up to 10 Gigabit" }, ...
Assign the resource type for the VM.
$ resource_type = 'Cloud.AWS.EC2.Instance'
To deploy the VM, assign variables for image and flavor.
$ image_name='ami-9a9012e9' $ flavor_name='x1e.xlarge'
Create and deploy the VM.
curl -X POST \ $url/deployment/api/resources?apiVersion=$api_version_deployment \ -H "Authorization: Bearer $access_token" \ -H "Content-Type: application/json" \ -d '{ "name":"cloud_machine_1", "projectId": "'$project_id'", "type":"'$resource_type'", "properties":{ "imageRef": "'$image_name", "flavor": "'$flavor_name", "placement": "'$placement_name'" }, }' | jq "."
The response shows the deployment ID.
{ "deploymentId": "fccd2081-fd44-44c8-878c-f962ef71969a", "projectId": "394a4ccb-22c6-4ef0-8c75-8b77efbefb51", "requestId": "1f8f2e4f-0b2e-448d-8439-f1a05b1e90c1", "resourceId": "9a510ccb-0543-47e8-a2f2-f1f65fcd0b0a" }
Assign the deployment ID variable.
$ deployment_id='fccd2081-fd44-44c8-878c-f962ef71969a'
Get the status of the deployment.
$ curl -X GET \ $url/deployment/api/deployments/$deployment_id?apiVersion=$api_version" -H "Authorization: Bearer $access_token" | jq "."
A snippet of the response shows the deployment status.
... ], "status": "CREATE_SUCCESSFUL" }