To initiate the OVF upload, a client makes a POST request to an action/upload link in the target catalog. The type of this link is application/vnd.vmware.vcloud.uploadVAppTemplateParams+xml. The request body is an UploadVAppTemplateParams element.

The first step in uploading an OVF package is to request VMware Cloud Director to create a catalog item in the target catalog and a corresponding vAppTemplate object to represent the template that will be constructed from the upload.

Prerequisites

Verify that the following are true:

  • You have an OVF package to upload.
  • You are logged in as a user who has permission to upload OVF packages and create vApp templates.
  • You know the URL of the target catalog that will receive the upload. Retrieve the XML representation of your organization to see a list of the catalogs that it contains.

Procedure

  1. Find the action/upload link for vApp templates in the target catalog.
    Retrieve the XML representation of the catalog using a request like the one shown in the request portion of Deployment Information in a VDC. The response contains an action/upload link, which has the following form:
    <Link
       rel="add"
       type="application/vnd.vmware.vcloud.uploadVAppTemplateParams+xml"
       href="https://vcloud.example.com/api/catalog/32/action/upload" />
  2. Create an UploadVAppTemplateParams element that specifies the parameters for the vApp template that this request creates.
    See the request portion of Initiating the Upload.
  3. (Optional) If the OVF package includes a manifest, include a manifestRequired="true" attribute in the UploadVAppTemplateParams element.
    Some OVF packages include a manifest document, which provides a checksum for each file in the package. When the UploadVAppTemplateParams element includes a manifestRequired="true" attribute, the set of File elements returned after you upload the OVF descriptor includes one for the manifest itself.
  4. Make an HTTP POST request to the upload link that you retrieved in Step 1, supplying the UploadVAppTemplateParams element in the request body.
    See the request portion of Initiating the Upload.
  5. Examine the response.
    The response, a CatalogITem element, contains an Entity element that contains a reference to the vApp template that will be constructed from the uploaded OVF. See the response portion of Initiating the Upload.

Results

The server creates a VAppTemplate object and a corresponding CatalogItem in the target catalog, and returns an XML representation of the CatalogItem. See the response portion of Initiating the Upload.

Example: Initiating the Upload

This example assumes an OVF package that has no manifest.

Request:
POST https://vcloud.example.com/api/catalog/32/action/upload
Content-Type: application/vnd.vmware.vcloud.uploadVAppTemplateParams+xml
...
<?xml version="1.0" encoding="UTF-8"?>
<UploadVAppTemplateParams
   name="Ubuntu Template"
   xmlns="http://www.vmware.com/vcloud/v1.5"
   xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1">
   <Description>Ubuntu vApp Template</Description>
</UploadVAppTemplateParams>
Response:
201 Created
Content-Type: application/vnd.vmware.vcloud.catalogItem+xml
...
<CatalogItem
   xmlns="http://www.vmware.com/vcloud/v1.5"
   name="Ubuntu Template"
   id="urn:vcloud:catalogitem:221"
   href="https://vcloud.example.com/api/catalogItem/221" ... >
  <Link
      rel="up"
      type="application/vnd.vmware.vcloud.catalog+xml"
      href="https://vcloud.example.com/api/catalog/32" />
   <Link
      rel="down"
      type="application/vnd.vmware.vcloud.metadata+xml"
      href="https://vcloud.example.com/api/catalogItem/221/metadata" />
   <Link
      rel="edit"
      type="application/vnd.vmware.vcloud.catalogItem+xml"
      href="https://vcloud.example.com/api/catalogItem/221" />
   <Link
      rel="remove"
      href="https://vcloud.example.com/api/catalogItem/221" />
   <Description>Approved template for public FTP sites</Description>
   <Entity
      href="https://vcloud.example.com/api/vAppTemplate/vappTemplate-111"
      type="application/vnd.vmware.vcloud.vAppTemplate+xml"
      name="Ubuntu vApp Template"/>
</CatalogItem>