Return-Path: X-Original-To: apmail-incubator-deltacloud-dev-archive@minotaur.apache.org Delivered-To: apmail-incubator-deltacloud-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 06E387964 for ; Wed, 31 Aug 2011 09:07:54 +0000 (UTC) Received: (qmail 62719 invoked by uid 500); 31 Aug 2011 09:07:52 -0000 Delivered-To: apmail-incubator-deltacloud-dev-archive@incubator.apache.org Received: (qmail 61952 invoked by uid 500); 31 Aug 2011 09:07:47 -0000 Mailing-List: contact deltacloud-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: deltacloud-dev@incubator.apache.org Delivered-To: mailing list deltacloud-dev@incubator.apache.org Received: (qmail 61763 invoked by uid 99); 31 Aug 2011 09:07:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Aug 2011 09:07:37 +0000 X-ASF-Spam-Status: No, hits=-4.3 required=5.0 tests=FRT_TODAY2,NORMAL_HTTP_TO_IP,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS,WEIRD_PORT X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of marios@redhat.com designates 209.132.183.28 as permitted sender) Received: from [209.132.183.28] (HELO mx1.redhat.com) (209.132.183.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Aug 2011 09:07:33 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p7V97CIS001677 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 31 Aug 2011 05:07:12 -0400 Received: from name.redhat.com (ovpn-112-16.ams2.redhat.com [10.36.112.16]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p7V974fG025197 for ; Wed, 31 Aug 2011 05:07:10 -0400 From: marios@redhat.com To: deltacloud-dev@incubator.apache.org Subject: [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. Date: Wed, 31 Aug 2011 12:07:00 +0300 Message-Id: <1314781621-17399-3-git-send-email-marios@redhat.com> In-Reply-To: <1314781621-17399-1-git-send-email-marios@redhat.com> References: <1314781621-17399-1-git-send-email-marios@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 From: marios Signed-off-by: marios --- 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 -
- +. ### 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   %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/) +Deltacloud conceptual overview -### 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 \***. The ***\*** 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") + ***\***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] + + * collection 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) + * operation 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. + * options are listed by invoking deltacloudc -h. One important + option is -u, with which you specify the API\_URL at which the Deltacloud server + is running. The API\_URL takes the form http://[user]:[password]@[api_url]:[port]/[api] + (examples follow). Alternatively, rather than having to supply the API\_URL for every + invocation of deltacloudc 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 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 zcmeF2MBywb`Ln*z$?Iifdyc(@Lymc0FVga|KGy@b|$E) zsp;tG*x1eooi%>)!L%L)W>ZKXNC2<<0&pS;STk9+xg)E0+G% zuVI_lv8@}}-W}{vWaL<4;$&*-RA%N}e*REr=WtioQf1{@ef@fK^T+n~ot~b(_wPqW zMrLMamM11wr=~XN=T}!(cUQN!wzdX8VTbpyQ-|2q!-v%~?ABN8=aG@4+1b6_-LsXI zuUlK^JA3>4`-cZ#zV7c|TwLsZ!ya5?FTVe~J~;UP<;(rIZ+CZhS3j|Lzp%edY&xcxsO7OlmDC$HU#k>rHFT-|=Rxtks)$=p9TKX})XP=?%U; z-z1d-=Si86LD>aWn++@*F}J%=dNQo`3^yb;`>3 z?!K%@gXTdyO{QHjmWfyv-GRPex2G%hPu>pnzDT$@m?_bHKk)L7m+I`(!u$9C6&@b< z9tKQZqlSng7MXk%&wW}-^D@MkUIPNK{S3m#wS@ynJh;P^=q)zNqFJch%K(KT#)iQr z+V{*xY5m*|%DnTmrb*m%HEb->Vi*7rB6l^yk^n{m(qx!V_cFlrzU)ACLaAl14P)~v zVzEx@91W@jwM76!3=by&H(dHSmxQX>jwHAPcSUOt9hjYn6u)u=Q34X6c>Kd>vrsEzqPm;bS4PXa>j;`1X!18J5 zHQ=uyBM5RzEGutXBXfK;xGY~o5vOBX=1ZxxoDh$p_~yM)6(>3m5<$vY{wWpAUmC|k zO5W;`UUB|&Jk#~!^?0TycX@sL16@2ji!OcH69h``%;Ob_VC`P-Uuo`fHMXk{N@!Q} zs@#^~WS6uk6=@AXF)oJ&pah?!H*Ex$j=0uvl9PiwjVLQP4Xi+2iWx6hmVx3fk_+jP z67pZT)qs7i6oEv2^dhym=qrb`kb#DCL<6}I4hZ*Z`Ziq~M(nd>8W>ds!9%O7MQAS1 zlrZ0rBEE;s*f1S^uwoN1w#9BzA@Y#XA#7UUDR{22UuSUpdaZbt5?;W%=d(a>W%0DkvIVh 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 literal 0 HcmV?d00001 -- 1.7.3.4