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 for the template.

The request can optionally specify a VDC compute policy for particular VMs in the vApp template. You can include a CaptureVmParams element for each VM for which you want to configure a VDC compute policy. In the CaptureVmParams element, you must specify the target VM in a Source element and the target VDC compute policy in a VdcComputePolicy element. Instantiating the template assigns the configured VDC compute policy to the newly created VMs in the instantiated vApp. By configuring VDC compute policies, you can restrict the VDCs in which users can instantiate the vApp template. For example, if you create oracle_vdc_compute_policy and publish it only to vdc1, when you configure this VDC compute policy in a vApp template and disable customization on instantiation, users cannot instantiate this template in VDCs other than vdc1. For information about VDC compute policies, see Managing VM-Host Affinity Rules.

If you want the new template to overwrite an existing template in the catalog, you can specify a TargetCatalogItem element 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.

Prerequisites

  • This operation requires the rights included in the predefined Catalog Author role or an equivalent set of rights.

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

Procedure

  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.
  4. POST the CaptureVAppParams element to the action/captureVApp link shown in Step 2.

Example: Capture a vApp

This request captures the vApp created in Compose a vApp and configures the VCD compute policy oracle_policy for two of the containing VMs. 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" />
   <CaptureVmParams>
         <Source 
      href="https://vcloud.example.com/api/vApp/vm-4" />
         <VdcComputePolicy
         href="https://vcloud.example.com/cloudapi/vdcComputePolicies/74"
         name="oracle_policy" />
   </CaptureVmParams>
   <CaptureVmParams>
      <Source 
         href="https://vcloud.example.com/api/vApp/vm-5" />
      <VdcComputePolicy
         href="https://vcloud.example.com/cloudapi/vdcComputePolicies/74"
         name="oracle_policy" />
   </CaptureVmParams>
</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>