You can capture a vApp to create a vApp template in a catalog. Instantiating the resulting template recreates the vApp from which it was captured.

The captureVApp request creates a template based on the vApp referenced in the Source element of the CaptureVAppParams request body. The request specifies a new name and, optionally, a new description and storage profile for the template. If you want the new template to overwrite an existing template in the catalog, you can specify a TargetCatalogItem in the request. Otherwise, the new template is stored in a new catalog item.

If the vApp is deployed when you capture it, the template is created with the following properties.

Memory state of all virtual machines in the source vApp is preserved in the template.

Instantiating the template always creates a suspended vApp connected to an isolated network.

Note

If the template is instantiated in a VDC that is not backed by the provider VDC that backed the VDC in which the vApp was captured, memory state in the template is discarded on instantiation, and the vApp is created with the network connections defined in the template or instantiation parameters.

Verify that you are logged in to the vCloud API endpoint as a Virtual Infrastructure Administrator.

Verify that the target catalog does not have an external subscription.

1

Retrieve the XML representation of the catalog to which to add the vApp template that the capture creates.

Use a request like this one, where id is the identifier of the catalog:

GET https://vcloud.example.com/api/catalog/id
2

Examine the response to locate the Link element that contains the URL for capturing a vApp.

This element has a rel attribute value of add and a type attribute value of application/vnd.vmware.vcloud.captureVAppParams+xml, as shown here:

<Link
   rel="add"
   type="application/vnd.vmware.vcloud.captureVAppParams+xml"
   href="https://vcloud.example.com/api/catalog/5/action/captureVApp"/>
3

Create a CaptureVAppParams element that references the vApp to capture.

See Example: Capture a vApp.

4

POST the CaptureVAppParams element to the action/captureVApp link shown in Step 2.

This request captures the vApp created in Example: Compose a vApp. Because the request does not specify a TargetCatalogItem, a new catalog item is created for the new template.

Request:

POST https://vcloud.example.com/api/catalog/5/action/captureVApp
Content-Type: application/vnd.vmware.vcloud.captureVAppParams+xml
...
<?xml version="1.0" encoding="UTF-8"?>
<CaptureVAppParams
   xmlns="http://www.vmware.com/vcloud/v1.5"
   name="Example Corp’s CRM Appliance">
   <Description>Captured CRM Appliance</Description>
   <Source
      href="https://vcloud.example.com/api/vApp/vapp-33" />
</CaptureVAppParams>

The response is a sparsely populated VApp element in the target VDC. It contains a Link to the catalog specified in the request. When the Task embedded in the response is complete, the vApp has been captured and a vApp template created in the target catalog.

Response:

200 OK
Content-Type: application/vnd.vmware.vcloud.vAppTemplate+xml
...
<VAppTemplate
   xmlns="http://www.vmware.com/vcloud/v1.5"
   xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
   href="https://vcloud.example.com/api/vAppTemplate/vappTemplate-232">
   ...
   <Link
      rel="up"
      type="application/vnd.vmware.vcloud.catalog+xml"
      href="https://vcloud.example.com/api/catalog/5" />
      ...
   <Description>Captured CRM Appliance</Description>
   ...
   <Tasks>
      <Task
         ...
         operation="Capturing Virtual Application Template Example Corp’s CRM Appliance (232)"
         ... 
        </Task>
   </Tasks>
   ...
</VAppTemplate>