deltacloud-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mar...@apache.org
Subject svn commit: r1353588 [9/23] - in /deltacloud/trunk/site: ./ content/ content/Scripts/ content/assets/ content/assets/css/ content/assets/img/ content/assets/img/documentation_files/ content/assets/js/ content/assets/less/ content/css/ content/css/bluep...
Date Mon, 25 Jun 2012 15:05:57 GMT
Added: deltacloud/trunk/site/content/send-patch.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/send-patch.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/send-patch.md (added)
+++ deltacloud/trunk/site/content/send-patch.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,251 @@
+---
+site_name: Deltacloud API
+title: Send a Patch
+---
+
+<br/>
+
+<ul class="breadcrumb">
+  <li>
+    <a href="/how-to-contribute.html#how">How to contribute?</a> <span class="divider">/</span>
+  </li>
+  <li class="active">Send a patch</li>
+</ul>
+
+<h3>Formatting and sending patches</h3>
+
+<p>
+The Deltacloud community works with <a href="http://book.git-scm.com/">Git</a>. The process of contributing to the project we prefer contains these steps: <strong>local_branch → patch → review → accept → commit</strong> process for contributing to the project. This is how the typical workflow used by the core developers looks like:
+</p>
+
+<ol>
+  <li>
+  <p>
+  Set the following settings inside the git configuration file. The config file is located in the root of the Deltacloud project in a hidden <strong>.git</strong> directory. Open the config file with your preferred editor:
+  </p>
+
+<pre>
+$ vim deltacloud/.git/config
+</pre>
+
+  <p>
+  Add the following information to the configuration file and replace the relevant values with your own ones:
+  </p>
+
+<pre>
+[sendemail]
+signedoffbycc = no
+chainreplyto = no
+smtpserver = your_smpt.server.address
+thread = yes
+from = your_email_address
+suppresscc = all
+to = dev@deltacloud.apache.org
+
+[core]
+whitespace = trailing-space,space-before-tab
+
+[apply]
+whitespace = error-all
+</pre>
+
+  </li>
+  <li>
+  <p>
+  Get the latest HEAD of the Deltacloud git repo. You will gain one local branch called master:
+  </p>
+
+<pre>
+$ git branch
+* master
+</pre>
+
+  </li>
+  <li>
+  <p>
+  Fetch the latest changes from the git repo:
+  </p>
+
+<pre>
+$ git pull
+</pre>
+
+  </li>
+  <li>
+  <p>
+  Create a new local branch for your edits and give it a name:
+  </p>
+
+<pre>
+$ git checkout -b my_new_branch
+</pre>
+
+  </li>
+  <li>
+  <p>
+  Make your changes and then check, what you've edited:
+  </p>
+
+<pre>
+$ git status
+</pre>
+
+  </li>
+  <li>
+  <p>
+  Commit these changes to your local branch:
+  </p>
+
+<pre>
+$ git commit -a
+</pre>
+  
+  <p>
+  This will open an editor (e.g. vi). Enter a commit message. The message should be short and succinct and individual lines shouldn't be longer than 80 characters. See the recent commits with their commit messages to find an inspiration:</p>
+  
+<pre>
+$ git log
+</pre>
+
+  <p>
+  When you commit your changes to your local branch, the local branch will be different from your <strong>local master</strong> branch. Other developers may have already committed their changes to the <strong>remote master</strong> branch in the Apache git repo in the meantime. Thus, you need to fetch any new changes and merge them into your <strong>local master</strong>.
+  </p>
+
+  </li>
+  <li>
+  <p>
+  Change to master and fetch upstream changes (it there are any):
+  </p>
+  
+<pre>
+$ git checkout master
+$ git pull
+</pre>
+  
+  <p>
+  Your <strong>local</strong> master is now up-to-date with the <strong>remote</strong> master in the git repo.
+  </p>
+  </li>
+  <li>
+  <p>
+  Rebase the local master onto the branch containing your changes:
+  </p>
+  
+<pre>
+$ git rebase master my_new_branch
+</pre>
+  
+  <p>
+  This allows you to make patches against master and send them to the Deltacloud mailing list.
+  </p>
+  
+<pre>
+$ git format-patch -o /path/to/where/you/keep/patches/ master
+$ git send-email --compose --subject 'some subject'
+  --thread /path/to/where/you/keep/patches/*
+</pre>
+  
+  <p>
+  The other members of the community will review your patches. The patch has to receive at least one <strong>ACK </strong>and no <strong>NACK</strong> to be approved. Then the patch will be committed by one of the Deltacloud developers with commit rights to the Apache repo. If noone is responding to your patch sent to mailing list, feel free to remind yourself after few days.
+  </p>
+  </li>
+</ol>
+
+<p>
+You can also contribute to the project by reviewing patches sent by other contributors:
+</p>
+
+<ol>
+  <li>
+  <p>
+  Make a new branch where you will apply the patches and test:
+  </p>
+
+<pre>
+$ git checkout -b jsmith_patches
+</pre>
+
+  </li>
+  <li>
+  <p>
+  Save the patches to a known location and make sure you're on the right branch . Then apply.
+  </p>
+  
+<pre>
+$ git checkout jsmith_patches
+
+$ cat /path/to/patches/0001-name-of-patch.txt | git apply
+</pre>
+or
+<pre>
+$ git am /path/to/patches/0001-name-of-patch.eml
+</pre>
+
+  <p>
+  You can use <strong>git am</strong> ("apply mail") to apply patches in mail format, or <strong>git apply</strong> for plain-text patches. If you use <strong>git apply</strong>, you will only apply the patches, whereas <strong>git am</strong> will also commit the patches to the local branch (preserving the author's commit messages). However, the difference between <strong>git am</strong> and <strong>git apply</strong> is insignificant for the purpose of reviewing patches. It depends on whether you want to save the patches as plain-text or in .mbox email format.
+  </p>
+
+  </li>
+  <li>
+
+<p>
+If you think the patches are working correctly, send an <strong>ACK</strong> to the Deltacloud <a href="http://mail-archives.apache.org/mod_mbox/deltacloud-dev/">mailing list</a>. Similarly, if you think the patches could cause a problem, send a <strong>NACK</strong> and explain the issue you have found.
+</p>
+  </li>
+</ol>
+
+<p>
+  <a class="btn btn-inverse btn-large" style="float: right" data-toggle="modal" href="#tests">Test the patch</a>
+  <a class="btn btn-inverse btn-large" href="/how-to-contribute.html"><i class="icon-arrow-left icon-white" style="vertical-align:baseline"> </i> Back</a>
+</p>
+
+<div class="modal hide" id="tests">
+  <div class="modal-header">
+    <a class="close" data-dismiss="modal">×</a>
+    <h3>Writing and running tests</h3>
+  </div>
+  <div class="modal-body">
+
+<p>
+You should add a test to every new feature or new driver you create to make sure, that everything is running as expected. There are two different directories in the Deltacloud project, where the tests are stored: <strong>/deltacloud/server/tests</strong> for Unit tests for drivers and <strong>/deltacloud/tests</strong> for Cucumber tests.
+</p>
+
+<p>Initiate the Unit tests:</p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ rake test
+</pre>
+
+<p>This will invoke all Unit tests defined in <strong>/deltacloud/server/tests</strong> by inspecting the Rakefile in <strong>/deltacloud/server</strong>. To invoke a specific driver tests type:</p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ rake test:rackspace
+  _OR_
+$ rake test:mock
+  _etc_
+</pre>
+
+<p>Initiate the Cucumber tests:</p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ rake cucumber
+</pre>
+
+<p>Alternatively, you can invoke the cucumber tests directly without using Rakefile: </p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ cucumber ../tests/mock
+  _OR_
+$ cucumber ../tests/ec2
+  _etc_
+</pre>
+
+  </div>
+  <div class="modal-footer">
+    <a href="#" class="btn btn-primary" data-dismiss="modal">Close</a>
+  </div>
+</div>

Added: deltacloud/trunk/site/content/storage-resources.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/storage-resources.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/storage-resources.md (added)
+++ deltacloud/trunk/site/content/storage-resources.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,377 @@
+---
+site_name: Deltacloud API
+title: Storage resources
+---
+
+<br/>
+
+<div class="row">
+  <div class="span9">
+
+<h3 id="resources">Storage resources</h3>
+
+<p>
+Storage resources are divided into two groups:
+</p>
+
+<ul>
+  <li><strong>storage volumes</strong>, which can be attached to a running instance (accessible by the instance OS)</li>
+  <li><strong>blob storage</strong>, which represents a generic 'key &lt;−−&gt; value' based data store, as implemented by Rackspace CloudFiles or Amazon S3</li>
+</ul>
+
+<p>
+<strong>Storage snapshots</strong> represent a storage volume, a backup which is created at a particular point of time (a snapshot).
+</p>
+
+<h3 id="volumes">Storage Volumes</h3>
+
+<p>
+A storage volume has
+</p>
+
+  </div>
+  <div class="span3">
+
+<ul class="nav nav-list well">
+  <li class="nav-header">
+    REST API
+  </li>
+  <li><a href="/rest-api.html">Introduction</a></li>
+  <li><a href="/api-entry-point.html">API entry point</a></li>
+  <li><a href="/compute-resources.html">Compute resources</a></li>
+  <li class="active"><a href="#resources">Storage resources</a></li>
+  <ul class="nav nav-list">
+    <li><a href="#volumes">Storage volumes</a></li>
+    <li><a href="/storage-snapshots.html">Storage snapshots</a></li>
+    <li><a href="/blob-storage.html">Blob storage</a></li>
+  </ul>
+</ul>
+
+  </div>
+</div>
+
+<ul>
+  <li>a <strong>capacity</strong> expressed in Gigabytes;</li>
+  <li>a <strong>created</strong> timestamp;</li>
+  <li>a <strong>realm_id</strong> specifying the realm in which the volume exists;</li>
+  <li>a <strong>state</strong> (for Amazon EC2 this is one of creating, available, in-use, deleting, deleted, error); and </li>
+  <li>a set of <strong>actions</strong>.</li>
+</ul>
+
+<p>
+When attached to an instance, a storage volume will also expose a <strong>mount</strong> element
+which contains the attributes <strong>instance </strong>and <strong>device</strong>, specifying the instance, to which the volume is attached, and the mount point (e.g. /dev/sdh), respectively.
+</p>
+
+<br/>
+
+<ul class="nav nav-pills">
+  <li class="active"><a href="#tab1" data-toggle="tab">Get a list of all volumes</a></li>
+  <li><a href="#tab2" data-toggle="tab">Get the details of volume</a></li>
+  <li><a href="#tab3" data-toggle="tab">Create/delete a volume</a></li>
+  <li><a href="#tab4" data-toggle="tab">Attach/detach a volume</a></li>
+</ul>
+
+<hr>
+
+<div class="tab-content">
+  <div class="tab-pane active" id="tab1">
+
+<h4>Get a list of all storage volumes</h4>
+
+<p>
+To list all storage volumes use call <strong>GET /api/storage_volumes</strong>.
+</p>
+
+<p>
+Example request:
+</p>
+
+<pre>
+GET /api/storage_volumes?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 200 OK
+Content-Type: application/xml
+Date: Thu, 28 Jul 2011 21:04:09 GMT
+Content-Length: 1341
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_volumes&gt;
+  &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' id='vol-0bc0de60'&gt;
+    &lt;created&gt;Thu Jul 28 20:44:18 UTC 2011&lt;/created&gt;
+    &lt;capacity unit='GB'&gt;10&lt;/capacity&gt;
+        &lt;realm_id&gt;us-east-1c&lt;/realm_id&gt;
+    &lt;state&gt;AVAILABLE&lt;/state&gt;
+    &lt;actions&gt;
+      &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/attach' method='post' rel='attach' /&gt;
+      &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/detach' method='post' rel='detach' /&gt;
+      &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' method='delete' rel='destroy' /&gt;
+    &lt;/actions&gt;
+  &lt;/storage_volume&gt;
+  &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' id='vol-99fbe5f2'&gt;
+    &lt;created&gt;Thu Jul 28 20:56:07 UTC 2011&lt;/created&gt;
+    &lt;capacity unit='GB'&gt;15&lt;/capacity&gt;
+    &lt;realm_id&gt;us-east-1c&lt;/realm_id&gt;
+    &lt;state&gt;AVAILABLE&lt;/state&gt;
+    &lt;actions&gt;
+      &lt;link href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2/attach' method='post' rel='attach' /&gt;
+      &lt;link href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2/detach' method='post' rel='detach' /&gt;
+      &lt;link href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' method='delete' rel='destroy' /&gt;
+    &lt;/actions&gt;
+  &lt;/storage_volume&gt;
+&lt;/storage_volumes&gt;
+</pre>
+
+  </div>
+  <div class="tab-pane" id="tab2">
+
+<h4>Get the details of a storage volume</h4>
+
+<p>
+To retrieve the details for the specified storage volume use call <strong>GET /api/storage_volumes/:id</strong>.
+</p>
+
+<p>Example request:</p>
+
+<pre>
+GET /api/storage_volumes/vol-99fbe5f2?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 200 OK
+Content-Type: application/xml
+Date: Thu, 28 Jul 2011 21:06:39 GMT
+Content-Length: 794
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' id='vol-99fbe5f2'&gt;
+  &lt;created&gt;Thu Jul 28 20:56:07 UTC 2011&lt;/created&gt;
+  &lt;capacity unit='GB'&gt;15&lt;/capacity&gt;
+  &lt;realm_id&gt;us-east-1c&lt;/realm_id&gt;
+  &lt;state&gt;IN-USE&lt;/state&gt;
+  &lt;mount&gt;
+    &lt;instance href='i-b100b3d0' id='i-b100b3d0'&gt;&lt;/instance&gt;
+    &lt;device name='/dev/sdh'&gt;&lt;/device&gt;
+  &lt;/mount&gt;
+  &lt;actions&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2/attach' method='post' rel='attach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2/detach' method='post' rel='detach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' method='delete' rel='destroy' /&gt;
+  &lt;/actions&gt;
+&lt;/storage_volume&gt;
+</pre>
+
+  </div>
+  <div class="tab-pane" id="tab3">
+
+<h4>Create a new storage volume</h4>
+
+<p>
+To create a new storage volume use call <strong>POST /api/storage_volumes</strong>. A client may specify a <strong>snapshot_id</strong> from which the storage volume is instantiated though this is optional. The <strong>capacity</strong> parameter, expressed in Gigabytes, is also optional and its default size is 1 GB. Finally clients may also specify the <strong>realm_id</strong>, as a storage volume can typically only be attached to instances running within the specified realm. If the realm is not specified it will set it at the first realm returned by the cloud provider. A succesful operation will return <strong>HTTP 201 Created</strong> with the details of the new storage volume.
+</p>
+
+<p>
+As with the other POST operations in the Deltacloud API, clients may choose to specify operation parameters as multipart/form-data or as application/x-www-form-urlencoded data.
+</p>
+
+<p>Example request:</p>
+
+<pre>
+POST /api/storage_volumes?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+Content-Length: 31
+Content-Type: application/x-www-form-urlencoded
+
+capacity=10&realm_id=us-east-1c
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 201 Created
+Date: Thu, 28 Jul 2011 20:44:27 GMT
+Content-Length: 649
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' id='vol-0bc0de60'&gt;
+  &lt;created&gt;Thu Jul 28 20:44:18 UTC 2011&lt;/created&gt;
+  &lt;capacity unit='GB'&gt;10&lt;/capacity&gt;
+  &lt;realm_id&gt;us-east-1c&lt;/realm_id&gt;
+  &lt;state&gt;CREATING&lt;/state&gt;
+  &lt;actions&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/attach' method='post' rel='attach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/detach' method='post' rel='detach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' method='delete' rel='destroy' /&gt;
+  &lt;/actions&gt;
+&lt;/storage_volume&gt;
+</pre>
+
+<h4>Delete a storage volume</h4>
+
+<p>
+To delete the specified storage volume use call <strong>DELETE /api/storage_volumes/:id</strong>. The operation will return a <strong>HTTP 204 No Content</strong> after a succesful operation. 
+</p>
+
+<div class="alert alert-error">
+  <a class="close" data-dismiss="alert" href="#">×</a>
+  <strong>Note:</strong> 
+  <p> The operation will fail if the given storage_volume is currently attached to an instance. </p>
+</div>
+
+<p>Example request:</p>
+
+<pre>
+DELETE /api/storage_volumes/vol-0bc0de60?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 204 No Content
+Date: Thu, 28 Jul 2011 22:34:29 GMT
+</pre>
+
+<p>Example request: (<strong>error deleting a volume currently attached to an instance</strong>)</p>
+
+<pre>
+DELETE /api/storage_volumes/vol-0bc0de60?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 502 Bad Gateway
+Content-Type: application/xml
+Date: Thu, 28 Jul 2011 22:30:07 GMT
+Content-Length: 617
+
+&lt;error status='502' url='/api/storage_volumes/vol-0bc0de60?format=xml'&gt;
+  &lt;kind&gt;backend_error&lt;/kind&gt;
+  &lt;backend driver='ec2'&gt;
+    &lt;code&gt;502&lt;/code&gt;
+  &lt;/backend&gt;
+  &lt;message&gt;&lt;![CDATA[Client.VolumeInUse: Volume vol-0bc0de60 is currently attached to i-b100b3d0
+  REQUEST=ec2.us-east-1.amazonaws.com:443/?AWSAccessKeyId=AKIAJATNOR5HKG3FK27Q&Action=DeleteVolume&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-07-28T22%3A30%3A00.000Z&Version=2010-08-31&VolumeId=vol-0bc0de60&Signature=WnZTd9vFaUZEwfuifyo3%2FWa2HBEG1S7R8Iv%2FHqc%2BmqE%3D
+  REQUEST ID=5dff67bb-d63a-4055-b550-f323fa16e185]]&gt;&lt;/message&gt;
+&lt;/error&gt;
+</pre>
+
+  </div>
+  <div class="tab-pane" id="tab4">
+
+<h4>Attach a storage volume to a running instance</h4>
+
+<p>
+To attach the specified storage volume to a running instance use call <strong>POST /api/storage_volumes/:id/attach</strong>. Clients must specify the <strong>instance_id</strong> and the <strong>device</strong> as parameters. The device parameter is used as the <strong>mount point</strong>, that is the location at which the storage volume will be exposed to the given instance (e.g. /dev/sdh). The Deltacloud server will respond with a <strong>HTTP 202 Accepted</strong> after a succesful attach operation with details of the storage volume. In the example below, the state is reported as 'unknown' although the <strong>mount</strong> element is present. It is because the processing has not yet been completed (hence the 202 status code). Clients may specify the required parameters as multipart/form-data or as application/x-www-form-urlencoded data.
+</p>
+
+<p>Example request:</p>
+
+<pre>
+POST /api/storage_volumes/vol-0bc0de60/attach?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+Content-Length: 38
+Content-Type: application/x-www-form-urlencoded
+
+instance_id=i-b100b3d0&device=/dev/sdi
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 202 Accepted
+Date: Thu, 28 Jul 2011 21:36:17 GMT
+Content-Length: 709
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' id='vol-0bc0de60'&gt;
+  &lt;capacity unit='GB'&gt;&lt;/capacity&gt;
+  &lt;device&gt;/dev/sdi&lt;/device&gt;
+  &lt;state&gt;unknown&lt;/state&gt;
+  &lt;mount&gt;
+    &lt;instance href='i-b100b3d0' id='i-b100b3d0'&gt;&lt;/instance&gt;
+    &lt;device name='/dev/sdi'&gt;&lt;/device&gt;
+  &lt;/mount&gt;
+  &lt;actions&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/attach' method='post' rel='attach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/detach' method='post' rel='detach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' method='delete' rel='destroy' /&gt;
+  &lt;/actions&gt;
+&lt;/storage_volume&gt;
+</pre>
+
+<h4>Detach a storage volume from an instance</h4>
+
+<p>
+To detach the given storage volume from the instance to which it is currently attached use call <strong>POST /api/storage_volumes/:id/detach</strong>. A succesful operation will return <strong>HTTP 201 Accepted</strong> with details of the storage volume. Similarly to attach operation, in the example below, the <strong>state</strong> is reported as 'unknown' and the <strong>mount</strong> element is still present as the processing has not been completed yet (hence the 202 status code).
+</p>
+
+<p>Example request:</p>
+
+<pre>
+POST /api/storage_volumes/vol-0bc0de60/detach?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 202 Accepted
+Content-Type: application/xml
+Date: Thu, 28 Jul 2011 21:29:18 GMT
+Content-Length: 709
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' id='vol-0bc0de60'&gt;
+  &lt;capacity unit='GB'&gt;&lt;/capacity&gt;
+  &lt;device&gt;/dev/sdi&lt;/device&gt;
+  &lt;state&gt;unknown&lt;/state&gt;
+  &lt;mount&gt;
+    &lt;instance href='i-b100b3d0' id='i-b100b3d0'&gt;&lt;/instance&gt;
+    &lt;device name='/dev/sdi'&gt;&lt;/device&gt;
+  &lt;/mount&gt;
+  &lt;actions&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/attach' method='post' rel='attach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60/detach' method='post' rel='detach' /&gt;
+    &lt;link href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' method='delete' rel='destroy' /&gt;
+  &lt;/actions&gt;
+&lt;/storage_volume&gt;
+</pre>
+
+  </div>
+</div>
+
+<a class="btn btn-inverse btn-large" style="float: right" href="/storage-snapshots.html">Storage snapshots <i class="icon-arrow-right icon-white" style="vertical-align:baseline"> </i></a>
+
+<br/>
+

Added: deltacloud/trunk/site/content/storage-snapshots.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/storage-snapshots.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/storage-snapshots.md (added)
+++ deltacloud/trunk/site/content/storage-snapshots.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,208 @@
+---
+site_name: Deltacloud API
+title: Storage snapshots
+---
+
+<br/>
+
+<div class="row">
+  <div class="span9">
+
+<h3 id="snapshots">Storage snapshots</h3>
+
+<p>
+A storage snapshot captures the state of a storage volume at the exact moment in time. Each snapshot has
+</p>
+
+<ul>
+  <li>a <strong>created timestamp</strong>; and</li>
+  <li>a <strong>storage volume </strong>attribute referring to the volume from which the snapshot was made.</li>
+</ul>
+
+<br/>
+<br/>
+
+<ul class="nav nav-pills">
+  <li class="active"><a href="#tab1" data-toggle="tab">Get a list of all snapshots</a></li>
+  <li><a href="#tab2" data-toggle="tab">Get the details of a snapshot</a></li>
+  <li><a href="#tab3" data-toggle="tab">Create/delete a snapshot</a></li>
+</ul>
+
+<hr>
+
+  </div>
+  <div class="span3">
+
+<ul class="nav nav-list well">
+  <li class="nav-header">
+    REST API
+  </li>
+  <li><a href="/rest-api.html">Introduction</a></li>
+  <li><a href="/api-entry-point.html">API entry point</a></li>
+  <li><a href="/compute-resources.html">Compute resources</a></li>
+  <li><a href="/storage-resources.html">Storage resources</a></li>
+  <ul class="nav nav-list">
+    <li><a href="/storage-resources.html#volumes">Storage volumes</a></li>
+    <li class="active"><a href="#snapshots">Storage snapshots</a></li>
+    <li><a href="/blob-storage.html">Blob storage</a></li>
+  </ul>
+</ul>
+
+  </div>
+</div>
+
+<div class="tab-content">
+  <div class="tab-pane active" id="tab1">
+  
+<h4>Get a list of all storage snapshots</h4>
+
+<p>
+To list all available storage snapshots use call <strong>GET /api/storage_snapshots</strong>. As concerns Amazon EC2, this list includes any snapshots that are available to the requesting client account, including those that may not have been created by that account. As this list is very long the example below shows only part of the response:
+</p>
+
+<p>
+Example request:
+</p>
+
+<pre>
+GET /api/storage_snapshots?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 200 OK
+Content-Type: application/xml
+Date: Thu, 28 Jul 2011 22:08:36 GMT
+Content-Length: 156897
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_snapshots&gt;
+  &lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-45b8d024' id='snap-45b8d024'&gt;
+    &lt;created&gt;Thu Jul 28 21:54:19 UTC 2011&lt;/created&gt;
+    &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' id='vol-0bc0de60'&gt;&lt;/storage_volume&gt;
+  &lt;/storage_snapshot&gt;
+  &lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-d5a1c9b4' id='snap-d5a1c9b4'&gt;
+    &lt;created&gt;Thu Jul 28 21:46:12 UTC 2011&lt;/created&gt;
+    &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' id='vol-99fbe5f2'&gt;&lt;/storage_volume&gt;
+  &lt;/storage_snapshot&gt;
+  &lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-dda6cebc' id='snap-dda6cebc'&gt;
+    &lt;created&gt;Thu Jul 28 21:51:55 UTC 2011&lt;/created&gt;
+    &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' id='vol-99fbe5f2'&gt;&lt;/storage_volume&gt;
+  &lt;/storage_snapshot&gt;
+  &lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-d010f6b9' id='snap-d010f6b9'&gt;
+    &lt;created&gt;Mon Oct 20 18:23:59 UTC 2008&lt;/created&gt;
+    &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-351efb5c' id='vol-351efb5c'&gt;&lt;/storage_volume&gt;
+  &lt;/storage_snapshot&gt;
+  &lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-a310f6ca' id='snap-a310f6ca'&gt;
+    &lt;created&gt;Mon Oct 20 18:25:53 UTC 2008&lt;/created&gt;
+    &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-001efb69' id='vol-001efb69'&gt;&lt;/storage_volume&gt;
+  &lt;/storage_snapshot&gt;
+  (...)
+&lt;/storage_snapshots&gt;
+</pre>
+
+  </div>
+  <div class="tab-pane" id="tab2">
+
+<h4>Get the details of a storage snaphsot</h4>
+
+<p>
+To get all details for a specified storage snapshot, as shown below, use call <strong>GET /api/storage_snapshots/:id</strong>.
+</p>
+
+<p>Example request:</p>
+
+<pre>
+GET /api/storage_snapshots/snap-45b8d024?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 200 OK
+Content-Type: application/xml
+Date: Thu, 28 Jul 2011 22:08:36 GMT
+Content-Length: 329
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-45b8d024' id='snap-45b8d024'&gt;
+  &lt;created&gt;Thu Jul 28 21:54:19 UTC 2011&lt;/created&gt;
+  &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-0bc0de60' id='vol-0bc0de60'&gt;&lt;/storage_volume&gt;
+&lt;/storage_snapshot&gt;
+</pre>
+
+  </div>
+  <div class="tab-pane" id="tab3">
+
+<h4>Create a new storage snapshot</h4>
+
+<p>
+To create a new storage snapshot use call <strong>POST /api/storage_snapshots</strong>. Clients must specify the storage volume, which the snapshot is created from, by supplying the <strong>volume_id</strong> parameter. The Deltacloud server responds with <strong>HTTP 201 Created</strong> after a succesful operation and provides details of the new storage snapshot. Clients may specify operation parameters as multipart/form-data, or as application/x-www-form-urlencoded data:
+</p>
+
+<p>Example request:</p>
+
+<pre>
+POST /api/storage_snapshots?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+Content-Length: 22
+Content-Type: application/x-www-form-urlencoded
+
+volume_id=vol-99fbe5f2
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 201 Created
+Date: Thu, 28 Jul 2011 21:46:48 GMT
+Content-Length: 329
+
+&lt;?xml version='1.0' encoding='utf-8' ?&gt;
+&lt;storage_snapshot href='http://localhost:3001/api/storage_snapshots/snap-d5a1c9b4' id='snap-d5a1c9b4'&gt;
+  &lt;created&gt;Thu Jul 28 21:46:12 UTC 2011&lt;/created&gt;
+  &lt;storage_volume href='http://localhost:3001/api/storage_volumes/vol-99fbe5f2' id='vol-99fbe5f2'&gt;&lt;/storage_volume&gt;
+&lt;/storage_snapshot&gt;
+</pre>
+
+<h4>Delete a storage snapshot</h4>
+
+<p>
+To delete the specified storagesnapshot use call <strong>DELETE /api/storage_snapshots/:id</strong>. The operation returns a <strong>HTTP 204 No Content</strong> after a succesful operation:
+</p>
+
+<p>Example request:</p>
+
+<pre>
+DELETE /api/storage_snapshots/snap-dda6cebc?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 204 No Content
+Date: Thu, 28 Jul 2011 22:26:07 GMT
+</pre>
+
+  </div>
+</div>
+
+<a class="btn btn-inverse btn-large" style="float: right" href="/blob-storage.html">Blob storage <i class="icon-arrow-right icon-white" style="vertical-align:baseline"> </i></a>
+
+<br/>

Added: deltacloud/trunk/site/content/supported-providers.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/supported-providers.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/supported-providers.md (added)
+++ deltacloud/trunk/site/content/supported-providers.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,417 @@
+---
+site_name: Deltacloud API
+title: Supported Providers
+---
+<br/>
+<h3>Driver functionality and Credentials</h3>
+
+<h4>Compute Driver Functionality</h4>
+<table class="table-bordered table-striped table-condensed">
+  <thead>
+    <tr>
+      <th class='emptycell'>&nbsp;</th>
+      <th>
+        Create new instances
+      </th>
+      <th>
+        Start stopped instances
+      </th>
+      <th>
+        Stop running instances
+      </th>
+      <th>
+        Reboot running instances
+      </th>
+      <th>
+        Destroy instances
+      </th>
+      <th>
+        List all/get details about hardware profiles
+      </th>
+      <th>
+        List all/get details about realms
+      </th>
+      <th>
+        List all/get details about images
+      </th>
+      <th>
+        List all/get details about instances
+      </th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td class='provider'>
+        <strong>Amazon EC2</strong>
+      </td>
+      <td>yes</td>
+      <td>no</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      </p>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Eucalyptus</strong>
+      </td>
+      <td>yes</td>
+      <td>no</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>IBM SBC</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>GoGrid</strong>
+      </td>
+      <td>yes</td>
+      <td>no</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>OpenNebula</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Rackspace</strong>
+      </td>
+      <td>yes</td>
+      <td>no</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>RHEV-M</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>RimuHosting</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Terremark</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>vSphere</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>OpenStack</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+  </tbody>
+</table>
+<br/>
+<h4>Storage Driver Functionality</h4>
+<table class="table-bordered table-striped table-condensed">
+  <thead>
+    <tr>
+      <th class='emptycell'>&nbsp;</th>
+      <th>
+        Create new buckets
+      </th>
+      <th>
+        Update/delete buckets
+      </th>
+      <th>
+        Create new blobs
+      </th>
+      <th>
+        Update/delete blobs
+      </th>
+      <th>
+        Read/write blob attributes
+      </th>
+      <th>
+        Read/write individual blob attributes
+      </th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td class='provider'>
+        <strong>Amazon S3</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Eucalyptus Walrus</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Rackspace CloudFiles</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Microsoft Azure</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+    <tr>
+      <td class='provider'>
+        <strong>Google Storage</strong>
+      </td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+      <td>yes</td>
+    </tr>
+  </tbody>
+</table>
+
+<br/>
+
+<h4 id="credentials">Cloud provider credentials</h4>
+<table class="table-bordered table-striped table-condensed">
+  <thead>
+    <tr>
+      <th>Cloud</th>
+      <th>Driver</th>
+      <th>Username</th>
+      <th>Password</th>
+      <th>Notes</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align:left">
+        <strong>mock</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">mock</span></td>
+      <td style="text-align:left"><span style="font-size:x-small">mockuser</span></td>
+      <td style="text-align:left"><span style="font-size:x-small">mockpassword</span></td>
+      <td style="text-align:left">The mock driver doesn't talk to any cloud; it just pretends to be a cloud.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>Amazon EC2/S3</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">ec2</span></td>
+      <td style="text-align:left">Access Key ID</td>
+      <td style="text-align:left">Secret Access Key</td>
+      <td style="text-align:left">This information can be found on the <a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key">Security Credentials</a> page in your AWS account.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>Eucalyptus</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">eucalyptus</span></td>
+      <td style="text-align:left">Access Key ID</td>
+      <td style="text-align:left">Secret Access Key</td>
+      <td style="text-align:left"></td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>GoGrid</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">gogrid</span></td>
+      <td style="text-align:left">API Key</td>
+      <td style="text-align:left">Shared Secret</td>
+      <td style="text-align:left">Go to <span style="font-size:x-small">My Account > API Keys</span> for <a href="https://my.gogrid.com/gogrid/com.servepath.gogrid.GoGrid/index.html">your account</a> and click on the key you want to use to find the shared secret.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>IBM SBC</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">sbc</span></td>
+      <td style="text-align:left">Username</td>
+      <td style="text-align:left">Password</td>
+      <td style="text-align:left"></td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>Microsoft Azure (Storage Account only)</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">azure</span></td>
+      <td style="text-align:left">Public Storage Account Name</td>
+      <td style="text-align:left">Primary Access Key</td>
+      <td style="text-align:left">The Storage Account Name is chosen when you create the service (e.g. name in http://name.blob.core.windows.net/). This and the access key are available from the service control panel.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>OpenNebula</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">opennebula</span></td>
+      <td style="text-align:left">OpenNebula user</td>
+      <td style="text-align:left">OpenNebula password</td>
+      <td style="text-align:left">Set the environment variable OCCI_URL to the address on which OpenNebula's OCCI server is listening.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>Rackspace Cloud Servers/Cloud Files</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">rackspace</span></td>
+      <td style="text-align:left">Rackspace user name</td>
+      <td style="text-align:left">API Key</td>
+      <td style="text-align:left">Obtain the key from the <a href="https://manage.rackspacecloud.com/APIAccess.do">API Access</a> page in your control panel.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>RHEV-M</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">rhevm</span></td>
+      <td style="text-align:left"><a href="http://markmc.fedorapeople.org/rhevm-api/en-US/html/chap-REST_API_Guide-Authentication.html">RHEV-M user name plus Windows domain</a>, <span style="font-size:x-small"> e.g., admin@rhevm.example.com</span></td>
+      <td style="text-align:left">RHEV-M password</td>
+      <td style="text-align:left">Set environment variable API_PROVIDER to the URL of the RHEV-M REST API endpoint. </td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>Rimuhosting</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">rimuhosting</span></td>
+      <td style="text-align:left">not used (?)</td>
+      <td style="text-align:left">API Key</td>
+      <td style="text-align:left"></td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>Terremark</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">terremark</span></td>
+      <td style="text-align:left">Username</td>
+      <td style="text-align:left">Password</td>
+      <td style="text-align:left"></td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>VMware vSphere</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">vsphere</span></td>
+      <td style="text-align:left">vSphere user</td>
+      <td style="text-align:left">vSphere user password</td>
+      <td style="text-align:left">Set environment variable API_PROVIDER to the hostname of the vSphere server.</td>
+    </tr>
+    <tr>
+      <td style="text-align:left">
+        <strong>OpenStack</strong>
+      </td>
+      <td style="text-align:left"><span style="font-size:x-small">openstack</span></td>
+      <td style="text-align:left">OpenStack user</td>
+      <td style="text-align:left">OpenStack user password</td>
+      <td style="text-align:left">Set environment variable API_PROVIDER to the URL of OpenStack API entrypoint.</td>
+    </tr>
+  </tbody>
+</table>

Added: deltacloud/trunk/site/content/usage.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/usage.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/usage.md (added)
+++ deltacloud/trunk/site/content/usage.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,153 @@
+--- 
+site_name: Deltacloud API
+title: Usage
+---
+<br/>
+
+<h3 id="usingapi">Using API</h3>
+
+<h3 id="clients">Clients</h3>
+Instead of dealing with HTTP interface you can use various clients to communicate with Deltacloud server.
+
+<h3>The Deltacloud Ruby Client</h3>
+You need to install Ruby client seperately to the Deltacloud API server. Assuming you already have Ruby and RubyGems setup, you can install the Deltacloud client by simply typing: 
+
+<pre>$ sudo gem install deltacloud-client</pre>
+
+<p>The Deltacloud client consists of a Ruby library (packaged as a Ruby gem) which you can use to interact with the Deltacloud server and control your cloud infrastructure across cloud providers. <p>
+
+<p>To use the client, you must require <strong>deltacloud</strong>:</p>
+
+<pre>require 'deltacloud'</pre>
+
+<p>Connect to a Deltacloud provider:</p>
+
+<pre>
+require 'deltacloud'
+
+api_url      = 'http://localhost:3001/api'
+api_name     = 'mockuser'
+api_password = 'mockpassword'
+
+client = DeltaCloud.new( api_name, api_password, api_url )
+
+# work with client here
+</pre>
+
+<p>In addition to creating a client, you can specify operations within a block included on the initialization.</p>
+
+<pre>
+DeltaCloud.new( api_name, api_password, api_url ) do |client|
+  # work with client here
+end
+</pre>
+
+<p>In case of a failure, any underlying HTTP transport exceptions will be thrown away and returned back to the caller.</p>
+
+<p>
+To work with another driver, just switch the client:
+</p>
+
+<pre>
+client = DeltaCloud.new( api_name, api_password, api_url )
+
+# switch the client to use EC2 driver
+ec2 = client.with_config(:driver => :ec2)
+
+# switch the client to use OpenStack driver
+openstack = client.with_config(:driver => :openstack)
+</pre>
+
+<a class="btn btn-inverse btn-large" style="float: right" href="/ruby-client.html">Work with the Ruby client</a>
+
+<br/>
+<br/>
+
+<h3>HTTP clients - cURL</h3>
+
+<p>
+Basically, you interact with the Deltacloud server via HTTP calls, so you can use any HTTP client to talk to Deltacloud using the <a href="/rest-api.html">REST API</a>.
+</p>
+
+<p>
+<a href="http://curl.haxx.se/">cURL</a> is a popular command line tool available on most modern linux distributions. See the following examples to learn how to use cURL to interact with Deltacloud. There is an assumption that the Deltacloud server is running on locahost:3001 and was started with the 'ec2' driver (i.e., deltacloudd -i ec2 ).
+</p>
+
+<p>
+Get a list of all <strong>images</strong> available in the back-end cloud:
+</p>
+
+<pre>
+curl  --user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+"http://localhost:3001/api/images?format=xml"
+</pre>
+
+<p>
+The cURL <strong>--user</strong> option is used to specify the <strong>username:password</strong> credentials for access to the back-end cloud provider (Amazon EC2 in this case).</p>
+
+<p>Create a new <strong>instance</strong> from the image with id 'ami-f51aff9c', in realm 'us-east-1c', with the hardware profile 'c1.medium', in firewall 'default':
+</p>
+
+<pre>
+curl -X POST -F "keyname=eftah" -F "image_id=ami-f51aff9c"
+-F "realm_id=us-east-1c" -F "hwp_id=c1.medium" -F "firewalls1=default"
+--user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+"http://localhost:3001/api/instances?format=xml"
+</pre>
+
+<p>Delete a <strong>firewall</strong> called 'develgroup':</p>
+
+<pre>
+curl -X DELETE
+--user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+http://localhost:3001/api/firewalls/develgroup?format=xml
+</pre>
+
+<p>
+Create a <strong>blob</strong> called 'my_new_blob' within the bucket 'mybucket' from a local file with <strong>HTTP PUT</strong> specifying its content type and setting some metadata <strong>key:value</strong> pairs:
+</p>
+
+<pre>
+curl -H 'content-type: text/html' -H 'X-Deltacloud-Blobmeta-Name:mariosblob'
+-H 'X-Deltacloud-Blobmeta-Version:2.1' --upload-file
+"/home/marios/Desktop/somefile.html"
+--user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+http://localhost:3001/api/buckets/mybucket/my_new_blob?format=xml
+</pre>
+
+<p>
+Retrieve <strong>blob metadata</strong> for the blob called 'my_new_blob':
+</p>
+
+<pre>
+curl -iv -X HEAD
+--user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+http://localhost:3001/api/buckets/mybucket/my_new_blob?format=xml
+</pre>
+
+<p>
+The <strong>'-iv'</strong> flags will ensure that cURL displays the request and response headers (blob metadata are reported in the response headers with an empty response body).
+</p>
+
+<h3>Libdeltacloud Client (C library)</h3>
+<p>
+Libdeltacloud is a C/C++ library for accessing the Deltacloud API. It exports convenient structures and functions for manipulating cloud objects through the Deltacloud API.
+</p>
+
+Get the source code:
+<pre>
+$ git clone git://git.fedorahosted.org/deltacloud/libdeltacloud.git
+</pre>
+
+<p>
+As of version 0.9, libdeltacloud is mostly <strong>API stable</strong>, but not ABI stable. The difference between the two is subtle but important. A library that is ABI (Application Binary Interface) stable means, that programs using the library don't need to be modified nor re-compiled when a new version of the library comes out. A library that is API (Application Programming Interface) stable means that programs using the library don't need to be modified, but may need to be re-compiled when a new version of the library comes out. The reason is that the sizes of structures in the library might change, which can lead to a misunderstanding between what the library and the program thinks the size of a structure is.
+</p>
+
+<p>
+Due to the magic of libtool versioning, programs built against an older version of libdeltacloud will refuse to run against a newer version of libdeltacloud if the size of the structures has changed. If this happens, then the program must be recompiled against the newer libdeltacloud. 
+</p>
+
+<a class="btn btn-inverse btn-large" style="float: right" href="http://deltacloud.apache.org/libdeltacloud/index.html">Libdeltacloud documentation</a>
+
+<br/>
+

Added: deltacloud/trunk/site/content/use-the-api.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/use-the-api.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/use-the-api.md (added)
+++ deltacloud/trunk/site/content/use-the-api.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,4 @@
+--- 
+site_name: Deltacloud API
+title: Use the API
+---

Added: deltacloud/trunk/site/content/write-new-driver.md
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/content/write-new-driver.md?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/content/write-new-driver.md (added)
+++ deltacloud/trunk/site/content/write-new-driver.md Mon Jun 25 15:05:02 2012
@@ -0,0 +1,246 @@
+---
+site_name: Deltacloud API
+title: Write New Provider Driver
+---
+
+<br/>
+
+<ul class="breadcrumb">
+  <li>
+    <a href="/how-to-contribute.html#how">How to contribute?</a> <span class="divider">/</span>
+  </li>
+  <li class="active">Write a provider driver</li>
+</ul>
+
+<h3 id="driver">Write a provider driver</h3>
+
+<p>The deltacloud drivers are stored in <strong>deltacloud/server/lib/deltacloud/drivers</strong>.</p>
+
+<ol>
+
+  <li>
+
+  <p>
+  To add a driver for a hypotetical <strong>Foo</strong> cloud, add a directory into /drivers/ and then add a file for a driver itself:
+  </p>
+
+<pre>deltacloud/server/lib/deltacloud/drivers/foo/foo_driver.rb</pre>
+
+  <p>You need to define a class <strong>Deltacloud::Drivers::Foo::FooDriver</strong> to this file. The class has to be a subclass of the <strong>Deltacloud::BaseDriver</strong>.
+  </p>
+
+  </li>
+  <li>
+
+  <p>Set up which <a href="/rest-api.html#">collections</a> the provider for you are writing the driver supports - e.g. images, instances, keys, buckets/blobs (storage), etc.:</p>
+
+<pre>
+def supported_collections
+  DEFAULT_COLLECTIONS + [ :buckets ] - [ :storage_snapshots, :storage_volumes ]
+end
+</pre>
+
+  <p>This declares that the driver supports the <strong>DEFAULT_COLLECTIONS</strong> (defined in <strong>deltacloud/server/lib/drivers.rb</strong>) except <a href="/rest-api.html#">storage_snapshots</a> and <a href="/rest-api.html#">storage_volumes</a> and also supports the <a href="/rest-api.html#">buckets</a> collection. A storage only cloud provider driver would support only the buckets collection.</p>
+
+  </li>
+  <li>
+  
+  <p>
+  Define the methods for each collection that your driver supports. The methods, as well as the routes to them, are defined in <strong>deltacloud/server/lib/deltacloud/server.rb</strong>. You can look at the existing drivers to get the idea of how to implement a specific method.
+  </p>
+  
+  </li>
+  <li>
+
+  <p>
+  Consider how the driver will be communicating with the cloud provider. Many of the existing drivers use external ruby gems for this purpose. For example, the <strong>ec2</strong> driver uses the <a href="https://github.com/appoxy/aws/">aws</a> gem, the <strong>rackspace</strong> driver uses the <a href="https://github.com/rackspace/ruby-cloudfiles">cloudfiles</a> and <a href="https://github.com/rackspace/ruby-cloudservers">cloudservers</a> gems. However, other drivers implement their own clients to communicate with the cloud provider, such as the IBM SBC driver and the Gogrid driver. This also explains why some drivers in the <strong>/drivers</strong> directory contain only the provider <strong>_driver.rb</strong> file, while the others also define a <strong>provider_client.rb</strong> file. It is entirely up to you, whether you write your own client or use an existing one.
+  </p>
+  
+  </li>
+</ol>
+
+<p>Thus, your driver for the cloud provider Foo may look like:</p>
+
+<pre>
+require 'deltacloud/base_driver'
+require 'foo_lib' # a library for talking to the foo cloud
+
+module Deltacloud
+  module Drivers
+    module Foo
+
+class FooDriver < Deltacloud::BaseDriver
+
+    def supported_collections
+      DEFAULT_COLLECTIONS + [ :buckets ]
+    end
+
+    def images(credentials, opts={})
+      client = new_foo_client(credentials)
+      # Use client to get a list of images from the back-end cloud and then create a Deltacloud Image object for each of these.
+      # Filter the result (eg specific image requested) and return to user.
+    end
+
+    def realms(credentials, opts={})
+      (...)
+    end
+
+    def instances(credentials, opts={})
+      (...)
+    end
+
+    ... ETC
+
+    private
+
+    def new_foo_client(credentials)
+      client = FooLib::Service.new({:user => credentials.user,
+:pass => credentials.password })
+    end
+
+end
+        end
+      end
+    end
+</pre>
+
+<p>
+An important method for drivers that implement the <a href="/rest-api.html#">instances</a> collection is <strong>instance_states</strong>. This method represents the finite-state-machine for instances which varies across cloud providers. In some clouds an instance may be in the 'running' state after creation, whereas in other clouds an instance may need to be started explicitly. For example:
+</p>
+
+<pre>
+define_instance_states do
+  start.to( :pending )          .on( :create )
+  pending.to( :running )        .automatically
+  running.to( :running )        .on( :reboot )
+  running.to( :shutting_down )  .on( :stop )
+  shutting_down.to( :stopped )  .automatically
+  stopped.to( :finish )         .automatically
+end
+</pre>
+
+<p>
+The voodoo used here (i.e. definition of .to and .on etc) is defined in <strong>/deltacloud/server/lib/deltacloud/state_machine.rb</strong>.
+</p>
+
+<p>Valid states are:</p>
+
+<ul>
+  <li><strong>:begin</strong></li>
+  <li><strong>:pending</strong></li>
+  <li><strong>:running</strong></li>
+  <li><strong>:shutting_down</strong></li>
+  <li><strong>:stopped</strong></li>
+  <li><strong>:end</strong></li>
+</ul>
+
+<p>The instance is located in the<strong>:begin</strong> state before being created. Immediately after being destroyed the instance is removed to the <strong>:end</strong> state.</p>
+
+<p>Valid transition actions are:</p>
+
+<ul>
+  <li><strong>:stop</strong></li>
+  <li><strong>:start</strong></li>
+  <li><strong>:reboot</strong></li>
+</ul>
+
+<p>The action <strong>:automatically</strong> may be used to indicate a tranisition that may occur without an action being triggered (see the example above).</p>
+
+<p>You can implement some other methods according to the collections you will be supporting:</p>
+
+<ul>
+  <li><strong>hardware_profiles(credentials, opts=nil)</strong></li>
+  <li><strong>images(credentials, opts=nil)</strong></li>
+  <li><strong>realms(credentials, opts=nil)</strong></li>
+  <li><strong>instances(credentials, opts=nil)</strong></li>
+  <li><strong>create_instance(credentials, image_id, opts)</strong></li>
+  <li><strong>reboot_instance(credentials, id)</strong></li>
+  <li><strong>stop_instance(credentials, id)</strong></li>
+  <li><strong>destroy_instance(credentials, id)</strong></li>
+</ul>
+
+<p>
+The <strong>hardware_profiles(...)</strong> method should return an array of HardwareProfile objects. The <strong>opts</strong> hash, if present, must be inspected for <strong>:id</strong> and <strong>:architecture</strong> keys. If these keys are available, the results should be filtered by the value associated with each key. The <strong>filter_on(...)</strong> helper method is used for the filtering and as you can see from existing driver method definitions, is invoked in many of the driver collection methods:
+</p>
+
+<pre>
+def hardware_profiles(credentials, opts=nil)
+  hardware_profiles = # get all hardware profiles from provider
+  hardware_profiles = filter_on( hardware_profiles, :id, opts )
+  hardware_profiles = filter_on( hardware_profiles, :architecture, opts )
+  return hardware_profiles
+end
+</pre>
+
+<p>
+Once you've implemented some of the methods for your driver you should test if the driver is working correctly. Before you'll do this, you need to create a yaml file for your driver so that the Deltacloud server recognizes the driver. Assuming you've written the driver for cloud Foo and you've created the file foo_driver.rb (containing the class Deltacloud::Drivers::Foo::FooDriver), you need to drop a file into <strong>/deltacloud/server/config/drivers</strong> called <strong>foo.yaml</strong>, which contains:
+</p>
+
+<pre>
+---
+:foo:
+  :name Foo
+</pre>
+
+<p>Then, you can start the Deltacloud server:</p>
+
+<pre>
+deltacloudd -i foo
+</pre>
+
+<p>
+  <a class="btn btn-inverse btn-large" href="/how-to-contribute.html"><i class="icon-arrow-left icon-white" style="vertical-align:baseline"> </i> Back</a>
+  <a class="btn btn-inverse btn-large" style="float:right" data-toggle="modal" href="#tests">Test the driver</a>
+</p>
+
+<div class="modal hide" id="tests">
+  <div class="modal-header">
+    <a class="close" data-dismiss="modal">×</a>
+    <h3>Writing and running tests</h3>
+  </div>
+  <div class="modal-body">
+
+<p>
+You should add a test to every new feature or new driver you create to make sure, that everything is running as expected. There are two different directories in the Deltacloud project, where the tests are stored: <strong>/deltacloud/server/tests</strong> for Unit tests for drivers and <strong>/deltacloud/tests</strong> for Cucumber tests.
+</p>
+
+<p>Initiate the Unit tests:</p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ rake test
+</pre>
+
+<p>This will invoke all Unit tests defined in <strong>/deltacloud/server/tests</strong> by inspecting the Rakefile in <strong>/deltacloud/server</strong>. To invoke a specific driver tests type:</p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ rake test:rackspace
+  _OR_
+$ rake test:mock
+  _etc_
+</pre>
+
+<p>Initiate the Cucumber tests:</p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ rake cucumber
+</pre>
+
+<p>Alternatively, you can invoke the cucumber tests directly without using Rakefile: </p>
+
+<pre>
+$ cd /path/to/deltacloud/server
+$ cucumber ../tests/mock
+  _OR_
+$ cucumber ../tests/ec2
+  _etc_
+</pre>
+
+  </div>
+  <div class="modal-footer">
+    <a href="#" class="btn btn-primary" data-dismiss="modal">Close</a>
+  </div>
+</div>
+

Added: deltacloud/trunk/site/layouts/.DS_Store
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/layouts/.DS_Store?rev=1353588&view=auto
==============================================================================
Files deltacloud/trunk/site/layouts/.DS_Store (added) and deltacloud/trunk/site/layouts/.DS_Store Mon Jun 25 15:05:02 2012 differ

Added: deltacloud/trunk/site/layouts/default.html
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/layouts/default.html?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/layouts/default.html (added)
+++ deltacloud/trunk/site/layouts/default.html Mon Jun 25 15:05:02 2012
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title><%= @item[:title]%></title>
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <!-- Le JavaScript -->
+    <script src="/assets/js/jquery-1.7.1.min.js" type="text/javascript"></script>
+    <script src="/assets/js/bootstrap-dropdown.js" type="text/javascript"></script>
+    <script src="/assets/js/jquery.tweet.js" type="text/javascript"></script>
+    <script src="/assets/js/application.js" type="text/javascript"></script>
+    <script src="/assets/js/bootstrap-transition.js"></script>
+    <script src="/assets/js/bootstrap-alert.js"></script>
+    <script src="/assets/js/bootstrap-modal.js"></script>
+    <script src="/assets/js/bootstrap-scrollspy.js"></script>
+    <script src="/assets/js/bootstrap-tab.js"></script>
+    <script src="/assets/js/bootstrap-tooltip.js"></script>
+    <script src="/assets/js/bootstrap-popover.js"></script>
+    <script src="/assets/js/bootstrap-button.js"></script>
+    <script src="/assets/js/bootstrap-collapse.js"></script>
+    <script src="/assets/js/bootstrap-carousel.js"></script>
+    <script src="/assets/js/bootstrap-typeahead.js"></script>
+
+    <!-- Le styles -->
+    <link href="/assets/css/bootstrap.css" rel="stylesheet">
+    <link href="/assets/css/application.css" rel="stylesheet">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico">
+  </head>
+
+  <body>
+
+    <div class="navbar navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container">
+          <a class="brand" href="/"><img src="/assets/img/logo.png" width="152"
+            alt="Deltacloud API"/></a>
+          <%= render '/partials/default/nav'%>
+        </div>
+      </div>
+
+    </div>
+
+    <div class="container content">
+
+      <%= yield%>
+
+      <footer class="footer">
+        <p class="pull-right"><span class='icon-circle-arrow-up'>&nbsp;</span><a href="#">Back to top</a></p>
+        <div class='row'>
+          <div class='span3'>
+            <img src="/assets/img/asf.png" alt="Apache Software Foundation"/>
+          </div>
+          <div class='span9'>
+            <strong>Apache Deltacloud</strong> is a top-level project at the <a
+              href="http://www.apache.org">Apache Software Foundation</a>,
+            having graduated from the ASF Incubator in October
+            2011. Through a collaborative and meritocratic development process, Apache
+            projects deliver enterprise-grade, freely available software products that
+            attract large communities of users. 
+          </div>
+        </div>
+      </footer>
+
+    </div> <!-- /container -->
+
+  </body>
+</html>

Added: deltacloud/trunk/site/layouts/home.html
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/layouts/home.html?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/layouts/home.html (added)
+++ deltacloud/trunk/site/layouts/home.html Mon Jun 25 15:05:02 2012
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title><%= @item[:title]%></title>
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <!-- Le JavaScript -->
+    <script src="/assets/js/jquery-1.7.1.min.js" type="text/javascript"></script>
+    <script src="/assets/js/bootstrap-dropdown.js" type="text/javascript"></script>
+    <script src="/assets/js/jquery.tweet.js" type="text/javascript"></script>
+    <script src="/assets/js/application.js" type="text/javascript"></script>
+    <script src="/assets/js/bootstrap-transition.js"></script>
+    <script src="/assets/js/bootstrap-alert.js"></script>
+    <script src="/assets/js/bootstrap-modal.js"></script>
+    <script src="/assets/js/bootstrap-scrollspy.js"></script>
+    <script src="/assets/js/bootstrap-tab.js"></script>
+    <script src="/assets/js/bootstrap-tooltip.js"></script>
+    <script src="/assets/js/bootstrap-popover.js"></script>
+    <script src="/assets/js/bootstrap-button.js"></script>
+    <script src="/assets/js/bootstrap-collapse.js"></script>
+    <script src="/assets/js/bootstrap-carousel.js"></script>
+    <script src="/assets/js/bootstrap-typeahead.js"></script>
+
+    <!-- Le styles -->
+    <link href="/assets/css/bootstrap.css" rel="stylesheet">
+    <link href="/assets/css/application.css" rel="stylesheet">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico">
+  </head>
+
+  <body>
+
+    <div class="navbar navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container">
+          <a class="brand" href="/"><img src="/assets/img/logo.png" width="152"
+            alt="Deltacloud API"/></a>
+          <%= render '/partials/default/nav'%>
+        </div>
+      </div>
+
+    </div>
+
+    <div class="container home">
+
+      <%= yield%>
+
+      <footer class="footer">
+        <p class="pull-right"><span class='icon-circle-arrow-up'>&nbsp;</span><a href="#">Back to top</a></p>
+        <div class='row'>
+          <div class='span3'>
+            <img src="/assets/img/asf.png" alt="Apache Software Foundation"/>
+          </div>
+          <div class='span9'>
+            <strong>Apache Deltacloud</strong> is a top-level project at the <a
+              href="http://www.apache.org">Apache Software Foundation</a>,
+            having graduated from the ASF Incubator in October
+            2011. Through a collaborative and meritocratic development process, Apache
+            projects deliver enterprise-grade, freely available software products that
+            attract large communities of users. 
+          </div>
+        </div>
+      </footer>
+
+    </div> <!-- /container -->
+
+  </body>
+</html>

Added: deltacloud/trunk/site/layouts/partials/default/nav.html
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/layouts/partials/default/nav.html?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/layouts/partials/default/nav.html (added)
+++ deltacloud/trunk/site/layouts/partials/default/nav.html Mon Jun 25 15:05:02 2012
@@ -0,0 +1,40 @@
+<ul class="nav top-nav">
+  <li><a href="/">Home</a></li>
+  <li class="dropdown">
+    <a href="#" class="dropdown-toggle" data-toggle="dropdown">About<b class="caret"></b></a>
+    <ul class="dropdown-menu">
+      <li><a href="/about.html">What is Deltacloud?</a></li>
+      <li><a href="/supported-providers.html">Supported Providers</a></li>
+    </ul>
+  </li>
+  <li class="dropdown">
+    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Installation<b class="caret"></b></a>
+    <ul class="dropdown-menu">
+      <li><a href="/install-deltacloud.html">Install Deltacloud</a></li>
+      <li><a href="/run-deltacloud-server.html">Run the Deltacloud Server</a></li>
+    </ul>
+  </li>
+  <li class="dropdown">
+    <a href="/usage.html" class="dropdown-toggle" data-toggle="dropdown">Usage<b class="caret"></b></a>
+    <ul class="dropdown-menu">
+      <li><a href="/usage.html#usingapi">Using API</a></li>
+      <li><a href="/usage.html#clients">Client Libraries</a></li>
+      <li><a href="/command-tools.html">Command Line Tools</a></li>
+    </ul>
+  </li>
+  <li class="dropdown">
+    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contribute<b class="caret"></b></a>
+    <ul class="dropdown-menu">
+      <li><a href="/getting-sources.html">Getting Sources</a></li>
+      <li><a href="/how-to-contribute.html">How Can I Contribute?</a></li>
+    </ul>
+  </li>
+  <li class="dropdown">
+    <a href="#" class="dropdown-toggle" data-toggle="dropdown">API<b class="caret"></b></a>
+    <ul class="dropdown-menu">
+      <li><a href="/rest-api.html">REST API</a></li>
+      <li><a href="/drivers.html">Drivers API</a></li>
+    </ul>
+  </li>
+  <li><a href="/contact.html">Contact</a></li>
+</ul>

Added: deltacloud/trunk/site/lib/bootstrap.rb
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/lib/bootstrap.rb?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/lib/bootstrap.rb (added)
+++ deltacloud/trunk/site/lib/bootstrap.rb Mon Jun 25 15:05:02 2012
@@ -0,0 +1,11 @@
+class BootstrapFilter < Nanoc3::Filter
+
+  identifier :bootstrap
+
+  def run(content, cmd, params={})
+    puts "***** RUNNING SHELL CMD *****"
+    system "cd ./content/assets/less; lessc ./bootstrap.less > .././css/bootstrap.css"
+
+  end
+
+end

Added: deltacloud/trunk/site/lib/default.rb
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/lib/default.rb?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/lib/default.rb (added)
+++ deltacloud/trunk/site/lib/default.rb Mon Jun 25 15:05:02 2012
@@ -0,0 +1,2 @@
+# All files in the 'lib' directory will be loaded
+# before nanoc starts compiling.

Added: deltacloud/trunk/site/lib/helpers.rb
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/lib/helpers.rb?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/lib/helpers.rb (added)
+++ deltacloud/trunk/site/lib/helpers.rb Mon Jun 25 15:05:02 2012
@@ -0,0 +1 @@
+include Nanoc3::Helpers::Rendering
\ No newline at end of file

Added: deltacloud/trunk/site/lib/shellcmd.rb
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/lib/shellcmd.rb?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/lib/shellcmd.rb (added)
+++ deltacloud/trunk/site/lib/shellcmd.rb Mon Jun 25 15:05:02 2012
@@ -0,0 +1,14 @@
+require 'open3'
+
+class ShellCmdFilter < Nanoc3::Filter
+  identifier :shellcmd
+  #type :binary
+
+  def run(content, cmd, params={}) #params={ :cmd => "sed s/foo/bar/" })
+    Open3.popen3(cmd) do |stdin, stdout, stderr|
+      stdin.write(content)
+      stdin.close()
+      stdout.read()
+    end
+  end
+end

Added: deltacloud/trunk/site/output/#about.md#
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/output/%23about.md%23?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/output/#about.md# (added)
+++ deltacloud/trunk/site/output/#about.md# Mon Jun 25 15:05:02 2012
@@ -0,0 +1,41 @@
+---
+site_name: Deltacloud API
+title: About
+---
+<div class="row">
+
+<div class="span4">
+
+<br/>
+
+<h2>About Deltacloud</h2>
+<p>Deltacloud provides backward compatibility across versions and long-term stability for scripts, tools and applications. Using single API Deltacloud enables management of resources in different clouds.</p>
+
+<p>Start an instance on an internal cloud, then with the same code start another on EC2 or RHEV-M.</p>
+</div>
+
+the API server and drivers necessary for connecting to cloud providers
+<br/>
+
+<div class="span8">
+  <img src="/assets/img/diagram-soa.png" alt="Deltacloud API SOA diagram" align="center"/>
+</div>
+
+<div class="span12">
+
+<br/>
+<br/>
+<h2>How does Deltacloud work?</h2>
+<p>Deltacloud contains a cloud abstraction API. The API works as a wrapper around a large number of clouds, abstracting their differences. For every <a href="/supported-providers.html" rel="tooltip" title="currently supported providers">provider</a> there is a driver "speaking" cloud provider's native API. It frees you from dealing with the particulars of each cloud's API.</p>
+
+<p>Install Deltacloud and start the <strong>deltacloudd</strong> daemon server. You can use your favourite HTTP client to talk to the server using the Deltacloud REST API. Deltacloud even comes with a HTML interface so you can simply use your web browser to control your cloud infrastructure straight out of the box.</p>
+<br/>
+
+<img src="/assets/img/deltacloud_concept.gif" alt="Deltacloud concept scheme"/>
+
+<br/>
+
+<a class="btn btn-inverse btn-large" style="float: right" href="/install-deltacloud.html">Get Deltacloud</a>
+
+</div>
+</div>

Added: deltacloud/trunk/site/output/#api-entry-point.md#
URL: http://svn.apache.org/viewvc/deltacloud/trunk/site/output/%23api-entry-point.md%23?rev=1353588&view=auto
==============================================================================
--- deltacloud/trunk/site/output/#api-entry-point.md# (added)
+++ deltacloud/trunk/site/output/#api-entry-point.md# Mon Jun 25 15:05:02 2012
@@ -0,0 +1,227 @@
+---
+site_name: Deltacloud API
+title: API entry point
+---
+<br/>
+
+<div class="row">
+  <div class="span9">
+
+<h3 id="api-entry">The API entry point</h3>
+
+<p>
+Any part of the official API can be reached through the main entry point, by default <a href="http://localhost:3001/api">http://localhost:3001/api</a>. The entry point lists the resources for the current cloud provider, which the server knows about. For example, for the Amazon EC2 driver these are:
+</p>
+
+<ul style="margin-bottom:0px">
+<li>instances</li>
+<li>instance states</li>
+<li>images</li>
+<li>realms</li>
+</ul>
+
+  </div>
+  <div class="span3">
+
+<ul class="nav nav-list well">
+  <li class="nav-header">
+    REST API
+  </li>
+  <li><a href="/rest-api.html">Introduction</a></li>
+  <li class="active"><a href="#api-entry">API entry point</a></li>
+    <ul class="nav nav-list">
+      <li><a href="#feature">Features</a></li>
+    </ul>
+  <li><a href="/compute-resources.html">Compute resources</a></li>
+  <li><a href="/storage-resources.html">Storage resources</a></li>
+</ul>
+
+  </div>
+</div>
+
+<ul style="margin-top:0px">
+<li>hardware profiles</li>
+<li>keys</li>
+<li>buckets</li>
+<li>storage volumes</li>
+<li>storage snapshots</li>
+<li>load balancers</li>
+<li>addresses</li>
+<li>firewalls</li>
+</ul>
+
+<p>Example request:</p>
+
+<pre>
+GET /api?format=xml HTTP/1.1
+Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
+User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
+Host: localhost:3001
+Accept: */*
+</pre>
+
+<p>Server response:</p>
+
+<pre>
+HTTP/1.1 200 OK
+Content-Type: application/xml
+Content-Length: 1439
+
+&lt;api driver='ec2' version='0.3.0'&gt;
+  &lt;link href='http://localhost:3001/api/instance_states' rel='instance_states'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/drivers' rel='drivers'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/addresses' rel='addresses'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/hardware_profiles' rel='hardware_profiles'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/firewalls' rel='firewalls'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/storage_volumes' rel='storage_volumes'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/images' rel='images'&gt;
+    &lt;feature name='owner_id'&gt;
+    &lt;/feature&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/realms' rel='realms'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/buckets' rel='buckets'&gt;
+    &lt;feature name='bucket_location'&gt;
+    &lt;/feature&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/instances' rel='instances'&gt;
+    &lt;feature name='user_data'&gt;
+    &lt;/feature&gt;
+    &lt;feature name='authentication_key'&gt;
+    &lt;/feature&gt;
+    &lt;feature name='firewalls'&gt;
+    &lt;/feature&gt;
+    &lt;feature name='instance_count'&gt;
+    &lt;/feature&gt;
+    &lt;feature name='attach_snapshot'&gt;
+    &lt;/feature&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/storage_snapshots' rel='storage_snapshots'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/keys' rel='keys'&gt;
+  &lt;/link&gt;
+  &lt;link href='http://localhost:3001/api/load_balancers' rel='load_balancers'&gt;
+  &lt;/link&gt;
+&lt;/api&gt;
+</pre>
+
+<p>
+Some implementations for the Apache Deltacloud API may not support all resource types defined by API. For example, a Deltacloud instance pointing at a storage-only service will not expose compute resources like instances and hardware profiles.
+</p>
+
+<h3 id="feature">Features</h3>
+
+<p>
+The Apache Deltacloud API defines the standard behavior and semantics for each of the resource types as a baseline for any API implementation. It is often desirable to enhance standard API behavior with specific features. The API also defines all features that can be supported by the API implementation - each of them has a fixed predefined meaning. For example, the feature user_name indicates that a user-specified name can be assigned to an instance when it is created. Features are advertised in the top-level entry point as illustrated below:
+</p>
+
+<pre>
+&lt;api driver='mock' version='0.3.0'&gt;
+  ...
+  &lt;link href='http://localhost:3001/api/instances' rel='instances'&gt;
+    &lt;feature name='hardware_profiles'&gt;&lt;/feature&gt;
+    &lt;feature name='user_name'&gt;&lt;/feature&gt;
+    &lt;feature name='authentication_key'&gt;&lt;/feature&gt;
+  &lt;/link&gt;
+  ...
+&lt;/api&gt;
+</pre>
+
+<p>
+These features are available to each collection in the Deltacloud API:
+</p>
+
+<table class="table table-striped table-condensed">
+  <thead>
+    <tr>
+      <th>Feature</th>
+      <th>Collection</th>
+      <th>Operation</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>owner_id</td>
+      <td>Images</td>
+      <td>GET /api/images</td>
+      <td>Allows filtering of the image list by owner_id.</td>
+    </tr>
+    <tr>
+      <td>user_name</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Accepts a user-defined name on instance creation.</td>
+    </tr>
+    <tr>
+      <td>user_data</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Provides user-defined data that is accessible by the running instance.</td>
+    </tr>
+    <tr>
+      <td>user_iso</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Provides a base64 encoded gzipped ISO file accessible as CD-ROM drive by the running instnace.</td>
+    </tr>
+    <tr>
+      <td>user_files</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Accept files that will be placed into the launched instance.</td>
+    </tr>
+    <tr>
+      <td>firewalls</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Put the instance into one or more firewalls on launch.</td>
+    </tr>
+    <tr>
+      <td>authentication_key</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Provides the authentication key to access the instance.</td>
+    </tr>
+    <tr>
+      <td>authentication_password</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Provides the password to access the running instance.</td>
+    </tr>
+    <tr>
+      <td>instance_count</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Specifies the number of instances to launch in one operation.</td>
+    </tr>
+    <tr>
+      <td>attach_snapshot</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Attaches a storage snapshot to an instance as a storage volume.</td>
+    </tr>
+    <tr>
+      <td>sandboxing</td>
+      <td>Instances</td>
+      <td>POST /api/instances</td>
+      <td>Launches an instance from a sandbox image (Gogrid specific).</td>
+    </tr>
+    <tr>
+      <td>bucket_location</td>
+      <td>Buckets</td>
+      <td>POST /api/buckets</td>
+      <td>Specifies a location that the bucket should be created in (e.g. specific cloud-provider datacenter).</td>
+    </tr>
+  </tbody>
+</table>
+
+<a class="btn btn-inverse btn-large" style="float: right" href="/compute-resources.html">Compute resources <i class="icon-arrow-right icon-white" style="vertical-align:baseline"> </i></a>
+
+<br/>



Mime
View raw message