You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by ma...@redhat.com on 2011/08/31 11:06:58 UTC

Site docs update - work in progress

Site documentation update - this is not intended for ack/nack but rather request for comments... this work is still ongoing:

Patch 1/3: Latest updates for the REST API - clarifies use of application/x-www-url-formencoded OR multipart/form-data content types for POST operations. The examples have been modified to use formencoded where appropriate (since it's POST, data still in message body). Plus minor cosmetic changes, added links used by the updated docs and shortening of lines > 80 chars.

Patch 2/3: Easy download/get started instructions - includes some info on deltacloudd flags, ruby client and deltacloudc flags/usage, examples of using curl to interact with Deltacloud. Also moved contact information to new 'Contact' tab in nav menu.

Patch 3/3: Start of developer information - provides main structure but sections still need filling in, ongoing.

This work is still in progress so all comments are very welcome and helpful,

marios


Re: [PATCH 1/3] Updates the REST API to clarify use of application/x-www-form-urlencoded or application/form-data content types for POST operations. Examples are updated to use urlencoded where appropriate. Also minor tidying up of long lines to < 80 chars

Posted by David Lutterkort <lu...@redhat.com>.
On Wed, 2011-08-31 at 12:06 +0300, marios@redhat.com wrote:
> From: marios <ma...@redhat.com>
> 
> 
> Signed-off-by: marios <ma...@redhat.com>
> ---
>  site/content/api.mdown |  359 ++++++++++++++++++++++++++++++++----------------
>  1 files changed, 243 insertions(+), 116 deletions(-)

Looks good. I would remove all the stuff in HTML comments right now,
though; it's unlikely we'll want to resurrect it.

I would also, for all the requests that accept
application/x-www-form-urlencoded, only give an example using that, and
omit a multipart/form-data example.

ACK either way

David



[PATCH 1/3] Updates the REST API to clarify use of application/x-www-form-urlencoded or application/form-data content types for POST operations. Examples are updated to use urlencoded where appropriate. Also minor tidying up of long lines to < 80 chars

Posted by ma...@redhat.com.
From: marios <ma...@redhat.com>


Signed-off-by: marios <ma...@redhat.com>
---
 site/content/api.mdown |  359 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 243 insertions(+), 116 deletions(-)

diff --git a/site/content/api.mdown b/site/content/api.mdown
index 757332f..a59511d 100644
--- a/site/content/api.mdown
+++ b/site/content/api.mdown
@@ -128,6 +128,7 @@ Storage Snapshots, Blob Storage.
 <br/>
 * * *
 
+<a name=authentication>.
 ### 1.3 Authentication
 
 The Deltacloud API server is stateless, and does not keep any information
@@ -138,7 +139,8 @@ and clients have to send the username/password for the backend cloud on every re
 The specifics of what needs to be sent varies from cloud to cloud; some
 cloud providers employ a username and password for API access, whilst
 others use special-purpose API keys. A list of the credentials that a given
-cloud provider expects for API access is [available here](documentation.html)
+cloud provider expects for API access is
+[available here](documentation.html#credentials)
 
 <br/>
 [Contents](#toc)
@@ -443,10 +445,10 @@ to EC2 "availability zones":
 
 #### `GET /api/realms/:id`
 
-Provide the details of a ***realm***. Currently, these are a ***name***, a  ***state*** and a
- ***limit** applicable to the current requester. The ***name*** is an arbitrary label
-with no specific meaning in the API. The ***state*** can be either ***AVAILABLE***
- or ***UNAVAILABLE***. The example below shows the ***realm*** for the Rackspace driver.
+Provide the details of a ***realm***. Currently, these are a **name**, a  **state** and a
+ **limit** applicable to the current requester. The ***name*** is an arbitrary label
+with no specific meaning in the API. The **state** can be either **AVAILABLE**
+ or **UNAVAILABLE**. The example below shows the ***realm*** for the Rackspace driver.
 Since Rackspace does not currently have a notion of ***realms*** the Deltacloud
 Rackspace driver provides a single ***realm*** called 'US', signifying that all
 compute resources for that cloud provider are hosted in the United States:
@@ -668,6 +670,7 @@ whereas Rackspace Cloudservers ***image*** state can be one of *UNKNOWN*, *PREPA
 attribute that specifies the URI to which a client may issue a **HTTP POST** for creation of
 an ***instance*** from the given ***image***.
 
+<a name=list_images>.
 #### `GET /api/images`
 
 Return a list of all ***images*** available in the back-end cloud. By default this call will
@@ -787,13 +790,15 @@ the new image. For example:
     ...
 
 To create a new ***image*** the client must specify the *instance_id* of the running instance.
- Optionally, the client may also provide a *name* and a *description*. The parameters are
-specified as multipart/form-data fields in the client POST. The Deltacloud server will
-respond to a successful operation with **HTTP 201 Created** and provide details of the
+ Optionally, the client may also provide a *name* and a *description*. The parameters may
+be specified as multipart/form-data fields in the client POST.
+<!--, as illustrated in the
+example below.  -->
+Alternatively, clients may also specify parameters using a content-type of
+application/x-www-form-urlencoded. The Deltacloud server will respond to a
+successful operation with **HTTP 201 Created** and provide details of the
 newly created ***image***:
 
-
-
 `Example request:`
 
     POST /api/images?format=xml HTTP/1.1
@@ -801,7 +806,12 @@ newly created ***image***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3002
     Accept: */*
-    Content-Length: 404
+    Content-Length: 96
+    Content-Type: application/x-www-form-urlencoded
+
+    instance_id=20109341&name=customisedserver&description=jsmith%20cu
+    stomised%20web%20server%20July%2021%202011
+<!--
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------ba9acb193034
 
@@ -817,8 +827,7 @@ newly created ***image***:
     Content-Disposition: form-data; name="description"
 
     jsmith customised web server July 21 2011
-    ------------------------------ba9acb193034--
-
+    ------------------------------ba9acb193034-->
 
 `Server response:`
 
@@ -1355,22 +1364,29 @@ IP address. This access may be given using the [firewalls](#firewalls) collectio
 <a name=create_instance>.
 #### `POST /api/instances`
 
-Create a new ***instance***. At a minimum clients must specify the ***image*** from
-which the virtual machine ***instance*** is to be created. Optionally a client
-may also specify a ***hardware profile*** and ***realm*** (with default values used
-otherwise). Clients can also provide a *name* for the new *instance* though this is not
-supported by all back-end cloud providers. Whether a given feature is available is advertised
-in the response to the Deltacloud server API entry point.
-The details of the new ***instance*** are returned in response to this operation.
-
-For creation of an ***instance*** in the Amazon EC2 cloud a client can also specify the
-name of the EC2 keypair to be used as well as the firewalls (EC2 security groups) that the
-***instance*** should be launched into. The EC2 keypair is specified with the parameter *keyname*
-while firewalls are specified sequentially as *firewalls1* ... *firewalls2* ... etc. These parameters
-are specified in the first ***instance*** creation example below. Note that the values for
-public and private addresses are blank in the server response, as these have not yet been
-assigned by the cloud provider. Subsequent requests for the ***instance*** details
-will provide these values.
+Create a new ***instance***. At a minimum clients must specify the ***image***
+from which the virtual machine ***instance*** is to be created. Optionally a
+client may also specify a ***hardware profile*** and ***realm*** (with default
+values used otherwise). Clients can also provide a *name* for the new *instance*
+ though this is not supported by all back-end cloud providers. Whether a given
+feature is available is advertised in the response to the Deltacloud server
+API entry point. The details of the new ***instance*** are returned in
+response to this operation.
+
+For creation of an ***instance*** in the Amazon EC2 cloud a client can also
+specify the name of the EC2 keypair to be used as well as the firewalls
+(EC2 security groups) that the ***instance*** should be launched into. The
+EC2 keypair is specified with the parameter *keyname* while firewalls are
+specified sequentially as *firewalls1* ... *firewalls2* ... etc. These parameters
+are specified in the first ***instance*** creation example below. Note that the
+values for public and private addresses are blank in the server response, as
+these have not yet been assigned by the cloud provider. Subsequent requests
+for the ***instance*** details will provide these values.
+
+In the first example client request shown below, parameters are specified as
+multipart/form-data. A client may also alternatively specify the same parameters
+using the x-www-url-form-urlencoded content type, as demonstrated by the
+[second example](#create_instance_rax) below.
 
 <a name=create_instance_ec2>.
 
@@ -1444,11 +1460,14 @@ will provide these values.
       </authentication>
     </instance>
 
+<a name=create_instance_rax>.
+
 The second example given below shows creation of an ***instance*** in the Rackspace
 Cloudservers cloud. Here you can see that the client provides the optional *name*
  parameter and that the created instance uses authentication of type **password**.
-The *username* and *password* are returned with the details of the newly created
-***instance***:
+Furthermore, in this example the requesting client uses a content-type of
+application/x-www-form-urlencoded. The *username* and *password* are returned with
+the details of the newly created ***instance***:
 
 `Example request: (Rackspace Cloudservers)`
 
@@ -1457,6 +1476,11 @@ The *username* and *password* are returned with the details of the newly created
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3002
     Accept: */*
+    Content-Length: 34
+    Content-Type: application/x-www-form-urlencoded
+
+    image_id=53&hwp_id=1&name=myserver
+<!--
     Content-Length: 342
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------7424b11a955d
@@ -1473,7 +1497,7 @@ The *username* and *password* are returned with the details of the newly created
     Content-Disposition: form-data; name="name"
 
     myserver
-    ------------------------------7424b11a955d--
+    ------------------------------7424b11a955d-->
 
 `Server response:`
 
@@ -1601,13 +1625,20 @@ Gogrid cloud:
 #### `POST /api/keys`
 
 Some back-end cloud providers allow a client to create new credentials for
-accessing Instances. The parameters (key attributes) required by this function will depend on the
- back-end and are specified in the relevant driver. At present only the Amazon EC2 cloud implements a key
-create method and this requires the key *name* to be specified as a parameter. It should be noted that
-the private key attribute of a newly created key is reported only once, in response to the create
-operation as shown in the example below. The client should save the private key for future use with
- ***instance*** authentication. In all subsequent calls, only the fingerprint attribute is displayed
- in the Deltacloud server response, as illustrated by the [GET /api/keys](#get_keys) call above.
+accessing Instances. The parameters (key attributes) required by this function
+will depend on the back-end and are specified in the relevant driver. At
+present only the Amazon EC2 cloud implements a key create method and this
+requires the key *name* to be specified as a parameter. It should be noted that
+the private key attribute of a newly created key is reported only once, in
+response to the create operation as shown in the example below.
+The client should save the private key for future use with  ***instance***
+authentication. In all subsequent calls, only the fingerprint attribute
+is displayed in the Deltacloud server response, as illustrated by
+the [GET /api/keys](#get_keys) call above.
+
+Note that as with other HTTP POST calls in the Deltacloud REST API, client requests
+may specify the required parameters as multipart/form-data, or using the
+application/x-www-form-urlencoded content type.
 
 <a name=key_create>.
 
@@ -1618,6 +1649,11 @@ operation as shown in the example below. The client should save the private key
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
+    Content-Length: 19
+    Content-Type: application/x-www-form-urlencoded
+
+    name=jsmith_new_key
+<!--
     Content-Length: 153
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------92fbd163f915
@@ -1626,7 +1662,7 @@ operation as shown in the example below. The client should save the private key
     Content-Disposition: form-data; name="name"
 
     jsmith_new_key
-    ------------------------------92fbd163f915--
+    ------------------------------92fbd163f915-->
 
 `Server response:`
 
@@ -1839,9 +1875,12 @@ Retrieve details of a single specified ***firewall***.
 
 #### `POST /api/firewalls`
 
-Creates a new ***firewall***. Clients must specify the ***firewall*** *name* and *description* as
-parameters to the request. On succesful completion the Deltacloud server will respond with **HTTP 201
-Created** and return details of the newly created ***firewall***:
+Creates a new ***firewall***. Clients must specify the ***firewall*** *name*
+and *description* as parameters to the request. On succesful completion the
+Deltacloud server will respond with **HTTP 201 Created** and return details
+of the newly created ***firewall***. As with other POST operations in the
+Deltacloud API, a client may specify parameters as multipart/form-data or using
+the application/x-www-form-urlencoded content-type.
 
 `Example request:`
 
@@ -1850,19 +1889,24 @@ Created** and return details of the newly created ***firewall***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
+    Content-Length: 64
+    Content-Type: application/x-www-form-urlencoded
+
+    name=Devel_Group&description=Access%20for%20all%20development%20machines
+<!--
     Content-Length: 285
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------cdbcabd8ab04
 
     ------------------------------cdbcabd8ab04
     Content-Disposition: form-data; name="name"
-
+-->
     Devel_Group
     ------------------------------cdbcabd8ab04
     Content-Disposition: form-data; name="description"
 
     Access for all development machines
-    ------------------------------cdbcabd8ab04--
+    ------------------------------cdbcabd8ab04 -->
 
 `Server response:`
 
@@ -1880,7 +1924,7 @@ Created** and return details of the newly created ***firewall***:
       </rules>
     </firewall>
 
-<a name=delete_firewall_rule> .
+<a name=delete_firewall> .
 
 #### `DELETE /api/firewalls/:id`
 
@@ -1939,17 +1983,23 @@ In both cases the error message is propagated from the back-end cloud provider t
 
 #### `POST /api/firewalls/:id/rules`
 
-Create a new ***firewall rule*** within a specified ***firewall***. A client must supply the **protocol**
-(one of *udp*, *tcp* or *icmp*), **port_from** and **port_to** as parameters. Ofcourse the client must also
-specify the **sources** to which the given rule is to apply. IP addresses are specified in CIDR format
-sequentially: *ip_address1=192.168.10.10/24*, *ip_address2=10.1.1.1/16* ... *ip_addressN=...*. The IP
-address '0.0.0.0/0' acts as a wildcard to specify **any** IP address.
-Source ***firewalls*** are also specified sequentially but the *owner_id* of the ***firewall*** that is to
- be authorized must also be supplied (this is an Amazon EC2 requirement): group1=name1,
-group1owner=1234567890, group2=name2, group2owner=0987654321, ... groupN=nameN, groupNowner=...
-
-The Deltacloud server responds with a **HTTP 201 Created** after a successful operation together with the
-details of the affected ***firewall***:
+Create a new ***firewall rule*** within a specified ***firewall***. A client
+must supply the **protocol** (one of *udp*, *tcp* or *icmp*), **port_from**
+and **port_to** as parameters. Ofcourse the client must also specify the
+**sources** to which the given rule is to apply. IP addresses are specified
+in CIDR format sequentially: *ip_address1=192.168.10.10/24*,
+*ip_address2=10.1.1.1/16* ... *ip_addressN=...*. The IP address '0.0.0.0/0'
+acts as a wildcard to specify **any** IP address. Source ***firewalls*** are
+also specified sequentially but the *owner_id* of the ***firewall*** that is
+to be authorized must also be supplied (this is an Amazon EC2 requirement):
+group1=name1, group1owner=1234567890, group2=name2, group2owner=0987654321,
+... groupN=nameN, groupNowner=...
+
+The Deltacloud server responds with a **HTTP 201 Created** after a successful
+operation together with the details of the affected ***firewall***. The example
+client request below specifies the required parameters as multipart/form-data.
+However clients may also legitimately use the application/x-www-form-urlencoded
+to provide firewall rule parameters.
 
 `Example request:`
 
@@ -2027,6 +2077,8 @@ details of the affected ***firewall***:
       </rules>
     </firewall>
 
+<a name=delete_firewall_rule> .
+
 #### `DELETE /api/firewalls/:id/:rule_id`
 
 Delete the specified firewall rule. The Deltacloud server will respond with **HTTP 204 No Content** on
@@ -2177,12 +2229,14 @@ succesful operation.
 
 #### `POST /api/addresses/:id/associate`
 
-This operation associates a given ***address*** with a running ***instance***. The client must
-specify the *instance_id* as a parameter to this call. For Amazon EC2, the specified ***address***
-will replace the currently assigned *public_address* of the ***instance***. A succesful operation will
-produce a **HTTP 202 Accepted** response:
-
-
+This operation associates a given ***address*** with a running ***instance***.
+The client must specify the *instance_id* as a parameter to this call.
+For Amazon EC2, the specified ***address*** will replace the currently assigned
+*public_address* of the ***instance***. A succesful operation will produce a
+**HTTP 202 Accepted** response. The example client request below specifies the
+required  *instance_id* parameter using the application/x-www-form-urlencoded
+content-type, however this can also legitimately be specified using
+multipart/form-data.
 
 `Example request:`
 
@@ -2191,6 +2245,12 @@ produce a **HTTP 202 Accepted** response:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
+
+    instance_id=i-9d8a3dfc
+
+<!--
     Content-Length: 156
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------e4c1d4718683
@@ -2199,7 +2259,7 @@ produce a **HTTP 202 Accepted** response:
     Content-Disposition: form-data; name="instance_id"
 
     i-9d8a3dfc
-    ------------------------------e4c1d4718683--
+    ------------------------------e4c1d4718683-->
 
 `Server response:`
 
@@ -2362,12 +2422,16 @@ Retrieve details for a specific load balancer:
 
 #### `POST /api/load_balancers`
 
-This operation creates a new ***load_balancer***. Clients must provide the ***load_balancer*** **name**,
- the **realm_id** to which the balancer is to apply, a **listener_protocol** which the balancer will
-respond to (one of **HTTP** or **TCP**), the **listener_balancer_port** which specifies the port
-that the ***load_balancer*** will be expecting network traffic on and finally the **listener_instance_port**
-which specifies the port on which ***instances*** will be receiving network traffic forwarded by the
-***load_balancer***.
+This operation creates a new ***load_balancer***. Clients must provide the
+***load_balancer*** **name**, the **realm_id** to which the balancer is to
+apply, a **listener_protocol** which the balancer will respond to (one of
+**HTTP** or **TCP**), the **listener_balancer_port** which specifies the port
+that the ***load_balancer*** will be expecting network traffic on and finally
+the **listener_instance_port** which specifies the port on which ***instances***
+will be receiving network traffic forwarded by the ***load_balancer***. As with
+other operations in the Deltacloud API, parameters may be specified by a requesting
+client using multipart/form-data or as application/x-www-form-urlencoded data
+as shown below:
 
 `Example request:`
 
@@ -2376,6 +2440,13 @@ which specifies the port on which ***instances*** will be receiving network traf
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
+    Content-Length: 121
+    Content-Type: application/x-www-form-urlencoded
+
+    name=webtraffic-balancer&realm_id=us-east-1c&listener_protocol=HTTP&
+    listener_balancer_port=80&listener_instance_port=3001
+
+<!--
     Content-Length: 603
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------395a7b3a9c77
@@ -2400,8 +2471,7 @@ which specifies the port on which ***instances*** will be receiving network traf
     Content-Disposition: form-data; name="listener_instance_port"
 
     3001
-    ------------------------------395a7b3a9c77--
-
+    ------------------------------395a7b3a9c77-->
 
 `Server response:`
 
@@ -2454,9 +2524,12 @@ server will respond with **HTTP 204 No Content** for a succesful operation:
 
 #### `POST /api/load_balancers/:id/register`
 
-This operation registers a running ***instance*** with a specified ***load_balancer***. Clients
-must provide the **instance_id** as a parameter to the request. The Deltacloud server will respond
-with a **HTTP 204 No Content** after a succesful operation:
+This operation registers a running ***instance*** with a specified
+***load_balancer***. Clients must provide the **instance_id** as a parameter
+to the request. The Deltacloud server will respond with a **HTTP 204 No Content**
+after a succesful operation. The Deltacloud server will accept client request
+parameters encoded as multipart/form-data or as
+application/x-www-form-urlencoded data.
 
 `Example request:`
 
@@ -2465,6 +2538,12 @@ with a **HTTP 204 No Content** after a succesful operation:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
+
+    instance_id=i-4f06b52e
+
+<!--
     Content-Length: 156
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------6af752b909b2
@@ -2473,7 +2552,7 @@ with a **HTTP 204 No Content** after a succesful operation:
     Content-Disposition: form-data; name="instance_id"
 
     i-4f06b52e
-    ------------------------------6af752b909b2--
+    ------------------------------6af752b909b2-->
 
 `Server response:`
 
@@ -2482,8 +2561,10 @@ with a **HTTP 204 No Content** after a succesful operation:
 
 #### `POST /api/load_balancers/:id/unregister`
 
-This operation will unregister a specified ***instance*** from the given ***load_balancer***. The
-client must supply the **instance_id** parameter to identify the ***instance***:
+This operation will unregister a specified ***instance*** from the given
+***load_balancer***. The client must supply the **instance_id** parameter to
+identify the ***instance***, either as multipart/form-data or as
+application/x-www-form-urlencoded data (as shown below).
 
 `Example request:`
 
@@ -2492,6 +2573,11 @@ client must supply the **instance_id** parameter to identify the ***instance***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
+
+    instance_id=i-4f06b52e
+<!--
     Content-Length: 156
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------987218f60703
@@ -2500,7 +2586,7 @@ client must supply the **instance_id** parameter to identify the ***instance***:
     Content-Disposition: form-data; name="instance_id"
 
     i-4f06b52e
-    ------------------------------987218f60703--
+    ------------------------------987218f60703-->
 
 `Server response:`
 
@@ -2613,13 +2699,19 @@ This operation retrieves the details for the specified storage_volume:
 
 #### `POST /api/storage_volumes`
 
-This operation will create a new ***storage_volume***. A client may specify a **snapshot_id** from which
-to instantiate the ***storage_volume*** though this is optional. The **capacity** parameter, expressed in
-Gigabytes, is also optional and will default to 1 Gigabyte. Finally clients may also specify the
-**realm_id** as a ***storage_volume*** can typically only be attached to ***instances*** running within
-the specified ***realm***. If the ***realm*** is not specified it will default to the first realm returned
- by the cloud provider. A succesful operation will return **HTTP 201 Created** with the details of the newly
-created ***storage_volume***:
+This operation will create a new ***storage_volume***. A client may specify a
+**snapshot_id** from which to instantiate the ***storage_volume*** though this
+is optional. The **capacity** parameter, expressed in Gigabytes, is also optional
+and will default to 1 Gigabyte. Finally clients may also specify the **realm_id**
+as a ***storage_volume*** can typically only be attached to ***instances***
+ running within the specified ***realm***. If the ***realm*** is not specified
+it will default to the first realm returned by the cloud provider.
+A succesful operation will return **HTTP 201 Created** with the details of
+the newly created ***storage_volume***.
+
+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.
 
 
 `Example request:`
@@ -2629,10 +2721,16 @@ created ***storage_volume***:
     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
+
+<!--
     Content-Length: 252
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------90dea979a9f4
-
+--
     ------------------------------90dea979a9f4
     Content-Disposition: form-data; name="capacity"
 
@@ -2641,7 +2739,7 @@ created ***storage_volume***:
     Content-Disposition: form-data; name="realm_id"
 
     us-east-1c
-    ------------------------------90dea979a9f4--
+    ------------------------------90dea979a9f4-->
 
 `Server response:`
 
@@ -2710,13 +2808,17 @@ attached to an ***instance***.
 
 #### `POST /api/storage_volumes/:id/attach`
 
-This operation will attach the specified ***storage_volume*** to a running ***instance***. Clients must
-specify the **instance_id** and the **device** as parameters. The **device** parameter is used as the
-'mount point', 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 **HTTP 202 Accepted** after
-a succesful attach operation together with details of the ***storage_volume***. Note in the example
- below that the **state** is reported as 'unknown' although the **mount** element is present, as the
+This operation will attach the specified ***storage_volume*** to a running
+***instance***. Clients must specify the **instance_id** and the **device**
+as parameters. The **device** parameter is used as the 'mount point', 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
+**HTTP 202 Accepted** after a succesful attach operation together with details
+of the ***storage_volume***. Note in the example below that the **state** is
+reported as 'unknown' although the **mount** element is present, as 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.
 
 `Example request:`
 
@@ -2725,10 +2827,16 @@ processing has not yet been completed (hence the **202** status code).
     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
+
+<!--
     Content-Length: 259
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------5a074e9c5fcc
-
+--
     ------------------------------5a074e9c5fcc
     Content-Disposition: form-data; name="instance_id"
 
@@ -2737,7 +2845,7 @@ processing has not yet been completed (hence the **202** status code).
     Content-Disposition: form-data; name="device"
 
     /dev/sdi
-    ------------------------------5a074e9c5fcc--
+    ------------------------------5a074e9c5fcc-->
 
 `Server response:`
 
@@ -2891,10 +2999,12 @@ Get all details for a specified ***storage snapshot***, as shown below:
 
 #### `POST /api/storage_snapshots`
 
-This operation will create a new ***storage_snapshot***. Clients must specify the ***storage_volume***
-from which the snapshot is to be created, by supplying the **volume_id** parameter. The Deltacloud
-server responds with **HTTP 201 Created** after a succesful operation and provides details of the
-newly created ***storage_snapshot***:
+This operation will create a new ***storage_snapshot***. Clients must specify
+the ***storage_volume*** from which the snapshot is to be created, by supplying
+the **volume_id** parameter. The Deltacloud server responds with
+**HTTP 201 Created** after a succesful operation and provides details of the
+newly created ***storage_snapshot***. Clients may specify operation parameters as
+multipart/form-data, or as application/x-www-form-urlencoded data:
 
 `Example request:`
 
@@ -2903,6 +3013,12 @@ newly created ***storage_snapshot***:
     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
+
+<!--
     Content-Length: 156
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------91f7fa88be76
@@ -2911,7 +3027,7 @@ newly created ***storage_snapshot***:
     Content-Disposition: form-data; name="volume_id"
 
     vol-99fbe5f2
-    ------------------------------91f7fa88be76--
+    ------------------------------91f7fa88be76-->
 
 `Server response:`
 
@@ -3035,19 +3151,21 @@ that it contains.
 
 #### `POST /api/buckets`
 
-Creates a new ***bucket*** and requires that you specify the ***name*** as a parameter,
-in the form of multipart/form-data (i.e., HTTP form field). Optionally for Amazon S3
-buckets, you can specify a bucket location with the ***location*** parameter, as per
+Creates a new ***bucket*** and requires that you specify the ***name*** as a
+parameter. Optionally for Amazon S3 buckets, you can specify a bucket location
+with the ***location*** parameter, as per
  [Regions and Endpoints for Amazon Simple Storage Service](http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html "AWS Regions and Endpoints");
 valid values for S3 bucket *location* parameter are: "us-west-1", "EU",
 "ap-southeast-1", "ap-northeast-1" (while not specifying a location defaults to
-the "US Standard" region).
+the "US Standard" region). Note that clients may specify parameters as
+multipart/form-data or using a content-type of application/x-www-form-urlencoded.
 
-On succesful creation this call will return a ***201*** HTTP status, specifying the URI
-of the newly created bucket in the **Location** header and the newly created
-***bucket*** object in the response message body. The example request below creates a
-new ***bucket*** in the *EU (Ireland)* region. If the given backend cloud does not
-support locations then the *location* parameter is silently ignored.
+On succesful creation this call will return a ***201*** HTTP status, specifying
+the URI of the newly created bucket in the **Location** header and the newly
+created ***bucket*** object in the response message body. The example request
+below creates a new ***bucket*** in the *EU (Ireland)* region. If the given
+backend cloud does not support locations then the *location* parameter is
+silently ignored.
 
 `Example request:`
 
@@ -3056,18 +3174,25 @@ support locations then the *location* parameter is silently ignored.
     User-Agent: curl/7.20.1
     Host: localhost:3001
     Accept: */*
+    Content-Length: 31
+    Content-Type: application/x-www-form-urlencoded
+
+    name=mybucketeurope&location=EU
+
+
+<!--
     Content-Length: 252
     Content-Type: multipart/form-data; boundary=----------------------------4e90611c39f2
 
     ------------------------------4e90611c39f2
     Content-Disposition: form-data; name="name"
-
+--
     mybucketeurope
     ------------------------------4e90611c39f2
     Content-Disposition: form-data; name="location"
 
     EU
-    ------------------------------4e90611c39f2--
+    ------------------------------4e90611c39f2-->
 
 `Server response:`
 
@@ -3082,6 +3207,7 @@ support locations then the *location* parameter is silently ignored.
       <size>0</size>
     </bucket>
 
+<a name=delete_bucket>.
 #### `DELETE /api/buckets/:id`
 
 Deletes the specified ***bucket***, which must be empty (otherwise the call will
@@ -3162,6 +3288,7 @@ filename=blob_name* in the HTTP response headers.
 
     <BLOB DATA HERE>
 
+<a name=create_blob>.
 #### `PUT /api/buckets/:bucket_id/:blob_id`
 
 Creates a ***blob*** object and sets its content. If the ***blob*** already exists then
@@ -3214,8 +3341,8 @@ The deltacloud server also responds to an alternative `POST` route for creating
 updating a ***blob*** object. As with the `PUT` method for creating/updating a
 ***blob***, the client must specify the ***bucket*** in which the ***blob*** is to
 be created through the call URI (i.e. you `POST` to the specified ***bucket***).
-The rest of the required fields, that is, the ***blob_id*** (name of the blob),
-the  ***blob_data*** and the ***content-length*** are specified by the client as
+The rest of the required fields, that is, the name of the ***blob***, the
+ ***blob_data*** and the ***content-length*** are specified by the client as
 ***multipart/form-data*** (i.e. in `HTTP POST` form fields).
 
 In order to specify the optional user metadata for a given ***blob*** the client
@@ -3240,12 +3367,12 @@ deltacloud HTML interface (provided for testing purposes).
     Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) libcurl/7.20.1 N
     Accept: */*
-    Content-Length: 113584
+    Content-Length: 113582
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------517f5f2df858
 
     ------------------------------517f5f2df858
-    Content-Disposition: form-data; name="blob_id"
+    Content-Disposition: form-data; name="blob"
 
     12Jul2011blob
     ------------------------------517f5f2df858
-- 
1.7.3.4


[PATCH 3/3] INCOMPLETE! Updates Site docs - information for developers

Posted by ma...@redhat.com.
From: marios <ma...@redhat.com>


Signed-off-by: marios <ma...@redhat.com>
---
 site/content/_navigation.haml |    2 +-
 site/content/contribute.mdown |  101 ---------------------------------------
 site/content/developers.mdown |  106 +++++++++++++++++++++++++++++++++++++++++
 site/content/roadmap.mdown    |    9 +--
 4 files changed, 110 insertions(+), 108 deletions(-)
 delete mode 100644 site/content/contribute.mdown
 create mode 100644 site/content/developers.mdown

diff --git a/site/content/_navigation.haml b/site/content/_navigation.haml
index 6586267..0ad7e81 100644
--- a/site/content/_navigation.haml
+++ b/site/content/_navigation.haml
@@ -3,7 +3,7 @@ filter: haml
 ---
 - menu = [ { :href => "index.html", :title => "Deltacloud Home", :text => "Home" }, |
   { :href => "download.html", :title => "Get the latest releases", :text => "Download" }, |
-  { :href => "contribute.html", :title => "Information about design/development process", :text => "Developers" }, |
+  { :href => "developers.html", :title => "Information for developers", :text => "Developers" }, |
   { :href => "documentation.html", :title => "Project documentation", :text => "Documentation" }, |
   { :href => "contact.html", :title => "Contact us!", :text => "Contact"} ] |
 
diff --git a/site/content/contribute.mdown b/site/content/contribute.mdown
deleted file mode 100644
index e9fd595..0000000
--- a/site/content/contribute.mdown
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: Deltacloud - Contribute
-extension: html
-filter:
-  - markdown
-  - outline
----
-Help make Deltacloud better
-===========================
-
-<toc class="toc" numbering="off" toc_style="ul" toc_range="h2-h3" />
-
-All development of Deltacloud takes place in the open. Communication is run
-through the mailing list and all source code changes are tracked publicly.
-
-* <strong>Mailing Lists</strong><br/>
-  For Deltacloud API: [deltacloud-dev@incubator.apache.org](mailto:deltacloud-dev@incubator.apache.org).
-  To subscribe to it, send an email to [deltacloud-dev-subscribe@incubator.apache.org](deltacloud-dev-subscribe@incubator.apache.org). You can also view [Archive][1] in case you are missing something.
-
-  [1]: http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/
-* <strong>IRC</strong><br/>
-  You can also join us on the Freenode IRC channel #deltacloud. Deltacloud
-  developers are generally available on the IRC channel
-* <strong>Bugs</strong><br/>
-  We track bugs in [Apache JIRA][2]. You can [view open bugs][view-bugs] or
-  [file a new one][new-bug] there.
-
-  [2]: https://issues.apache.org/jira/browse/DTACLOUD
-  [view-bugs]: https://issues.apache.org/jira/browse/DTACLOUD
-  [new-bug]: https://issues.apache.org/jira/secure/CreateIssue!default.jspa
-* <strong>Patches</strong><br/>
-  Patches are very welcome. Please send them to the [development
-  list][3]. Patches should be generated with [`git`&nbsp;`format-patch`][4]
-  and sent to the list with [`git`&nbsp;`send-email`][5].
-* <strong>Roadmap</strong><br/>
-  We maintain our roadmap in
-  [teambox](https://teambox.com/projects/deltacloud/task_lists) so that
-  anyone can comment on tasks and suggest new ones.
-
-  [3]: http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/
-  [4]: http://kernel.org/pub/software/scm/git/docs/git-format-patch.html
-  [5]: http://kernel.org/pub/software/scm/git/docs/git-send-email.html
-
-Getting the sources
--------------------
-
-Then Deltacloud Core gives you the API and drivers to various cloud providers.
-It also provides a client library and a commandline interface.
-
-The Deltacloud Core repository is hosted on Apache Incubator.
-Apache uses Subversion, but there is a git mirror available:
-
-    $ mkdir deltacloud
-    $ cd deltacloud
-    $ git clone git://git.apache.org/deltacloud.git core
-
-You can find the Subversion repository at: <https://svn.apache.org/repos/asf/incubator/deltacloud>.
-
-Required packages
------------------
-In order to make the Deltacloud components work, you'll need to
-have the following packages installed (on Fedora 14; the names may vary on
-your distro):
-
-    ruby
-    ruby-devel
-    rubygem-rake
-    gcc-c++
-    libxml2-devel
-    libxslt-devel
-
-**Note:** these packages are necessary for building all the required ruby gems
-that Deltacloud requires. If you want to install the gems using your system's
-package manager (yum, apt, ports, etc.) you won't need to install these
-packages manually.
-
-To install all required ruby gems manually you should run:
-
-    $ yum install rubygem-haml rubygem-sinatra rubygem-thin rubygem-json \
-      rubygem-net-json rubygem-rack-accept rubygem-nokogiri rubygem-aws \
-      rubygem-rest-client
-
-Installing the Deltacloud Core
-------------------------------
-
-First, you need to install the server that will give you the Deltacloud API:
-
-    $ cd path/to/deltacloud/core/server
-    $ rake package
-    $ sudo gem install pkg/deltacloud-core-<version>.gem
-
-Then install the client library:
-
-    $ cd path/to/deltacloud/core/client
-    $ rake package
-    $ sudo gem install pkg/deltacloud-client-<version>.gem
-
-Once you have the client installed, run the following command:
-
-    $ cd path/to/deltacloud/core/client
-    $ rake fixtures
diff --git a/site/content/developers.mdown b/site/content/developers.mdown
new file mode 100644
index 0000000..435dce6
--- /dev/null
+++ b/site/content/developers.mdown
@@ -0,0 +1,106 @@
+---
+title: Deltacloud - Information for Developers
+extension: html
+filter:
+  - markdown
+  - outline
+---
+# Contribute to the Deltacloud Project
+
+[Apache](http://www.apache.org/ "The Apache Software Foundation") Deltacloud is
+free, open source software licensed under the
+[apache license](http://www.apache.org/licenses/LICENSE-2.0 "The Apache License").
+Please feel free to [contact us](contact.html) if you have any questions about the
+project or with any suggestions on how to improve Deltacloud. The Deltacloud
+developer community is open to anyone that wants to contribute!
+
+This page contains information for developers:
+
+<toc class="toc" numbering="off" toc_style="ul" toc_range="h2-h3" />
+
+
+## Setting up the developer environment
+
+The information here is about setting up a dev environment for Deltacloud. If you
+are interested in first trying out Deltacloud, you should instead follow the
+instructions in the [Download](download.html) page. If you install the Deltacloud gem
+as per the download instructions, the 'gem' command will ensure that you have also
+installed all the Ruby Gems that Deltacloud depends on.
+
+### Getting the sources
+
+Deltacloud provides the API server and drivers to various cloud providers.
+It also includes a ruby client library and a commandline interface.
+
+The Deltacloud repository is hosted at the Apache Software Foundation.
+Apache uses Subversion, but there is also a git mirror available. Many of
+the Deltacloud developers use the [git version control system](http://git-scm.com/download)
+and 'git format-patch' is the preferred way of making patches. If your system comes with a
+package manager you can use it to install git (e.g., ***sudo yum install git***, or,
+***sudo apt-get install git***). There are also [git binaries](http://git-scm.com/download)
+for other systems.
+
+    $ mkdir deltacloud
+    $ cd deltacloud
+    $ git clone git://git.apache.org/deltacloud.git core
+
+You can find the Subversion repository at: <https://svn.apache.org/repos/asf/incubator/deltacloud>.
+
+### Required packages
+
+In order to make the Deltacloud components work, you'll need to
+have the following packages installed (on Fedora 14; the names may vary on
+your distro):
+
+    ruby
+    ruby-devel
+    rubygem-rake
+    gcc-c++
+    libxml2-devel
+    libxslt-devel
+
+**Note:** these packages are necessary for building all the required ruby gems
+that Deltacloud requires. If you want to install the gems using your system's
+package manager (yum, apt, ports, etc.) you won't need to install these
+packages manually.
+
+To install all required ruby gems manually you should run:
+
+    $ yum install rubygem-haml rubygem-sinatra rubygem-thin rubygem-json \
+      rubygem-net-json rubygem-rack-accept rubygem-nokogiri rubygem-aws \
+      rubygem-rest-client
+
+### Building from source and installing Deltacloud
+
+First, you need to install the server that will give you the Deltacloud API:
+
+    $ cd path/to/deltacloud/core/server
+    $ rake package
+    $ sudo gem install pkg/deltacloud-core-<version>.gem
+
+Then install the client library:
+
+    $ cd path/to/deltacloud/core/client
+    $ rake package
+    $ sudo gem install pkg/deltacloud-client-<version>.gem
+
+Once you have the client installed, run the following command:
+
+    $ cd path/to/deltacloud/core/client
+    $ rake fixtures
+
+### Use the Deltacloud github mirror
+
+## Contribute to Deltacloud
+
+### Overview of the Deltacloud directory structure
+
+### Forming and sending patches
+
+### Writing a new cloud provider driver
+
+### Writing and running tests
+
+### Licensing - the Apache Individual Contributor License Agreement
+
+
diff --git a/site/content/roadmap.mdown b/site/content/roadmap.mdown
index 4564844..e735975 100644
--- a/site/content/roadmap.mdown
+++ b/site/content/roadmap.mdown
@@ -23,15 +23,12 @@ and a longer list of items we will address after the next release, roughly
 in order of priority.
 
 If you have anything you'd like to see added to the roadmap, or think that
-some items should receive more attention, please let us know on the
-[mailing list][1]. Of course, the quickest way to get anything into
-Deltacloud is to [send us patches][2] &mdash; we will of course take patches
+some items should receive more attention, please [let us know](contact.html).
+Of course, the quickest way to get anything into
+Deltacloud is to send us patches; we will of course take patches
 for anything, regardless of whether they adress items on the roadmap or
 anything else.
 
-[1]: /contribute.html
-[2]: /contribute.html
-
 
 <toc numbering="off" toc_style="ul" toc_range='h2-h3' />
 
-- 
1.7.3.4


Re: [PATCH 2/3] Updates Site docs - easy Download/Get started instructions, with examples using the ruby client, deltacloudc, and curl. Also updated contact information page for project.

Posted by David Lutterkort <lu...@redhat.com>.
On Wed, 2011-08-31 at 12:07 +0300, marios@redhat.com wrote:
> From: marios <ma...@redhat.com>
> 
> 
> Signed-off-by: marios <ma...@redhat.com>

ACK.

> diff --git a/site/content/contact.mdown b/site/content/contact.mdown

Nice .. definitely more end-user friendly.

> new file mode 100644
> index 0000000..17a97ec
> --- /dev/null
> +++ b/site/content/contact.mdown

> +* We track bugs in [Apache JIRA](https://issues.apache.org/jira/browse/DTACLOUD). If you are
> +  have found a problem with Deltacloud you can check if it is already known to the Deltacloud

Small typo: s/are have/have/

> diff --git a/site/content/download.mdown b/site/content/download.mdown
> index dee8181..b531579 100644

I like ths content, but I think it should go into something like 'Quick
start' or 'Installation instructions' underneath Documentation, or as a
separate toplevel link.

The download page should be very short, and just list where the tarballs
are, what gems to install (should be in the order Server, Client,
libdeltacloud) and pointers to svn and git. Basically, a reminder for
people who just want to get the bits quickly.

> --- a/site/content/download.mdown
> +++ b/site/content/download.mdown
> @@ -4,25 +4,200 @@ extension: html
>  filter: markdown
 
> -### Deltacloud Core ###
> +Deltacloud provides the API server and drivers necessary for connecting
> +to the [cloud providers](./drivers.html#providers "Deltacloud drivers").

I think this should also link to /documentation.html#credentials, since
what credentials to supply is the first question any user has. We should
probably add a sentence to that page along the lines of

   For details on the capabilities of each driver
   see /drivers.html#providers

David



[PATCH 2/3] Updates Site docs - easy Download/Get started instructions, with examples using the ruby client, deltacloudc, and curl. Also updated contact information page for project.

Posted by ma...@redhat.com.
From: marios <ma...@redhat.com>


Signed-off-by: marios <ma...@redhat.com>
---
 site/content/_drivers.mdown                |    3 +-
 site/content/_navigation.haml              |    5 +-
 site/content/_providers.haml               |    4 +-
 site/content/contact.mdown                 |   30 ++++
 site/content/documentation.haml            |    2 +-
 site/content/download.mdown                |  257 ++++++++++++++++++++++++++--
 site/content/index.haml                    |   19 ++-
 site/content/styles/deltacloud_concept.gif |  Bin 0 -> 19082 bytes
 8 files changed, 288 insertions(+), 32 deletions(-)
 create mode 100644 site/content/contact.mdown
 create mode 100644 site/content/styles/deltacloud_concept.gif

diff --git a/site/content/_drivers.mdown b/site/content/_drivers.mdown
index 56254fe..811cbbc 100644
--- a/site/content/_drivers.mdown
+++ b/site/content/_drivers.mdown
@@ -53,9 +53,8 @@ The driver and provider can be selected in one of two ways:
    effect as using the two request headers mentioned above.
 
 ## Notes on specific drivers
-
 <table providers></table>
-
+<a name=providers>.
 ### EC2 Driver
 
 For the Amazon EC2 you need to install the
diff --git a/site/content/_navigation.haml b/site/content/_navigation.haml
index 8a2e002..6586267 100644
--- a/site/content/_navigation.haml
+++ b/site/content/_navigation.haml
@@ -3,8 +3,9 @@ filter: haml
 ---
 - menu = [ { :href => "index.html", :title => "Deltacloud Home", :text => "Home" }, |
   { :href => "download.html", :title => "Get the latest releases", :text => "Download" }, |
-  { :href => "contribute.html", :title => "Information about design/development process", :text => "Contribute" }, |
-  { :href => "documentation.html", :title => "Project documentation", :text => "Documentation" } ] |
+  { :href => "contribute.html", :title => "Information about design/development process", :text => "Developers" }, |
+  { :href => "documentation.html", :title => "Project documentation", :text => "Documentation" }, |
+  { :href => "contact.html", :title => "Contact us!", :text => "Contact"} ] |
 
 #navigation
   #menu.container
diff --git a/site/content/_providers.haml b/site/content/_providers.haml
index d713858..bae2432 100644
--- a/site/content/_providers.haml
+++ b/site/content/_providers.haml
@@ -55,10 +55,10 @@ filter:
     %th.emptycell &nbsp;
     %th
       %strong Create
-      new containers
+      new buckets
     %th
       %strong Update/delete
-      containers
+      buckets
     %th
       %strong Create
       new blobs
diff --git a/site/content/contact.mdown b/site/content/contact.mdown
new file mode 100644
index 0000000..17a97ec
--- /dev/null
+++ b/site/content/contact.mdown
@@ -0,0 +1,30 @@
+---
+title: Deltacloud - Contact
+extension: html
+filter: markdown
+---
+
+Contact us!
+========
+
+We'd love to hear about your experiences with Deltacloud:
+
+* [deltacloud-dev@incubator.apache.org](http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/)
+  is our mailing list where you can ask questions or see all the latest patches and development activity
+  at the bleeding edge of the project,
+* The [#deltacloud](http://webchat.freenode.net/) irc channel on Freenode is where
+  the developers hang out and where you can usually get the fastest answers to your questions,
+* Our [Teambox](http://teambox.com/projects/deltacloud) page is where we keep the latest
+  task lists and where you can comment on or suggest new features for the project,
+* We have a [github](https://github.com/apache/deltacloud) page which is a mirror of the
+  apache git repo, if you prefer to get the code or contribute that way.
+* We track bugs in [Apache JIRA](https://issues.apache.org/jira/browse/DTACLOUD). If you are
+  have found a problem with Deltacloud you can check if it is already known to the Deltacloud
+  developers or [report it here](https://issues.apache.org/jira/secure/CreateIssue!default.jspa).
+
+Please don't hesitate to get in touch if you have any questions about the project,
+if you've had any issues with installing or using Deltacloud or even just to tell us
+how great you think Deltacloud is! You might want to contribute a translation of
+the Deltacloud documentation (or even this webpage), you may want to contribute
+to the code and need some help getting started.
+
diff --git a/site/content/documentation.haml b/site/content/documentation.haml
index 8019d08..d5d8c32 100644
--- a/site/content/documentation.haml
+++ b/site/content/documentation.haml
@@ -46,7 +46,7 @@ filter:
   stored on the server.  The exact credentials for logging into the server,
   and where you find them, depends on the backend cloud that the server is
   talking to.
-
+%a(name="credentials")
 %p
   The following table gives details about how to set up the server and what
   credentials to provide for each of the supported clouds. The entry from
diff --git a/site/content/download.mdown b/site/content/download.mdown
index dee8181..b531579 100644
--- a/site/content/download.mdown
+++ b/site/content/download.mdown
@@ -4,25 +4,200 @@ extension: html
 filter: markdown
 ---
 
-Download
+Download Deltacloud
 ========
 
-Official releases can be downloaded from the
-[Apache website](http://www.apache.org/dist/incubator/deltacloud/)
+<img src="styles/deltacloud_concept.gif" alt="Deltacloud conceptual overview" width=850 />
 
-### Deltacloud Core ###
+Deltacloud provides the API server and drivers necessary for connecting
+to the [cloud providers](./drivers.html#providers "Deltacloud drivers").
+Install Deltacloud and start the ***deltacloudd*** daemon server. You can use your
+favourite HTTP client to talk to the server using the
+[Deltacloud REST API](api.html "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. As of Deltacloud 0.4.0, the HTML interface
+is written with the [jQuery mobile](http://jquerymobile.com "jquery mobile")
+framework so it plays especially well with your mobile or tablet devices.
 
-Deltacloud Core provides the API server and drivers necessary for connecting
-to the cloud providers.
+### "Hello Deltacloud!" - Quick start ###
 
-We also make Ruby gems of each release available. You can install it by
-typing the following command:
+This guide assumes a linux environment. Some of the Deltacloud developers
+are running recent versions of [Fedora](http://fedoraproject.org "Fedora Project").
+However, as Deltacloud is written in Ruby you should be able to install it on
+any OS that supports Ruby. If you have succesfully installed Deltacloud or are
+having any problems doing so, please [let us know](contact.html) -
+we'd love to hear from you.
+
+The two main pre-requisites to a fast Deltacloud installation are **Ruby**
+and **RubyGems**. Deltacloud will run trouble-free on Ruby versions
+1.8.6 and 1.8.7 though you should also be fine with version 1.9. You can contribute
+to this project by [letting us know](contact.html) of any issues you may come across
+with particular Ruby or RubyGem versions; your input is highly appreciated!
+
+#### Get Deltacloud ####
+
+First you need to [install ruby](http://www.ruby-lang.org/en/downloads/ "Install Ruby").
+You can check to see if you already have a ruby installation by typing:
+
+    $ ruby -v
+
+If you see something that looks like the following:
+
+    $ ruby 1.8.6 (2010-09-02 patchlevel 420) [i386-linux]
+
+then you can skip the ruby installation (you need ruby that is at *least* version 1.8.6).
+
+Deltacloud relies on a number of ruby gems so you also need to
+[install RubyGems](http://docs.rubygems.org/read/chapter/3 "Install RubyGems"). As above, you can
+check if you already have the ***gem*** executable installed by typing:
+
+    $ gem -v
+
+Once you have Ruby and RubyGems, installing Deltacloud is as easy as typing:
 
     $ sudo gem install deltacloud-core
 
+**And thats it!** Yes, really. The **gem install** command will automatically fetch and install
+all other gems that the Deltacloud server needs if you don't already have these. As an alternative
+you can get the latest releases of Deltacloud from the
+[Apache website](http://www.apache.org/dist/incubator/deltacloud/).
+
+
+
+#### Run Deltacloud ####
+
+After you succesfully install Deltacloud, you can start the server by typing
+***deltacloudd -i \<provider_id\>***. The ***\<provider_id\>*** is the name of the cloud
+provider that you have an account with, for example 'ec2'. If you don't yet have an account
+with a cloud provider, you can still try the Deltacloud mock driver:
+
+    $ deltacloudd -i mock
+
+This will start the Deltacloud server on your local machine with the mock driver, accepting
+connections on port 3001 (the default). From version 0.4.0 of Deltacloud, you can use the '-l'
+ flag to see [all available](./drivers.html#providers "Deltacloud drivers")
+ ***\<provider_id\>***s that can be used with the **deltacloudd** executable.
+
+    $ deltacloudd -l
+    Available drivers:
+
+    * condor
+    * vsphere
+    * opennebula
+    * eucalyptus
+    * rhevm
+    * sbc
+    * azure
+    * gogrid
+    * mock
+    * rackspace
+    * rimuhosting
+    * terremark
+    * ec2
+
+**After you start the server, the Deltacloud HTML interface is available at** *http://localhost:3001/api* ** open this address in your web browser**.
+
+Your browser will prompt you for [credentials](documentation.html#credentials)
+when you invoke an operation that requires [authentication](api.html#authentication).
+The '-h' flag will list all available options for **deltacloudd**. For example,
+ to start the Deltacloud server with the Rackspace driver on port 10000 you can use:
+
+    $ deltacloudd -i rackspace -P 10000
+
+You may want to install the server on another machine and make Deltacloud available on
+your local network. To do this you need to bind the Deltacloud server to an address other
+than 'localhost' (default). For instance, if you install and start Deltacloud on a machine
+with the IP address 192.168.10.200 you should start the server with:
+
+    $ deltacloudd -i ec2 -P 5000 -r 192.168.10.200
+
+This will make the Deltacloud server available at the address **http://192.168.10.200:5000/api**.
+
+
 Additional Tools
 ----------------
-These are complementary to the essential Core components.
+The following are complementary to the Deltacloud server.
+
+### Deltacloud Client ###
+
+The Deltacloud project also maintains a ruby client, which you need to install
+separately to the Deltacloud API server. The Deltacloud client consists of a
+ ruby library (packaged as a ruby gem) which you can use to programmatically
+interact with the Deltacloud server and control your cloud infrastructure
+across cloud providers. For example, assuming the Deltacloud server is
+running at **192.168.10.244:5000**
+
+    require 'deltacloud'
+
+    api_url      = 'http://192.168.10.244:5000/api'
+    api_name     = 'TK2PJCAN9R1HKG2FK24Z'
+    api_password = 'aLe27rZlRhlBcVoQbL4JsVtaNga12vEL9d9kS5CA'
+
+    client = DeltaCloud.new( api_name, api_password, api_url )
+
+    # get a list of currently running instances (virtual machines)
+    client.instances.each do |instance|
+      puts instance.name
+    end
+
+    #do other work with client here
+
+More comprehensive information on using the Deltacloud ruby client in this way
+can be found in [the documentation](client-ruby.html).
+
+Assuming you already have Ruby and RubyGems setup, you can install the Deltacloud
+client by simply typing:
+
+    $ sudo gem install deltacloud-client
+
+Installing the Deltacloud client also gives you the **deltacloudc** command line
+tool. This executable makes use of the Deltacloud client library to speak to the
+Deltacloud server using the [REST API](api.html). This allows you to to control
+your IAAS cloud infrastructure form the command line; even better if you are
+familiar with linux scripting, you can knock up a bash script in no time
+to automate your cloud infrastructure tasks.
+
+The general usage pattern for deltacloudc is:
+
+    $ deltacloudc collection operation [options]
+
+ * <em><b>collection</b></em> refers to the Deltacloud object collections, such as Instances,
+   Images, Buckets, Realms etc, as described in greater detail in the
+   [REST API](api.html#h1)
+ * <em><b>operation</b></em> is collection dependant. All collections respond to 'index'
+   and 'show' operations (retrieve details on all objects in a given collection
+   or on a specific object, respectively); some collections respond to 'create' and 'destroy'
+   operations. The instances collection (realised virtual servers) responds to operations
+   for managing the instance lifecycle, such as 'stop', 'reboot' etc.
+ * <em><b>options</b></em> are listed by invoking <b>deltacloudc -h</b>. One important
+   option is <b>-u</b>, with which you specify the API\_URL at which the Deltacloud server
+   is running. The API\_URL takes the form <b>http://[user]:[password]@[api_url]:[port]/[api]</b>
+   (examples follow). Alternatively, rather than having to supply the API\_URL for every
+   invocation of <b>deltacloudc</b> you have the choice of setting the API\_URL environment
+   variable (e.g., export API\_URL=http://mockuser:mockpassword@localhost:3001/api). A listing of the credentials you need to provide for each back-end cloud provider
+is available [here](documentation.html#credentials).
+
+
+The following examples assume that the Deltacloud server is running on your local machine
+port 3001 (the **deltacloudd** server daemon defaults to 'localhost:3001') and was started
+with the 'mock' provider (i.e. **deltacloudd -i mock**).
+
+To list all collections available in the current driver:
+
+    $ deltacloudc -l -u http://mockuser:mockpassword@localhost:3001/api
+
+To get a list of all **images**:
+
+    $ deltacloudc images index -u http://mockuser:mockpassword@localhost:3001/api
+
+To list all operations for the **buckets** collection:
+
+    $ deltacloudc buckets -l -u http://mockuser:mockpassword@localhost:3001/api
+
+To create a new blob in the bucket called 'bucket1':
+
+    $ deltacloudc blob create -i 'my_new_blob' -b 'bucket1' -f /home/marios/file.txt
+
 
 ### libdeltacloud ###
 
@@ -38,19 +213,67 @@ Or you can download the RPMs for Fedora 12 and 13:
 
 Contributed by Chris Lalancette.
 
+### Other HTTP clients - cURL
 
-### Deltacloud Client ###
+As interaction with the Deltacloud server is via HTTP calls, you can use any
+HTTP client to talk to it using the Deltacloud
+[REST API](api.html "Deltacloud REST API"). One popular command line tool available
+on most modern linux distributions is [cURL](http://curl.haxx.se/ "cURL"). We
+give some examples here of how you can use cURL to interact with Deltacloud,
+demonstrating the flexibility and power of the Deltacloud REST API.
+
+The following examples assume the Deltacloud server is running on locahost:3001,
+and was started with the 'ec2' driver (i.e., **deltacloudd -i ec2**)
+
+To get a [listing of all images](api.html#list_images) available in the
+back-end cloud:
+
+    curl  --user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+    "http://localhost:3001/api/images?format=xml"
+
+The cURL **--user** option is used to specify the **username:password**
+[credentials](documentation.html#credentials)
+for access to the back-end cloud provider (Amazon EC2 in this case).
+
+To [create a new instance](api.html#create_instance) from the
+[image](api.html#h3_3) with id 'ami-f51aff9c', in [realm](api.html#h3_1)
+ 'us-east-1c', with the [hardware profile](api.html#h3_2) 'c1.medium',
+in [firewall](api.html#h3_7) 'default':
+
+    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"
+
+To [delete a firewall](api.html#delete_firewall) called 'develgroup':
+
+    curl -X DELETE
+    --user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+    http://localhost:3001/api/firewalls/develgroup?format=xml
+
+To [create a blob](api.html#create_blob) called 'my_new_blob' within the
+[bucket](api.html#h4_3) 'mybucket' from a local file with ***HTTP PUT***,
+specifying its content type and setting some some metadata ***key:value***
+pairs:
+
+    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
 
-Deltacloud Client is a command line tool that communicates with the
-Deltacloud&nbsp;API.
+To [retrieve blob metadata](api.html#h4_3_10) for the blob called 'my_new_blob':
 
-Type the following command to install it:
+    curl -iv -X HEAD
+    --user "pGbAJ1TsVg5PKs3BK27O:dPs47ralgBlldqYNbLg3scthsg4g8v0L9d6Mb5DK"
+    http://localhost:3001/api/buckets/mybucket/my_new_blob?format=xml
 
-    $ gem install deltacloud-client
+Note the use of the '-iv' flags here which will ensure that cURL displays the
+request and response headers (blob metadata is reported in the response headers,
+with an empty response body).
 
 ### Your name here ###
 
-Do you have a tool to make Deltacloud more useful? Let us know on our
-[deltacloud-devel mailing list][deltacloud-devel] and we'll post it here!
+Do you have a tool to make Deltacloud more useful? [Let us know](contact.html)
+and we'll add your contributions to this page!
 
-[deltacloud-devel]: mailto:deltacloud-dev-subscribe@incubator.apache.org
diff --git a/site/content/index.haml b/site/content/index.haml
index 70284d8..32737ae 100644
--- a/site/content/index.haml
+++ b/site/content/index.haml
@@ -12,14 +12,17 @@ filter: haml
   .colleft
     %p
       %em
-        Deltacloud Core
+        Deltacloud
       gives you:
     %ul
       %li
-        REST API (simple, any-platform access)
+        A
+        %a{ :href => "api.html" }
+          RESTful API
+        for simple, any-platform access
       %li
-        %a.providers{ :href => "#providers", :title => "Supported providers" }
-          Support for all major cloud service providers
+        Support for all
+        %a.providers{ :href => "#providers", :title => "Supported providers" }          major cloud service providers
       %li
         Backward compatibility across versions, providing long-term stability for scripts, tools and applications
       %li
@@ -30,11 +33,11 @@ filter: haml
   .right
     %img{ :src => "styles/diagram-soa.png", :height => "265", :alt => "diagram-soa", :width => "620", :style => "margin-bottom:1em;" }
   %p.foot
-    The
+    %em Deltacloud
+    makes it easy for cloud providers to
     %a{ :href => "documentation.html" }
-      Deltacloud Core
-    makes it easy for cloud
-    providers to add their cloud to the Deltacloud common API.
+      add their cloud
+    to the Deltacloud API.
 #news
   .recent
     %h2
diff --git a/site/content/styles/deltacloud_concept.gif b/site/content/styles/deltacloud_concept.gif
new file mode 100644
index 0000000000000000000000000000000000000000..54e2eb57b7b950ced3b540a6e1c46f3b5d7ba50e
GIT binary patch
literal 19082
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...@N>7aT
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...@C->+5&x!MudBypa+`oKN1
zSYr?6PQ4jDP$w{$W$@si_Wyt-ibk5*>~boLZA7ATRfrv#mo&4Sa{=6rSq6&X@*54V
zuA!t+>$J2{{naYX-1dJyxz0yZ)g<QIkLADNDHy0N7<Vg}=P6vSE&RY!yz7=Pm|whE
zTXK9>@`I<8w5~MaP+{No)nkiNLEbVE_cEEfq8pw{3Ery5?o~496(3bnz1*LkGKNFX
zta9BVQ9R`-C?63n$Bvr1Cf@qay7~`Xc>{F~^Sq69?zJG-#^buC%ewOGy0`y$>)m;)
zN%@RuPs1O;3&LnRevR@x0%Pv8M*FIi@+gZ!-ew!Vw-$VzUVM!phjs~<4!`=YbN7an
z`tG{AcVSPB2QiOxG?#d=c+d3FCgAEGix`D}92R<UoyC0bot@tQdzv^r=JVl;-SF4|
z=;D12-!Lb?4>`Y6*OUEH)JrRll%1N9VjeY{hH)?ciJ*pwO|*^OqE_57Dvc$`nEz|&
zg;^hNe_g}O0RQZG!>k~POeBgnS+OyD^v~bp+5FMk1os8J#zj(rr5`7cRZ=R!Cv8qc
zBP5Mw1FlOdjsIcfwYq%5Q-`AfD9oPDhtoRoKbG>Ce$_<aV@~78V$V{>uU&c#=(yst
zgs<v1)!sVc+vSZry8^q%p6Yu$T^_H0b&uK%c)lS$=qJqZaW3EGY}ywTJm8(>By6G-
z6X?mV)#wv=Vlhr`iyg%E5X2M1^G_N*k!U&vxt{W>oLP*Y3F0%R2-bXPyok!}^xH*q
zGf=NqAJUJL^A9o3B9Cn_xMqX6dz8wGBsEuLz_7VyC@av;4Y<m#D)4Q6b@oIeSAZG;
z>YEpaz5Od@3~!zOBIJD&#tqbe^kv`m*k19QmzRp!x1WM<n+}f@v*u7z;F)IcK1Rbw
z@!o*+x950ye+5<RC>1Birt7!|4XQ3PQod<zu6~4FX|--3^b`T!8z-0Mzd2V<3<iIn
z<KD=4|I&$3Gk|PtqWAnvUjDlv=oM7AQoQ_e`OO4_dzw4wGbtzlT5V3M<Hq;*F#BgQ
zN_yZdD2zW1!#)8KXd!2P1lNQZcZGb<nvrp5_<URsmtNmY0K}GHm}TDJAE7S|UP=vx
zsd-k0^1@I_V=`4Cx+kbpXJ2|3VU@{mw;EQUlhnzz4|KX<#%C>zD{14vImU_W7$@Iq
zabL<ryY(O0_Hpcs#hdFf?rbb|o*tLS78oi93~;ph>NsIePm$T1iKK}5bX1tTqGfbV
zi08`!!c}DMP*|MQc6}<2o2E6%27tGEb8I5Q`6US(<#iTzgO(Z{U@Vb8_ofparDJQp
z;mqWTZQ{`#y<<Xo7PX@9TeIz~1m)Y1D1Xt38-$+dBNhsA?;`#!zJ_vin@+uhqdTJq
zx`7$nKs9;ktJli0;4f&3@>|PUpv`X3i_#Uw_uugqx%Gi6&@jA65LUiL9NwZ2o0)G#
zB~$(VAG~mB2T_(cRHi5-5wW<TD...@X3Wg2105n>UFTh*s6w5qpLtAze{x92gUOqS-L
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
P2>};r004^~0000x*v(fv

literal 0
HcmV?d00001

-- 
1.7.3.4


Re: Site docs update - work in progress

Posted by David Lutterkort <lu...@redhat.com>.
On Wed, 2011-08-31 at 12:06 +0300, marios@redhat.com wrote:
> Site documentation update - this is not intended for ack/nack but
> rather request for comments... this work is still ongoing:

Just a reminder on all of them: before committing these files, mae sure
to run webby, and commit the corresponding files in site/output/ too.

David