30
vCloud SDK for Java Developer's Guide vCloud Director 5.1 This document supports the version of each product listed and supports all subsequent versions until the document is replaced by a new edition. To check for more recent editions of this document, see http://www.vmware.com/support/pubs. EN-000822-00

vCloud SDK for Java Developer's Guide - vCloud Director 5.1

  • Upload
    lemien

  • View
    249

  • Download
    1

Embed Size (px)

Citation preview

Page 1: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's GuidevCloud Director 5.1

This document supports the version of each product listed andsupports all subsequent versions until the document is replacedby a new edition. To check for more recent editions of thisdocument, see http://www.vmware.com/support/pubs.

EN-000822-00

Page 2: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

2 VMware, Inc.

You can find the most up-to-date technical documentation on the VMware Web site at:

http://www.vmware.com/support/

The VMware Web site also provides the latest product updates.

If you have comments about this documentation, submit your feedback to:

[email protected]

Copyright © 2010–2012 VMware, Inc. All rights reserved. This product is protected by U.S. and international copyright andintellectual property laws. VMware products are covered by one or more patents listed at http://www.vmware.com/go/patents.

VMware is a registered trademark or trademark of VMware, Inc. in the United States and/or other jurisdictions. All other marksand names mentioned herein may be trademarks of their respective companies.

VMware, Inc.3401 Hillview Ave.Palo Alto, CA 94304www.vmware.com

Page 3: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Contents

vCloud SDK for Java Developer's Guide 5

1 About the VMware vCloud API 7

Object Taxonomy 8Objects, References, and Representations 10Links and Link Relations 10Client Workflow Overview 14About the Schema Reference 17

2 Setting Up for Java Development 19

Download the vCloud SDK for Java Package 20Import the SDK Into Your Java IDE 20vCloud SDK for Java Design 20About SSL Access 21

3 Overview of Java Packages and Examples 23

Running the HellovCloud Example 25Understanding the HellovCloud Example 26

Index 29

VMware, Inc. 3

Page 4: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

4 VMware, Inc.

Page 5: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

The vCloud SDK for Java Developer's Guide provides information about the Java SDK for version 5.1 of the vCloudAPI.

VMware provides many different APIs and SDKs for various applications and goals. This book providesinformation about the vCloud API for developers that are interested in creating RESTful clients ofVMware vCloud Director.

Revision HistoryThe vCloud SDK for Java Developer's Guide is revised with each release of the product or when necessary. Arevised version can contain minor or major changes.

Table 1. Revision History

Revision Date Description

10SEP12 API Version 5.1

01SEP11 API Version 1.5

30AUG10 API Version 1.0

Intended AudienceThis guide is intended for software developers who are building VMware Ready Cloud Services, includinginteractive clients of VMware vCloud Director. You should be familiar with the Java programming language,representational State Transfer (REST) and RESTful programming conventions, the Open VirtualizationFormat Specification, and VMware Virtual machine technology. You should also be familiar with other widelydeployed technologies such as XML, HTTP, and the Windows or Linux operating system.

VMware, Inc. 5

Page 6: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

6 VMware, Inc.

Page 7: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

About the VMware vCloud API 1The VMware vCloud API provides support for developers who are building interactive clients ofVMware vCloud Director using a RESTful application development style.

vCloud API clients and vCloud Director servers communicate over HTTP, exchanging representations ofvCloud objects. These representations take the form of XML elements. You use HTTP GET requests to retrievethe current representation of an object, HTTP POST and PUT requests to create or modify an object, and HTTPDELETE requests to delete an object.

This chapter includes the following topics:

n “Object Taxonomy,” on page 8

n “Objects, References, and Representations,” on page 10

n “Links and Link Relations,” on page 10

n “Client Workflow Overview,” on page 14

n “About the Schema Reference,” on page 17

VMware, Inc. 7

Page 8: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Object TaxonomyThe vCloud API defines a set of objects common to cloud computing environments. An understanding of theseobjects, their properties, and their relationships is essential to using the vCloud API.

Figure 1-1. vCloud API Object Taxonomy

Catalog 2Catalogitem

ememem

Catalog 1

Catalog 3

vDC2CatalogitemCatalogitemCatalogitemCatalogitem

users

Media

vApptemplate

Media

vApp

TasksList

Organization

vDC1

Media

vApptemplate

Media

vApp

Catalogitemememem

groups

Network

Network

vCloud API objects have the following high-level properties:

Organizations A cloud can contain one or more organizations. Each organization is a unit ofadministration for a collection of users, groups, and computing resources.Users authenticate at the organization level, supplying credentials establishedwhen the user was created or imported. User credentials are authenticated bythe organization's identity provider, which can be either the integrated identityprovider included in vCloud Director or an external SAML-based identityprovider.

Users and Groups An organization can contain an arbitrary number of users and groups. Userscan be created by the organization administrator or imported from an LDAPdirectory service or SAML-based identity provider. Groups must be imported.Permissions within an organization are controlled through the assignment ofrights and roles to users and groups.

Catalogs Catalogs contain references to virtual systems and media images. A catalog canbe shared to make it visible to other members of an organization, and can bepublished to make it visible to administrators in other organizations. A systemadministrator specifies which organizations can publish catalogs, and anorganization administrator controls access to catalogs by organizationmembers.

vCloud SDK for Java Developer's Guide

8 VMware, Inc.

Page 9: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Organization vDCs An organization virtual datacenter (organization vDC) is a deploymentenvironment for virtual systems owned by the containing organization, and anallocation mechanism for resources such as networks, storage, CPU, andmemory. In an organization vDC, computing resources are fully virtualized,and can be allocated based on demand, service level requirements, or acombination of the two.

Organization vDCNetworks

An organization vDC can be provisioned with one or more networks. Theseorganization vDC networks can be configured to provide direct or routedconnections to external networks, or can be isolated from external networksand other organization vDC networks. Routed connections require an EdgeGateway and network pool in the vDC. The Edge Gateway provides firewall,network address translation, static routing, VPN, and load balancing services.

Virtual Systems andMedia Images

Virtual systems and media images are stored in a vDC and can be included ina catalog. Media images are stored in their native representation (ISO orfloppy). Virtual systems are initially stored as templates, using an openstandard format (OVF 1.0). These templates can be retrieved from catalogs andtransformed into virtual systems, called vApps, through a process calledinstantiation, which binds a template’s abstract resource requirements toresources available in a vDC. A vApp contains one or more individual virtualmachines (Vm elements), along with parameters that define operational details,including:

n How the contained virtual machines are connected to each other and toexternal networks.

n The order in which individual virtual machines are powered on or off.

n End-user license agreement terms for each virtual machine.

n Deployment lease terms, typically inherited from the containingorganization, that constrain the consumption of vDC resources by thevApp.

n Access control information specifying which users and groups canperform operations such as deploy, power on, modify, and suspend on thevApp and the virtual machines that it contains.

Tasks Asynchronous operations that members of an organization initiate are trackedby task objects, which are kept on the organization’s tasks list.

Chapter 1 About the VMware vCloud API

VMware, Inc. 9

Page 10: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Objects, References, and RepresentationsThe vCloud API represents objects as XML documents in which object properties are encoded as elements andattributes with typed values and an explicit object hierarchy defined by an XML schema.

XML representations of first-class vCloud API objects, such as the objects in Figure 1-1, include these attributes.

id The object identifier, expressed in URN format. The value of the id attributeuniquely identifies the object, persists for the life of the object, and is neverreused. The id attribute value is intended to provide a context-free identifierthat can be used with the vCloud API entityResolver and is also suitable foruse by clients that need to access the object using a different API.

type The object type, specified as a MIME content type.

href An object reference, expressed in URL format. Because this URL includes theobject identifier portion of the id attribute value, it uniquely identifies theobject, persists for the life of the object, and is never reused. The value of thehref attribute is a reference to a view of the object, and can be used to access arepresentation of the object that is valid in a particular context. Although URLshave a well-known syntax and a well-understood interpretation, a clientshould treat each href as an opaque string. The rules that govern how the serverconstructs href strings might change in future releases.

Example: Object id, type, and href AttributesThis XML fragment, extracted from the representation of a vApp, shows its id, type, and href attributes.

<VApp

...

id="urn:vcloud:vapp:490af534-1491-452e-8ed6-a5eb54447dac"

type="application/vnd.vmware.vcloud.vApp+xml"

href="https://vcloud.example.com/api/vApp/vapp-490af534-1491-452e-8ed6-a5eb54447dac"

... >

...

</VApp>

Links and Link RelationsThe vCloud API makes extensive use of Link elements to provide references to objects and the actions thatthey support. These elements are the primary mechanism by which a server tells a client how to access andoperate on an object.

The server creates Link elements in a response body. They are read-only at the client. If a request body includesa Link element, the server ignores it.

Attributes of a Link ElementIn the XML representation of a vCloud object, each Link element has the following form:

<Link rel="relationship"

type="application/vnd.vmware.vcloud.object_type+xml"

href="URL"

name="string"/>

vCloud SDK for Java Developer's Guide

10 VMware, Inc.

Page 11: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Attribute values in a Link element supply the following information:

rel Defines the relationship of the link to the object that contains it. A relationshipcan be the name of an operation on the object, a reference to a contained orcontaining object, or a reference to an alternate representation of the object. Therelationship value implies the HTTP verb to use when you use the link's hrefvalue as a request URL.

type The object type, specified as a MIME content type, of the object that the linkreferences. This attribute is present only for links to objects. It is not present forlinks to actions.

href An object reference, expressed in URL format. Because this URL includes theobject identifier portion of the id attribute value, it uniquely identifies theobject, persists for the life of the object, and is never reused. The value of thehref attribute is a reference to a view of the object, and can be used to access arepresentation of the object that is valid in a particular context. Although URLshave a well-known syntax and a well-understood interpretation, a clientshould treat each href as an opaque string. The rules that govern how the serverconstructs href strings might change in future releases.

name The name of the referenced object, taken from the value of that object's nameattribute. Action links do not include a name attribute.

Table 1-1. Link Relationships and HTTP Request Types

rel Attribute Value Action or Relationship Description Implied HTTP Verb

abort Abort this blocking task. POST

add Add an item to this container. POST

alternate References an alternate representation of this object. GET

answer Provide user input requested by a virtual machine. POST

authorization:check Check whether an extension service operation isauthorized for an entity.

POST

blockingTask A list of pending blocking task requests in this cloud. GET

bundle:upload Upload an extension service localization bundle. PUT

bundles:cleanup Remove unused extension service localization bundles. POST

catalogItem References the CatalogItem object that refers to this object. GET

certificate:reset Removes the SSL certificate used by this service. POST

certificate:update Updates the SSL certificate used by this service. POST

checkCompliance Check that this virtual machine is using a storage profileof the intended type.

POST

consolidate Consolidate this virtual machine. POST

controlAccess Apply access controls to this object. POST

copy Reserved N/A

deploy Deploy this vApp. POST

disable Disable this object. POST

discardState Discard the suspended state of this virtual machine. POST

disk:attach Attach an independent disk to this virtual machine. POST

disk:detach Detach an independent disk from this virtual machine. POST

down References an object contained by this object. GET

Chapter 1 About the VMware vCloud API

VMware, Inc. 11

Page 12: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Table 1-1. Link Relationships and HTTP Request Types (Continued)

rel Attribute Value Action or Relationship Description Implied HTTP Verb

down:aclRules Retrieve the ACL rules for this resource class action. GET

down:apidefinitions Retrieve the API definitions for this extension service. GET

down:apiDefinitions Retrieve the API definitions for this extension service. GET

down:apiFilters Retrieve the API filters for this extension service. GET

down:extensibility Add an extension service to the system. POST

down:fileDescriptors Retrieve file descriptors for extension services APIs GET

down:files Retrieve files for extension services APIs GET

down:resourceClassActions Retrieve the actions defined for this extension serviceresource class.

GET

down:resourceClasses Retrieve the resource classes defined by this extensionservice.

GET

down:service

down:serviceLinks Retrieve the service links defined by this extension service. GET

down:serviceResources Retrieve the list of extension service resources of this class.

down:services Retrieve the list of registered extension services. GET

download:alternate Reserved N/A

download:default References the default location from which this file can bedownloaded.

GET

download:identity References the extended OVF descriptor of this vApptemplate. The extended OVF descriptor containsadditional information such as MAC address, BIOS UUID,and NetworkConfigSection

GET

edgeGateway:configureServices Update the network services offered by this EdgeGateway.

PUT

edgeGateway:reapplyServices Reapply (after an update) the network services offered bythis Edge Gateway.

POST

edgeGateway:redeploy Redeploy the vShield Edge supporting this EdgeGateway.

POST

edgeGateway:syncSyslogSettings Synchronize syslog server addresses used by this EdgeGateway with system defaults.

POST

edgeGateway:upgrade Upgrade the backing configuration of this Edge Gatewayfrom compact to full.

POST

edgeGateways List the Edge Gateway objects in this organization vDC. GET

edit Modify this object, typically by replacing its currentrepresentation with the one in the request body.

PUT

enable Enable this object. POST

enterMaintenanceMode Put this virtual machine into maintenance mode. POST

entity Retrieve a representation of the object on which anoperation triggered this notification.

GET

entityResolver Retrieve an object id as a context-free Entity element. GET

event:create Create an event in an this organization's event stream. POST

exitMaintenanceMode Take this virtual machine out of maintenance mode. POST

fail Fail this blocking task. POST

firstPage Reference to the first page of a paginated response. GET

vCloud SDK for Java Developer's Guide

12 VMware, Inc.

Page 13: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Table 1-1. Link Relationships and HTTP Request Types (Continued)

rel Attribute Value Action or Relationship Description Implied HTTP Verb

installVmwareTools Install VMware Tools on this virtual machine. POST

keystore:reset Removes the keystore used by this service. POST

keystore:update Updates the keystore used by this service. POST

keytab:reset Removes the keytab used by this service. POST

keytab:update Updates the keytab used by this service. POST

lastPage Reference to the last page of a paginated response. GET

media:ejectMedia Eject virtual media from a virtual device. POST

media:insertMedia Insert virtual media into a virtual device. POST

merge Merge one or more Provider vDCs with this Provider vDC. POST

migrateVms Migrate virtual machines from this resource pool to adifferent one.

POST

move Reserved N/A

nextPage Reference to the next page of a paginated response. GET

orgVdcNetworks List the organization vDC networks supported by thisEdge Gateway.

GET

ova Reserved N/A

ovf References the OVF descriptor of this vApp template. GET

power:powerOff Power off this vApp or virtual machine. POST

power:powerOn Power on this vApp or virtual machine. POST

power:reboot Reboot this vApp or virtual machine. POST

power:reset Reset this vApp or virtual machine. POST

power:shutdown Shut down this vApp or virtual machine. POST

power:suspend Suspend this vApp or virtual machine. POST

previousPage Reference to the previous page of a paginated response. GET

publish Publish this catalog. POST

recompose Recompose this vApp to add, remove, or reconfigurevirtual machines.

POST

reconfigureVm Update multiple sections of a virtual machine. POST

reconnect Reconnect this vCenter Server to the system. POST

refreshStorageProfiles Refresh the list of storage profiles that exist on the vCenterservice backing this Provider vDC.

POST

refreshVirtualCenter Refresh the representation of this vCenter server POST

register Register a VCenter Server with the system. POST

relocate Relocate this virtual machine. POST

remove Remove this object. DELETE

remove:force Force removal of this object. DELETE

repair Repair this host or network. POST

resourcePoolVmList List the virtual machines using this resource pool. GET

resume Resume this blocking task. POST

rights List the service-specific rights created by this extensionservice.

GET

Chapter 1 About the VMware vCloud API

VMware, Inc. 13

Page 14: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Table 1-1. Link Relationships and HTTP Request Types (Continued)

rel Attribute Value Action or Relationship Description Implied HTTP Verb

rights:cleanup Remove service-specific rights no longer used by anyextension service.

POST

screen:acquireTicket Retrieve a screen ticket for this virtual machine. GET

screen:thumbnail Retrieve a thumbnail view of the screen of this virtualmachine.

GET

shadowVms List shadow virtual machines associated with the virtualmachines in this vApp template.

GET

snapshot:create Create a snapshot of the virtual machines in this vApp. POST

snapshot:removeAll Remove all snapshots created for the virtual machines inthis vApp.

POST

snapshot:revertToCurrent Revert all virtual machines in this vApp to their currentsnapshot.

POST

storageProfile References the storage profile for this object. GET

syncSyslogSettings Synchronize syslog server addresses used by this vAppnetwork with system defaults.

POST

task Retrieve the blocking task that triggered this notification. GET

task:cancel Cancel this task. POST

task:create Create a task object. POST

task:owner Reference to the owner of a task. GET

truststore:reset Remove the truststore used by this service. POST

truststore:update Update the truststore used by this service. PUT

undeploy Undeploy this vApp. POST

unlock Unlock this user account. POST

unregister Unregister this vCenter Server. POST

up References an object that contains this object. GET

update:resourcePools Update the resource pools of this Provider vDC POST

updateProgress Request an update of this task's progress. POST

upgrade Upgrade this ESX/ESXi host. POST

upload:alternate Reserved N/A

upload:default References the default location to which this object can beuploaded.

PUT

vSphereWebClientUrl A URL that you can use to view this object with thevSphere Web Client

GET

Client Workflow OverviewvCloud API clients implement a RESTful workflow, making HTTP requests to the server and retrieving theinformation they need from the server’s responses.

About RESTful WorkflowsREST, an acronym for Representational State Transfer, describes an architectural style characteristic ofprograms that rely on the inherent properties of hypermedia to create and modify the state of an object whoseserialized representation is accessible at a URL.

vCloud SDK for Java Developer's Guide

14 VMware, Inc.

Page 15: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

If a URL of such an object is known to a client, the client can use an HTTP GET request to retrieve therepresentation of the object. In the vCloud API, this representation is an XML document. In a RESTfulworkflow, representations of object state are passed back and forth between a client and a service with theexplicit assumption that neither party need know anything about an object other than what is presented in asingle request or response. The URLs at which these documents are available often persist beyond the lifetimeof the request or response that includes them. The other content of the documents is nominally valid until theexpiration date noted in the HTTP Expires header.

vCloud REST API WorkflowsApplication programs written to a REST API use HTTP requests that are often executed by a script or otherhigher-level language to make remote procedure calls that create, retrieve, update, or delete objects that theAPI defines. In the vCloud REST API, these objects are defined by a collection of XML schemas. The operationsthemselves are HTTP requests, and so are generic to all HTTP clients.

To write a RESTful client, you must understand only the HTTP protocol and the semantics of XML, the transferformat that the vCloud API uses. To use the vCloud API effectively in such a client, you need to know only afew things:

n The set of objects that the API supports, and what they represent; for example, what is a vDC and howdoes it relate to an organization or catalog?

n How the API represents these objects; for example, what does the XML schema for an Org look like? Whatdo the individual elements and attributes represent?

n How a client refers to an object on which it wants to operate; for example, where are the links to objectsin a vDC? How does a client obtain and use them?

You can find this information in the vCloud API XML schemas. The XML elements, attributes, and compositionrules defined in these schemas represent the data structures of objects in the cloud. A client can read an objectby making an HTTP GET request to the object’s URL. A client can create or modify an object with an HTTPPUT or POST request that includes a new or changed XML body document for the object. A client can usuallydelete an object with an HTTP DELETE request.

The vCloud API schema reference includes detailed information about the XML representations of all vCloudAPI objects and examples of HTTP requests that operate on those objects. See “About the SchemaReference,” on page 17.

RESTful Workflow PatternsAll RESTful workflows follow a common pattern.

1 Make an HTTP request, typically GET, PUT, POST, or DELETE. The target of this request is either a well-known URL such as the vCloud API versions URL, or a URL obtained from the response to a previousrequest. For example, a GET request to an organization URL returns links to catalog and vDC objects thatthe organization contains.

2 Examine the response, which always includes an HTTP response code and usually includes a body. In thevCloud API, a response body is an XML representation of an object, including elements and attributesthat represent object properties, links that implement operations on the object or provide references tocontained or containing objects and, if the object is being created or modified, an embedded Task objectthat tracks the progress of the creation or modification. The response also includes an HTTP responsecode, which indicates whether the request succeeded or failed, and might be accompanied by a URL thatpoints to a location from which you can retrieve additional information.

These operations can repeat, in this order, for as long as necessary.

Chapter 1 About the VMware vCloud API

VMware, Inc. 15

Page 16: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud API REST RequestsTo retrieve object representations, clients make HTTP requests to object references. The server supplies thesereferences as href attribute values in responses to GET requests.

Every cloud has a well-known URL from which an unauthenticated user can retrieve a SupportedVersionsdocument, which lists each version of the of vCloud API that the server supports. For each version, the responselists the names and MIME types of the complex types defined in the version's XML namespace, and the versionlogin URL. A system administrator can use that URL to authenticate to the cloud by logging in to the Systemorganization. An authenticated user can discover other vCloud API URLs by making GET requests to URLsretrieved from the login response, and the URLs contained in responses to those requests.

Requests are typically categorized in terms of the type of requested operation: create, retrieve, update, anddelete. This sequence of verbs is often abbreviated with the acronym CRUD.

Table 1-2. CRUD Operations Summary

Operation Type HTTP Verb Operation Summary

Create POST Creates a new object.

Retrieve GET Retrieves the representation of anexisting object.

Update PUT Modifies an existing object.

Delete DELETE Deletes an existing object.

vCloud API REST ResponsesAll responses include an HTTP status code and, unless the status code is 204 (No Content), a Content-Typeheader. Response content depends on the request. Some responses include a document body, some includeonly a URL, and some are empty.

Response ContentResponse content depends on the requested operation. The response to a GET request is typically the completerepresentation of an existing object. The response to a PUT or POST request always contains values for thehref, name, and id attributes of the object being created or updated. It also contains at most one Task elementthat you can retrieve to track the progress of the operation. When the Task completes with a status ofsuccess, a GET request to the object's href returns all properties of the object. If the Task completion status isnot success, the object is in an indeterminate state, and should be deleted.

HTTP Response CodesA vCloud API client can expect a subset of HTTP status codes in a response.

Table 1-3. HTTP Status Codes that the vCloud API Returns

Status Code Status Description

200 OK The request is valid and was completed. The responseincludes a document body.

201 Created The request is valid. The requested object was created andcan be found at the URL specified in the Location header.

202 Accepted The request is valid and a task was created to handle it. Thisresponse is usually accompanied by a Task element.

204 No Content The request is valid and was completed. The response doesnot include a body.

vCloud SDK for Java Developer's Guide

16 VMware, Inc.

Page 17: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Table 1-3. HTTP Status Codes that the vCloud API Returns (Continued)

Status Code Status Description

400 Bad Request The request body is malformed, incomplete, or otherwiseinvalid.

401 Unauthorized An authorization header was expected but not found.

403 Forbidden The requesting user does not have adequate privileges toaccess one or more objects specified in the request.

404 Not Found One or more objects specified in the request could not befound in the specified container.

405 Method Not Allowed The HTTP method specified in the request is not supportedfor this object.

406 Not Acceptable The resource identified by the request is only capable ofgenerating response entities which have contentcharacteristics not acceptable according to the accept headerssent in the request.

409 Conflict The object state is not compatible with the requestedoperation.

415 Unsupported Media Type The server is refusing to service the request because the entityof the request is in a format not supported by the requestedresource for the requested method.

500 Internal Server Error The request was received but could not be completedbecause of an internal error at the server.

504 Gateway Timeout The server, while acting as a gateway or proxy, did notreceive a timely response from the upstream server specifiedby the URI.

About the Schema ReferenceThe vCloud API Schema Reference includes reference material for all elements, types, queries, and operations inthe vCloud API. It also includes the schema definition files.

The schema reference is available in HTML format in the vCloud Director documentation center.

Chapter 1 About the VMware vCloud API

VMware, Inc. 17

Page 18: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

18 VMware, Inc.

Page 19: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Setting Up for Java Development 2To use the vCloud SDK for Java, you need a Java Development Kit and a Java development environment.

Prerequisites to Set Up for Java DevelopmentThe vCloud SDK for Java requires JDK 6 or later. The SDK and samples were developed using JDK 1.6.0_14-b08. You should be familiar with the Java programming language and have access to an installation ofVMware vCloud Director.

In addition, consider the following items:

n The vCloud SDK for Java reference documentation provides information about the vCloud API XMLschemas, which define the objects and operations that the SDK supports. Familiarity with the details ofthe underlying objects and operations, as described in the vCloud API Programming Guide, can help youunderstand the structure of vCloud API objects, and how the methods in this SDK operate on those objects.

n Before you can run the samples, you must use the vCloud Director Web console or the vCloud API tocreate an organization, catalog, and vDC that the samples can use. The organization must have a useraccount with rights to run the samples. The predefined CatalogAuthor role should provide all of thenecessary rights. For more information about roles and rights, see the VMware vCloud DirectorAdministrator's Guide.

n Several of the sample programs, including HellovCloud.java, require you to have an OVF packageavailable on the client host. This package must be uncompressed. For more information about OVF, seethe vCloud API Programming Guide.

This chapter includes the following topics:

n “Download the vCloud SDK for Java Package,” on page 20

n “Import the SDK Into Your Java IDE,” on page 20

n “vCloud SDK for Java Design,” on page 20

n “About SSL Access,” on page 21

VMware, Inc. 19

Page 20: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Download the vCloud SDK for Java PackageThe vCloud SDK for Java is distributed as a zipped archive. Unzipped, it requires about 55MB of disk space.

The vCloud SDK for Java includes the following top-level folders:

SDK-5.1.0 SDK for development of vCloud API 5.1 clients.

n Precompiled client libraries (vcloud-java-sdk-5.1.0.jar, rest-api-schemas-5.1.0.jar). The vcloud-java-sdk-5.1.0.jar file contains thevCloud Java SDK classes and methods. The rest-api-schemas-5.1.0.jar file contains JAXB-based Java classes for the resourcesdefined in the vCloud API.

n Open source libraries (libs/*.jar) on which the SDK client libraries andexample programs depend. See the file open_source_license.txt forlicensing and other information about these libraries.

n Example programs in the vcloud-java-sdk-samples-5.1.0-sources.jarthat demonstrate common use cases associated with programmaticallymanaging virtual infrastructure. The samples include Java source codeand text examples of program inputs and outputs.

apidocs SDK reference documentation in javadoc form.

Procedure

1 In a browser, go to http://www.vmware.com/go/vcloudsdkforjava.

2 In the Resources area of the vCloud SDK for Java Community page, click the Download button.

3 On the Download page, log in with your VMware customer credentials.

4 Review the license agreement.

Click Yes to accept it and continue with the download, or click No to exit without downloading.

5 On the Download page, choose a download option and click the file format to download.

Import the SDK Into Your Java IDEAfter the download is complete, uncompress the package and import it into your Java IDE.

Procedure

1 Unzip the package.

2 In the unzipped package, open the VMware-vCloudDirector-JavaSDK folder.

3 Unzip the vcloud-java-sdk-samples-5.1.0-sources.jar samples jar file.

4 Import the contents of the VMware-vCloudDirector-JavaSDK folder into your Java IDE.

vCloud SDK for Java DesignThe vCloud SDK for Java provides static client-side representations of vCloud API objects and object-specificmethods for creating, updating, retrieving, and deleting these objects.

Packages in the vCloud SDK for Java provide the following kinds of classes.

vCloud SDK for Java Developer's Guide

20 VMware, Inc.

Page 21: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

XML Schema BindingsClasses included in the following packages provide static client-side representations of vCloud API objects.

n com.vmware.vcloud.api.rest.schema

n com.vmware.vcloud.api.rest.schema.extension

n com.vmware.vcloud.api.rest.schema.ovf

n com.vmware.vcloud.api.rest.schema.ovf.environment

n com.vmware.vcloud.api.rest.schema.versioning

n org.w3._2001.xmlschema

n com.vmware.vcloud.api.rest.schema.ovf.vmware

Operations on these classes do not interact with the server. These classes have been generated automaticallyfrom the vCloud API XML schemas.

REST Operations HelpersClasses included in the following packages provide "helper" methods that operate on static client-siderepresentations of vCloud API objects and their server-side counterparts.

n com.vmware.vcloud.sdk

n com.vmware.vcloud.sdk.admin

n com.vmware.vcloud.sdk.admin.extensions

n com.vmware.vcloud.sdk.constants

n com.vmware.vcloud.sdk.constants.query

n com.vmware.vcloud.sdk.maas

Operations on these classes typically interact with the server. These classes implement programmatic accessto REST operations from the Java programming language.

About SSL AccessIn the default configuration, VMware Cloud Director requires vCloud API clients to use SSL. To simplify accessto Cloud Director, all SDK samples use a FakeSSLSocketFactory class that allows the sample programs to acceptall SSL certificates.

Because clients that use the FakeSSLSocketFactory class are inherently insecure, restrict use of this method tosample applications, and only in trusted environments. All of the sample applications use theFakeSSLSocketFactory class.

Client applications built with this SDK can enable the use of SSL certificates by either importing certificatesinto a keystore or implementing a custom socket factory that accepts certificates from the server. Clientapplications should not use the FakeSSLSocketFactory class.

Chapter 2 Setting Up for Java Development

VMware, Inc. 21

Page 22: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

22 VMware, Inc.

Page 23: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Overview of Java Packages andExamples 3

The vCloud SDK for Java includes examples of Java application code and complete reference documentationon all packages, classes, and methods in the SDK.

PackagesThe SDK includes packages that support the JAXB bindings to the vCloud API XML schemas and packagesthat implement create, retrieve, update, and delete (CRUD) operations on the objects that those schemasrepresent. The default set of packages supports vCloud API version 5.1.

Table 3-1. Packages in the vCloud SDK for Java

Package Name Description

com.vmware.vcloud.sdk Defines the classes that implement the user API. Typically allusers can read objects that these classes access, and users withappropriate rights can modify the objects .

com.vmware.vcloud.sdk.admin Defines the classes that implement the administrative API.Typically all users can read objects that these classes access,but only a system administrator, organization administrator,or other privileged user can create and modify them. Manyof these objects extend types that are defined in the user API.

com.vmware.vcloud.sdk.admin.extensions Defines the classes that implement extensions that supportoperations on the vSphere Platform. All vSphere platformoperations are restricted to the system administrator.

com.vmware.vcloud.sdk.maas Defines the classes for receiving and processing notifications.

com.vmware.vcloud.sdk.constants Defines the constants required for helper classes and queryservice.

com.vmware.vcloud.sdk.admin.extensions.service Defines the classes used by developers of extension services.

n com.vmware.vcloud.api.rest.scheman com.vmware.vcloud.api.rest.schema.extensionn com.vmware.vcloud.api.rest.schema.ovfn com.vmware.vcloud.api.rest.schema.ovf.environmantn com.vmware.vcloud.api.rest.schema.versioningn org.w3._2001.xmlschema

XML schemas that JAXB binding uses.

ExamplesThe SDK samples directory includes example programs that demonstrate how you can use the vCloud SDKfor Java to develop client applications. Any user with rights to create and modify catalog items and vApps canrun these programs.

VMware, Inc. 23

Page 24: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Table 3-2. User API Examples

Name Description

CatalogInventorySample.java Lists name and href for all items in all catalogs in theorganization.

CatalogItemCRUD.java Creates, retrieves, updates, or deletes a catalog item.

DiskCRUD.java Creates, retrieves, updates, or deletes a virtual hard disk ina Vm object.

HellovCloud.java Implements a structured workflow through the lifecycle of avApp.

ListAllvApps.java Lists all vApps in a vDC by name and href.

ThreadSample.java Examples of how to implement multithreaded clientapplications that execute multiple requests in parallel.

VdcInventorySample.java Lists name and href for all vApps, vApp templates, andmedia images in all vDCs in the organization.

NicCRUD.java Add or remove NICs

QueryAllVms.java List all the virtual machines in the system.

SSOLogin.java Login using a SAML identity provider (including thevSphere SSO service)

VcloudNotification.java Receive, Process noifications and Callback to vCD.

Programs listed in Table 3-3 require organization administrator privileges.

Table 3-3. Administrative API Examples

Name Description

CatalogCRUD.java Create, retrieve, update, or delete a catalog.

OrganizationCRUD.java Create, retrieve, update, or delete an organization. Requiressystem administrator privileges.

GroupCRUD.java Create, retrieve, update, or delete a Group object.

RoleCRUD.java Create, retrieve, update, or delete a role.

UserCRUD.java Create, retrieve, update, or delete a local user.

VdcCRUD.java Create, retrieve, update, or delete a vDC.

QueryAllvApps.java Query that returns all vApps in the system

ReceiveNotifications.java Receive notifications from an AMQP Broker.

EdgeGatewayCRUD.java Create, retrieve, update, or delete an edge gateway.

ExternalNetworkCRUD.java Create, retrieve, update, or delete an external network.

NetworkPoolCRUD.java Create, retrieve, update, or delete a network pool.

ProviderVdcCRUD.java Create, retrieve, update, or delete a provider vDC.

This chapter includes the following topics:

n “Running the HellovCloud Example,” on page 25

n “Understanding the HellovCloud Example,” on page 26

vCloud SDK for Java Developer's Guide

24 VMware, Inc.

Page 25: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Running the HellovCloud ExampleThe HellovCloud.java example, included in the samples folder of vcloud-java-sdk-samples-5.1.0-sources.jar, demonstrates a number of the operations that the vCloud SDK for Java supports.

HellovCloud.java demonstrates the following operations:

n Logging in to the cloud and getting an organization list

n Finding a vDC and a catalog

n Uploading an OVF package to create a vApp template in the catalog

n Instantiating the vApp template to create a vApp

n Operating the vApp

The file HellovCloud.txt , also included in the samples folder of vcloud-java-sdk-samples-5.1.0-sources.jar, contains examples of program inputs and outputs.

Procedure

1 Open a console or shell in the samples folder.

2 Run HellovCloud.java, as shown in “Example: Running HellovCloud,” on page 25.

Example: Running HellovCloudTo run HellovCloud.java, use a command line with following parameters.

java HellovCloud vCloudURL user@vcloud-organization password orgName vdcName ovfFileLocation

catalogName

Parameter values provide user credentials, object names, and file names.

Table 3-4. HellovCloud Command-Line Values

Value Description

vCloudURL The vCloud Director URL.

user The name of a user account that can run the sample.

vcloud-organization The name of the organization in which the user accountexists.

password The user's password.

orgName The name of the organization in which the user accountexists.

vdcName The name of a vDC in that organization where the user canupload the OVF and deploy the vApp.

ovfFileLocation The full pathname to the OVF descriptor on the local disk.

catalogName The name of the catalog into which the OVF package isuploaded, and in which the resulting vApp template iscatalogued.

For example:

java HellovCloud https://vcloud.example.com user@SampleOrg Pa55w0rd SampleOrg SampleVdc

C:\descriptor.ovf SampleCatalog

Chapter 3 Overview of Java Packages and Examples

VMware, Inc. 25

Page 26: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Understanding the HellovCloud ExampleThe HellovCloud example performs a sequence of operations that are typical of the workflow for provisioningand operating a vApp.

Included in the example are extensive comment blocks that explain how each of the steps in the example usethe SDK libraries. For additional information about vCloud API requests, see the vCloud API ProgrammingGuide.

Logging In and Getting an Organization ListMost vCloud API requests must be authenticated by a login request that supplies user credentials in the formthat Basic HTTP authentication requires. This form is MIME Base64 encoding of a string having the formuser@vcloud-organization:password. The VcloudClient class implements a login method that takes the followingparameters:

userName Supplied in the form user@vcloud-organization.

password The user’s password.

HellovCloud.java encapsulates this authentication protocol in its login() method, which returns a list oforganizations to which you have access. In the typical case, this list has a single member, the organization thatwas supplied in the userName parameter.

Getting References to the vDC and CatalogTo instantiate a vApp template and operate the resulting vApp, you need the object references (the href values)for the catalog in which the vApp template will be entered and the vDC in which the vApp will be deployed.The Organization class implements findVdc() and findCatalogRef() methods that return references to vDCsand catalogs.

Creating a vApp Template in the Catalog by Uploading an OVF PackageThe HellovCloud.java command requires you to supply the name of an OVF descriptor file. This informationis used in the uploadVappTemplate method to upload the OVF descriptor file and create a vApp template.

Creating a vApp by Instantiating the vApp TemplateAfter the template is added to a catalog, you can create a vApp by instantiating the template.HellovCloud.java implements a newvAppFromTemplate() method that has the following parameters:

vAppTemplateReference A reference to the template that is obtained from the catalog.

Vdc A reference to the vDC in which to instantiate the template.

With these inputs, newvAppFromTemplate() constructs a simple InstantiateVAppTemplateParams request body,makes the request to the action/instantiateVAppTemplate URL of the vDC, and returns a helper object thatcontains a reference to the vApp.

Operating the vAppThe Vapp class includes methods that perform operations on the vApp. Most of these operations return aTask object that tracks the progress of the operation. HellovCloud.java uses these methods to cycle the vAppthrough the following states:

1 vapp.deploy, which deploys the vApp

2 vapp.powerOn, which powers on the vApp

vCloud SDK for Java Developer's Guide

26 VMware, Inc.

Page 27: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

3 vapp.suspend, which suspends the vApp

4 vapp.powerOff, which powers off the vApp

5 vapp.undeploy, which undeploys the vApp

6 vapp.delete, which deletes the vApp

Chapter 3 Overview of Java Packages and Examples

VMware, Inc. 27

Page 28: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

28 VMware, Inc.

Page 29: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

Index

EEntity, object representation in 10

HHellovCloud, about 26HellovCloud sample, to run 25

Iid attribute 10import 20

JJDK, supported versions 19

LLink element, rel attribute 10

Oobject hierarchy, diagram of 8object identifiers 10object references, about 10

Rrequests

about 16headers 16

responses, about 16

Ssample programs, list of 23schema files, accessing 17schema reference 17SDK, to download 20SSL 21

VvCloud API, and RESTful programming style 7

Wworkflow 14wrapper classes 20

XXML

compressed responses 16validation of 16

VMware, Inc. 29

Page 30: vCloud SDK for Java Developer's Guide - vCloud Director 5.1

vCloud SDK for Java Developer's Guide

30 VMware, Inc.