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