<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>OGF OCCI-WG Deliverables</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.74.3"/></head><body><div class="book" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="id439229"/>OGF OCCI-WG Deliverables</h1></div><div><div class="author"><h3 class="author">OCCI-WG</h3></div></div><div><p class="pubdate">May 2009</p></div></div><hr/></div><div class="article" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439264"/>OCCI Core</h2></div></div><hr/></div><div class="section" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439269"/>Introduction</h2></div></div></div><p>The Open Cloud Computing Interface is an open community consensus
API, initially targeting cloud infrastructure services or
"Infrastructure as a Service (IaaS)". A "Resource Oriented Architecture
(ROA)", it is as close as possible to the underlying HyperText Transfer
Protocol (HTTP), deviating only where absolutely necessary. Each
resource (identified by a canonical URL) can have multiple
representations which may or may not be hypertext (e.g. HTML). Metadata
including associations between resources is exposed via HTTP headers
(e.g. the Link: header), except in the case of collections where Atom is
used as the meta-model.</p></div><div class="section" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439280"/>Basics</h2></div></div></div><h3><a id="id439285"/>URL Namespace</h3><p>A single URL entry point (and optionally, suitable credentials for
HTTP based authentication schemes) is all a client requires. Each
resource type or "noun" (e.g. compute, network, storage) is visible as a
collection at the root level (e.g.
http://example.com/compute)<em><span class="remark">Perhaps we should consider allowing
them anywhere/everywhere as is the case today</span></em> and the resources
themselves appear under these collections (e.g.
http://example.com/compute/123). Implementors should also expose an
AtomPub service document at the root to enable enumeration of resource
types, supported formats and categories.</p><h3><a id="id439306"/>Nouns, Verbs and Attributes</h3><p>Interfaces expose "nouns" which have "attributes" and on which
"verbs" can be performed. The attributes are exposed as key-value pairs
and appropriate verbs as links, following HATEOAS principles.</p><h3><a id="id439317"/>CRUD Operations</h3><p>Create, Retrieve, Update and Delete (CRUD) operations map to the
POST, GET, PUT and DELETE HTTP verbs respectively. HEAD and OPTIONS
verbs may be used to retrieve metadata and valid operations without the
entity body to improve performance. Additionally, all existing HTTP
functionality is available for caching, proxying, gatewaying and other
advanced functionality.</p><div class="glosslist"><dl><dt>POST (Create)</dt><dd><p>POSTing a representation (e.g. OVF) to a collection (e.g.
/compute) will result in a new resource being created (e.g.
/compute/123) and returned in the Location: header. POST is also
used with HTML form data to trigger verbs (e.g. restart)</p></dd><dt>GET (Retrieve)</dt><dd><p>GETting a resource (e.g. /compute/123) will return a
representation of that resource in the most appropriate supported
format specified by the client in the Accept header. Otherwise
"406 Not Acceptable" will be returned.</p></dd><dt>PUT (Update)</dt><dd><p>PUTting a representation (e.g. OVF) to a URL (e.g.
/compute/123) will result in the resource being created or
updated. The URL is known or selected by the client (in which case
UUIDs should be used), in contrast to POSTs where the URL is
selected by the server.</p></dd><dt>DELETE (Delete)</dt><dd><p>DELETE results in the deletion of the resource (and
everything "under" it, as appropriate).</p></dd></dl></div><h3><a id="id439405"/>Web Linking</h3><p>Linked cloud resources extend the World Wide Web (WWW) of linked
hypertext (e.g. HTML) documents, only the links themselves are expressed
out-of-band rather than inline.</p><h3><a id="id439414"/>Collections</h3><p>Operations that return multiple resources (e.g. categories,
searches) are rendered as an Atom feed with an Atom entry per resource.
Metadata that would normally appear in the HTTP headers appears in
standard Atom elements with the entity-body itself being passed by
reference or by value in the Atom content element.</p><h3><a id="id439426"/>Versioning</h3><p>Clients and servers should expose the protocol version (e.g.
OCCI/1.0) via the User-Agent and Server HTTP headers respectively.
Should second or subsequent versions of the descriptor format be
required the version will be added to the Internet media type (e.g.
application/occi2+xml).</p></div><div class="section" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439439"/>References</h2></div></div></div><p>The following standards are referenced by this
implementation.</p><div class="itemizedlist"><ul><li><p>RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1</p></li><li><p>RFC 4287 The Atom Syndication Format</p></li><li><p>RFC 5023 The Atom Publishing Protocol</p></li></ul></div><p>Additionally RFC 2119 Requirement Levels are used
throughout.</p></div></div><div class="article" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439481"/>OCCI Infrastructure</h2></div></div><hr/></div><p>OCCI Infrastructure defines three nouns and various extensions
relating to management of cloud infrastructure services (IaaS).</p><div class="section" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439492"/>Nouns</h2></div></div></div><p>Cloud infrastructure can be modeled using three primary nouns:
compute, network and storage.</p><div class="section" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id439503"/>Compute</h3></div></div></div><p>A compute resource is capable of conducting computations (e.g. a
virtual machine).</p><div class="table"><a id="id439513"/><p class="title"><b>Table 1. Compute Attributes</b></p><div class="table-contents"><table summary="Compute Attributes" border="1"><colgroup><col style="text-align: center"/><col/><col/></colgroup><thead><tr><th style="text-align: left">Attribute</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td style="text-align: left">occi.compute.arch</td><td>Enum (x86, x64)</td><td>CPU Architecture (e.g. x64)</td></tr><tr><td style="text-align: left">occi.compute.cores</td><td>Integer</td><td>Number of CPU cores (e.g. 1, 2)</td></tr><tr><td style="text-align: left">occi.compute.memory</td><td>Float (2^20 bytes)</td><td>RAM in megabytes (e.g. 2048)</td></tr><tr><td style="text-align: left">occi.compute.speed</td><td>Float (10^9 Hertz)</td><td>Clock speed in gigahertz (e.g. 2.4)</td></tr></tbody></table></div></div><br class="table-break"/></div><div class="section" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id439612"/>Network</h3></div></div></div><p>A network resource is capable of transferring data (e.g. a
virtual network or VLAN).</p><div class="table"><a id="id439622"/><p class="title"><b>Table 2. Network Attributes</b></p><div class="table-contents"><table summary="Network Attributes" border="1"><colgroup><col style="text-align: center"/><col/><col/></colgroup><thead><tr><th style="text-align: left">Attribute</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td style="text-align: left">occi.network.vlan-id</td><td>Integer (0..4095)</td><td>802.1q VLAN ID (e.g. 4095)</td></tr><tr><td style="text-align: left">occi.network.vlan-tag</td><td>Token</td><td>Tag based VLANs (e.g. external-dmz)</td></tr><tr><td style="text-align: left">occi.network.ipv4[].gateway</td><td>IPv4 Address</td><td>IPv4 gateway address (e.g. 192.168.0.1)</td></tr><tr><td style="text-align: left">occi.network.ipv4[].netmask</td><td>IPv4 Address</td><td>IPv4 netmask address (e.g. 255.255.255.0)</td></tr><tr><td style="text-align: left">occi.network.ipv4[].network</td><td>IPv4 Address</td><td>IPv4 network address (e.g. 192.168.0.0)</td></tr><tr><td style="text-align: left">occi.network.ipv4[].cidr</td><td>Integer (0..32)</td><td>Netmask in CIDR notation (e.g. 24)</td></tr></tbody></table></div></div><br class="table-break"/></div><div class="section" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id439753"/>Storage</h3></div></div></div><p>A storage resource is capable of mass storage of data (e.g. a
virtual hard drive).</p><div class="table"><a id="id439763"/><p class="title"><b>Table 3. Storage Attributes</b></p><div class="table-contents"><table summary="Storage Attributes" border="1"><colgroup><col style="text-align: center"/><col/><col/></colgroup><thead><tr><th style="text-align: left">Attribute</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td style="text-align: left">occi.storage.persistence</td><td>Enum (transient, persistent, reliable)</td><td>Qualitative device persistence (e.g. transient)</td></tr><tr><td style="text-align: left">occi.storage.size</td><td>Integer (10^9 bytes)</td><td>Drive size in gigabytes (e.g. 40)</td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="section" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439835"/>Extensions</h2></div></div></div><p>Various extensions provide for more advanced management
functionality such as billing, monitoring and reporting.</p><div class="section" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id439846"/>State machine (state)</h3></div></div></div><p>The state machine extension allows for the modeling of
arbitrarily complex state machines and associated transitions (e.g.
start, stop, restart).</p></div></div></div><div class="article" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id439861"/>OCCI Registries</h2></div></div><hr/></div><div class="table"><a id="id439866"/><p class="title"><b>Table 1. HTTP Status Codes</b></p><div class="table-contents"><table summary="HTTP Status Codes" border="1"><colgroup><col/><col/><col/></colgroup><thead><tr><th>Code</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td>200 OK</td><td>Request completed successfully</td><td>Response is returned</td></tr><tr><td>201 Created</td><td>Request completed successfully, resource was
created</td><td>Pointer to new resource returned</td></tr><tr><td>202 Accepted</td><td>Request accepted, processing not completed</td><td>Workload starting but not yet active</td></tr><tr><td>301 Moved Permanently</td><td>Resource has been assigned a new permanent URI</td><td>Workload migrated to another installation</td></tr><tr><td>302 Found</td><td>Resource resides temporarily under a different URI</td><td>Alias pointing to UUID can be updated</td></tr><tr><td>304 Not Modified</td><td>Conditional GET on resource that is unchanged</td><td>Client already has the latest version of the
resource</td></tr><tr><td>400 Bad Request</td><td>Request could not be understood by the server due to
malformed syntax</td><td>Client sent a representation that was unable to be
understood</td></tr><tr><td>401 Unauthorized</td><td>The request requires user authentication</td><td>Client must retry with authentication</td></tr><tr><td>402 Payment Required</td><td>The server has refused to fulfill the request</td><td>Credit limit exceeded</td></tr><tr><td>403 Forbidden</td><td>The server understood the request, but is refusing to
fulfill it</td><td>Attempt to access resource without permission</td></tr><tr><td>404 Not Found</td><td>The server has not found the resource</td><td>Feed or entry unknown</td></tr><tr><td>405 Method Not Allowed</td><td>The method specified is not allowed for the
resource</td><td>Attempt to delete an immutable resource</td></tr><tr><td>406 Not Acceptable</td><td>The resource is not capable of requested content
characteristics</td><td>Unsupported output format requested</td></tr><tr><td>409 Conflict</td><td>Request is in conflict with the current state of the
resource</td><td>Resource updated by a third-party in the interim</td></tr><tr><td>410 Gone</td><td>Resource is gone, no forwarding address</td><td>Resource was deleted</td></tr><tr><td>500 Internal Server Error</td><td>Server encountered an unexpected condition</td><td>An unknown failure has occurred (e.g. out of
memory)</td></tr><tr><td>501 Not Implemented</td><td>Functionality required to fulfill request is not
implemented</td><td>A missing extension was called</td></tr><tr><td>502 Bad Gateway</td><td>An invalid response was received from an upstream
server</td><td>The gateway received a malformed response from a
node</td></tr><tr><td>503 Service Unavailable</td><td>Server is temporarily unable to handle the request</td><td>Server may be overloaded or down for maintenance</td></tr><tr><td>504 Gateway Timeout</td><td>No response was received from an upstream server</td><td>The gateway did not receive a response within the timeout
period</td></tr></tbody></table></div></div><br class="table-break"/></div></div></body></html>