This document specifies the requirements for creating an endpoint that is compatible with a client using version 1 of the VMware Content Subscription Protocol (VCSP). VMware Cloud Director™ catalogs use this protocol when synchronizing content from an external subscription.
Introduction
VMware Cloud Director™ enables organizations to create catalogs that acquire their content from a subscription to an external source. The external source can be an externally published catalog hosted on another instance of VMware Cloud Director or a Web site that hosts a VCSP endpoint.
Configuration parameters for VMware Cloud Director catalogs that have external subscriptions include a VCSP endpoint URL and, if the endpoint requires authentication, a user name and password. Users periodically synchronize to update catalog contents from the subscribed endpoint. You can request synchronization for an entire catalog, or for individual catalog items. The process is similar in both cases.
- The VCSP client makes a GET request to retrieve the endpoint descriptor. If the version in the descriptor matches the version of the catalog being synchronized, no content has changed at the endpoint, and no further action is required.
- If the version in the descriptor is greater than the version of the catalog, the client makes a GET request to retrieve the endpoint index file.
- To update the entire catalog, the client makes GET requests to retrieve all catalog items whose version at the endpoint is greater than their version in the catalog. To update an individual catalog item, the client makes a GET request to retrieve it only if its version number at the endpoint is greater than its version in the catalog.
The endpoint is a passive partner in this process. Its only responsibilities are to keep the version numbers up to date in the endpoint descriptor and endpoint index files, and to return the HTTP status codes and other responses expected by the VCSP client.
URLs
http://vcsp.example.com/vcsp/descriptor.json
Endpoint Descriptor
The endpoint descriptor is a file whose contents define the catalog available at the endpoint. The contents, which must be expressed in JavaScript Object Notation (media type application/json
) as defined by RFC4627, define a JSON object, and must specify values for the following key names.
- vcspVersion
- An integer that specifies the version of the VCSP protocol to which this endpoint conforms.
- version
- An integer that specifies the version of the catalog, as described in Version Numbers.
- id
- The object identifier, expressed in URN format. This value uniquely identifies the catalog, persists for the life of the catalog, and must never be reused.
- name
- The display name of the catalog. Must be a nonempty string.
- created
- Time and date when the endpoint was created.
- itemType
-
Must have value
vcsp.CatalogItem
. - itemsHref
-
A reference to the endpoint index file relative to the location of the endpoint descriptor. Replacing the final component of the endpoint URL with the value of the
itemsHref
key must create a valid URL. - capabilities
- A JSON object that describes the capabilities of this catalog. The object must define all of the following properties:
- metadata
- An array of catalog object metadata. See Metadata.
- maintenanceMessage
-
A string indicating that the endpoint is inaccessible because it is undergoing maintenance. For example:
"maintenanceMessage" : "This catalog is currently in maintenance mode"
If the endpoint descriptor includes this key, attempts by subscribers to synchronize with this endpoint fail and display the string.
The following example shows a typical endpoint descriptor.
{ "vcspVersion" : "1", "version" : "10", "id" : "urn:uuid:ccdd2c56-e54e-4883-bc0a-619baaca92a6", "name" : "published", "created" : "2012-09-14T22:17:50.807Z", "itemType" : "vcsp.CatalogItem", "itemsHref" : "items", "capabilities" : { "transferIn" : [ "httpGet" ], "transferOut" : [ "httpGet" ], "generateIds" : true } "metadata" : [ { "type" : "STRING", "domain" : "GENERAL", "key" : "key1", "value" : "value1", "visibility" : "READWRITE" }, { "type" : "STRING", "domain" : "SYSTEM", "key" : "key2", "value" : "value2", "visibility" : "READONLY" } ] }
Endpoint Index
The endpoint index is a file whose contents define the set of items available in the catalog. The contents, which must be expressed in JavaScript Object Notation (media type application/json
) as defined by RFC4627, define a JSON object, and must specify values for the following key names.
- itemType
-
Must be
vcsp.CatalogItem
. - items
-
An array of zero or more
item objects. Each
item object must specify values for the following key names.
- version
- An integer that specifies the version of the item, as described in Version Numbers.
- id
- The object identifier of the item, expressed in URN format. This value uniquely identifies the item, persists for the life of the item, and must never be reused.
- name
- The display name of the item. Must be a nonempty string.
- created
- Time and date when the item was created.
- type
-
Item type. Must have one of the following values:
vcsp.iso
if the item is an ISO image.-
vcsp.ovf
if the item is an OVF package.
- files
-
An array of
file objects that includes all the files that represent the
item. Each
file object is represented as an array with three elements:
- etag
- An integer representing the version of the file. The value of this key must be the same for each file in the array. When any file in this array gets updated, you must increment the value of the etag key for all files in the array.
- name
- The name of the file.
- hrefs
- An array of pathnames to the file. Must contain a single pathname to the file from the root of the endpoint, written as a URL fragment.
- properties
-
An array of additional properties of the
item. This array has a single member:
- selfHref
- A URL to the item descriptor for this item. See Item Descriptors.
- metadata
- An array of catalog item metadata. See Metadata.
- vms
-
If this item represents a vApp template, you must include an array representing the virtual machines referenced in the template.
- name
- The name of the virtual machine.
- metadata
- An array of virtual machine metadata. See Metadata.
- version
- An integer that specifies the version of the endpoint index, as described in Version Numbers.
The following example shows a typical endpoint index.
{ "itemType" : "vcsp.CatalogItem", "items" : [ { "version" : "1", "id" : "urn:uuid:6dfa4596-a7c5-4d62-9a84-c559968baa26", "name" : "vapp-demo", "created" : "2012-09-17T17:59:15.161Z", "type" : "vcsp.ovf", "files" : [ { "etag" : "37" "name" : "descriptor.ovf", "hrefs" : [ "/vcsp/item/6dfa4596-a7c5-4d62-9a84-c559968baa26/file/descriptor.ovf" ] }, { "name" : "descriptor.mf", "hrefs" : [ "/vcsp/item/6dfa4596-a7c5-4d62-9a84-c559968baa26/file/descriptor.mf" ] }, { "etag" : "37" "name" : "vm-d5349476-aae2-4b65-bc9a-28effdc213fb-disk-0.vmdk", "hrefs" : [ "/vcsp/item/6dfa4596-a7c5-4d62-9a84-c559968baa26/file/vm-d5349476-aae2-4b65-bc9a-28effdc213fb-disk-0.vmdk" ] } ], "properties" : { }, "selfHref" : "/vcsp/item/6dfa4596-a7c5-4d62-9a84-c559968baa26/item.json" }, { "version" : "2", "id" : "urn:uuid:b63c9bbe-3614-4153-82fd-d5f4916a1327", "name" : "template1", "created" : "2012-09-14T22:18:12.858Z", "description" : "Added with VMware OVFTool.", "type" : "vcsp.ovf", "files" : [ { "name" : "descriptor.ovf", "hrefs" : [ "/vcsp/item/b63c9bbe-3614-4153-82fd-d5f4916a1327/file/descriptor.ovf" ] }, { "name" : "descriptor.mf", "hrefs" : [ "/vcsp/item/b63c9bbe-3614-4153-82fd-d5f4916a1327/file/descriptor.mf" ] }, { "name" : "vm-3fe8a95b-ccd1-4816-b4ed-d631f3e2bbf3-disk-0.vmdk", "hrefs" : [ "/vcsp/item/b63c9bbe-3614-4153-82fd-d5f4916a1327/file/vm-3fe8a95b-ccd1-4816-b4ed-d631f3e2bbf3-disk-0.vmdk" ] } ], "properties" : { }, "selfHref" : "/vcsp/item/b63c9bbe-3614-4153-82fd-d5f4916a1327/item.json" } ], "metadata" : [] "vms" : [ { "name" : "vm1", "metadata" : [ ] }, { "name" : "vm2", "metadata" : [] } ] }, { "version" : "10" }
Metadata
The endpoint descriptor and endpoint index allow you to include object metadata that is used to create VMware Cloud Director object metadata when endpoint contents are synchronized by a subscribed catalog. For more information about the design and operation of VMware Cloud Director object metadata, see Working with Object Metadata.
- metadata
-
An array of object metadata. You may include an arbitrary number of
metadata objects in this array, subject to the size limitations documented in
VMware Cloud Director API Object Metadata Limits
- type
- The type of the metadata value. One of STRING, BOOLEAN, DATETIME or NUMBER. See VMware Cloud Director API Object Metadata Contents.
- domain
- The access domain of the metadata. One of GENERAL or SYSTEM. See Access Control for VMware Cloud Director API Object Metadata. When VMware Cloud Director object metadata is created from this endpoint, the metadata domain is always set to SYSTEM, regardless of the value you supply here.
- key
- An arbitrary key name.
- value
- The value of the key.
- visibility
- The visibility the metadata. One of PRIVATE, READONLY or READWRITE. See Access Control for VMware Cloud Director API Object Metadata. When VMware Cloud Director object metadata is created from this catalog item, the metadata visibility is always set to READONLY, regardless of the value you supply here.
Item Descriptors
Every item listed in the endpoint index must include an item descriptor file in the directory that holds all the item's files. The contents, which must be expressed in JavaScript Object Notation (media type application/json
) as defined by RFC4627, define a JSON object, and must specify values for the following key names.
- version
- An integer that specifies the version of the item, as described in Version Numbers.
- id
- The object identifier, expressed in URN format. This value uniquely identifies the catalog, persists for the life of the catalog, and must never be reused.
- name
- The display name of the catalog. Must be a nonempty string.
- created
- Time and date when the endpoint was created.
- description
- A description of the item, as it will appear in the destination catalog.
- type
-
Item type. Must have one of the following values:
vcsp.iso
if the item is an ISO image.-
vcsp.ovf
if the item is an OVF package.
- files
- An array of file objects that includes all the files that represent the item. Each file object is represented as an array with two elements:
- properties
- An array of additional properties of the item. Must be empty.
The following example shows a typical item descriptor for an OVF package.
{ "version" : "1", "id" : "urn:uuid:b63c9bbe-3614-4153-82fd-d5f4916a1327", "name" : "template1", "created" : "2012-09-14T22:18:12.858Z", "description" : "Added with VMware Ovf Tool.", "type" : "vcsp.ovf", "files" : [ { "name" : "descriptor.ovf", "size" : 9985, "hrefs" : [ "descriptor.ovf" ] }, { "name" : "vm-3fe8a95b-ccd1-4816-b4ed-d631f3e2bbf3-disk-0.vmdk", "size" : 833536, "hrefs" : [ "vm-3fe8a95b-ccd1-4816-b4ed-d631f3e2bbf3-disk-0.vmdk" ] } ], } "properties" : { } }
Responses
VCSP clients retrieve catalog files, including the descriptor and the endpoint index, with GET requests. The endpoint must return one of the following responses:
- HTTP status 200 (OK) followed by the file content
- HTTP status 503 (Service unavailable) followed by a document that provides additional information. This document has media type
application/json
, and provides values for the following keys:
The client continues to make GET requests until it receives either a 200 response or a 503 response with a nonempty message.
{ "status" : "", "progress" : 10 }An operation that has encountered an error could return the following response.
{ "status" : "failed", "message" : "File Generation failed" }
Authentication
An endpoint can require authentication. VCSP clients always present the user name vcsp
when logging in. The endpoint can specify any password for this user, but must accept the user name vcsp
. The user name and password are encoded as specified for Basic HTTP authentication.
Version Numbers
Version numbers appear in the endpoint descriptor and endpoint index as version values, which are integer values that increment monotonically. It is the responsibility of the endpoint to increment the appropriate version value whenever any of the following changes occur.
- Changes to a catalog item
-
- A file in the item is added, removed, or changed.
- The name or description of the item is changed.
- Changes to a catalog
-
- An item is added to or removed from the catalog.
- The version value of any contained catalog item changes.
- The name or description of the catalog is changed.