You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by bu...@apache.org on 2013/12/31 15:19:38 UTC

svn commit: r892269 [4/6] - in /websites/staging/libcloud/trunk/content: ./ css/ docs/ images/ js/ scripts/ source/

Added: websites/staging/libcloud/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.html
==============================================================================
--- websites/staging/libcloud/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.html (added)
+++ websites/staging/libcloud/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Using Libcloud in multi-threaded and async environments | Apache Libcloud Documentation</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/documentation.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Libcloud
+                                             Documentation: Using Libcloud in multi-threaded and async environments</h2>
+      
+  </div>
+
+    
+    <div id="sidebar" class="span-6 border">
+      
+<ul id="menu">
+    <li><a href="/index.html">Website home</a></li>
+    <li><a href="/docs/index.html">Documentation home</a></li>
+    <li><a href="/docs/components.html">Components</a></li>
+    <ul>
+        <li class="title">Compute</li>
+        <ul>
+            <li><a href="compute-overview.html">Overview</a></li>
+            <li><a href="compute-base-api.html">Base API</a></li>
+            <li><a href="compute-deployment.html">Deployment</a></li>
+            <li><a href="compute-examples.html">Examples</a></li>
+        </ul>
+        <li class="title">Storage (new in 0.5.0)</li>
+        <ul>
+            <li><a href="storage-overview.html">Overview</a></li>
+            <li><a href="storage-base-api.html">Base API</a></li>
+            <li><a href="storage-examples.html">Examples</a></li>
+        </ul>
+        <li class="title">Load Balancer (new in 0.5.0)</li>
+        <ul>
+            <li><a href="load-balancer-overview.html">Overview</a></li>
+            <li><a href="load-balancer-base-api.html">Base API</a></li>
+            <li><a href="load-balancer-examples.html">Examples</a></li>
+        </ul>
+        <li class="title">DNS (new in 0.6.0)</li>
+        <ul>
+            <li><a href="dns-overview.html">Overview</a></li>
+            <li><a href="dns-base-api.html">Base API</a></li>
+            <li><a href="dns-examples.html">Examples</a></li>
+        </ul>
+    </ul>
+    <li>Development</li>
+    <ul>
+        <li><a href="writing-tests-and-using-the-fixture-framework.html">Writing tests and using the fixture framework</a></li>
+    </ul>
+    <li>Other</li>
+    <ul>
+        <li><a href="ssl-certificate-validation.html">SSL certificate validation</a></li>
+        <li><a href="debugging.html">Debugging</a></li>
+        <li><a href="using-libcloud-in-multi-threaded-and-async-environments.html">Using Libcloud in multi-threaded and async environments</a></li>
+    </ul>
+    <li><a href="/apidocs">Generated API docs</a></li>
+</ul>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="using-libcloud-in-multi-threaded-and-async-environments">Using Libcloud in multi-threaded and async environments</h2>
+<p>Libcloud's primary task is to communicate with different provider APIs using HTTP.
+This means most of the work is not CPU intensive, but performing all those HTTP
+requests includes a lot of waiting which makes the library I/O bound.</p>
+<p>Most of the time you want to perform more operations in parallel or just want
+your code to finish faster (for example starting a lot of servers or periodically
+polling for node status).</p>
+<p>Problems like this are usually solved using threads or async libraries such as
+Twisted, Tornado or gevent.</p>
+<p>This page contains some information and tips about how to use Libcloud in
+such environments.</p>
+<h3 id="libcloud-and-thread-safety">Libcloud and thread-safety</h3>
+<p>Important thing to keep in mind when dealing with threads is
+thread-safety. Libcloud driver instance is <strong>not</strong> thread safe. This means if
+you don't want to deal with complex (and usually inefficient) locking the
+easiest solution is to create a new driver instance inside each thread.</p>
+<h3 id="using-libcloud-with-gevent">Using Libcloud with gevent</h3>
+<p>gevent has an ability to monkey patch and replace functions in the Python <code>socket</code>
+<code>urllib2</code>, <code>httplib</code> and <code>time</code> module with its own functions which don't block.</p>
+<p>You need to do two things when you want to use Libcloud with gevent:</p>
+<ol>
+<li>
+<p>Enable monkey patching</p>
+<p>::python
+from gevent import monkey
+monkey.patch_all()</p>
+</li>
+<li>
+<p>Create a separate driver instance for each Greenlet. This is necessary
+because a driver instance reuses the same <code>Connection</code> class.</p>
+</li>
+</ol>
+<p>For example see <a href="/docs/storage-examples.html#efficiently-download-multiple-files-using-gevent">Efficiently download multiple files using gevent</a>.</p>
+<h3 id="using-libcloud-with-twisted">Using Libcloud with Twisted</h3>
+<p>Libcloud has no Twisted support included in the core which means you need
+to be careful when you use it with Twisted and some other async frameworks.</p>
+<p>If you don't use it properly it can block the whole reactor (similar as any
+other blocking library or a long CPU-intensive task) which means the execution 
+of other pending tasks in the event queue will be blocked.</p>
+<p>A simple solution to prevent blocking the reactor is to run Libcloud calls
+inside a thread. In Twisted this can be achieved using <code>threads.deferToThread</code>
+which runs a provided method inside the Twisted thread pool.</p>
+<p>The example bellow demonstrates how to create a new node inside a thread
+without blocking the whole reactor.</p>
+<div class="codehilite"><pre><span class="kn">from</span> <span class="nn">twisted.internet</span> <span class="kn">import</span> <span class="n">defer</span><span class="p">,</span> <span class="n">threads</span><span class="p">,</span> <span class="n">reactor</span>
+
+<span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
+<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
+
+<span class="nd">@defer.inlineCallbacks</span>
+<span class="k">def</span> <span class="nf">create_node</span><span class="p">():</span>
+    <span class="n">node</span> <span class="o">=</span> <span class="k">yield</span> <span class="n">threads</span><span class="o">.</span><span class="n">deferToThread</span><span class="p">(</span><span class="n">_thread_create_node</span><span class="p">,</span>
+                                       <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_thread_create_node</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
+    <span class="n">Driver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">RACKSPACE</span><span class="p">)</span>
+    <span class="n">conn</span> <span class="o">=</span> <span class="n">Driver</span><span class="p">(</span><span class="s">&#39;username&#39;</span><span class="p">,</span> <span class="s">&#39;api key&#39;</span><span class="p">)</span>
+    <span class="n">image</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_images</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="n">size</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_sizes</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="n">node</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">create_node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">image</span><span class="o">=</span><span class="n">image</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">node</span>
+</pre></div>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/docs/writing-tests-and-using-the-fixture-framework.html
==============================================================================
--- websites/staging/libcloud/trunk/content/docs/writing-tests-and-using-the-fixture-framework.html (added)
+++ websites/staging/libcloud/trunk/content/docs/writing-tests-and-using-the-fixture-framework.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Writing tests and using the fixture framework | Apache Libcloud Documentation</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/documentation.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Libcloud
+                                             Documentation: Writing tests and using the fixture framework</h2>
+      
+  </div>
+
+    
+    <div id="sidebar" class="span-6 border">
+      
+<ul id="menu">
+    <li><a href="/index.html">Website home</a></li>
+    <li><a href="/docs/index.html">Documentation home</a></li>
+    <li><a href="/docs/components.html">Components</a></li>
+    <ul>
+        <li class="title">Compute</li>
+        <ul>
+            <li><a href="compute-overview.html">Overview</a></li>
+            <li><a href="compute-base-api.html">Base API</a></li>
+            <li><a href="compute-deployment.html">Deployment</a></li>
+            <li><a href="compute-examples.html">Examples</a></li>
+        </ul>
+        <li class="title">Storage (new in 0.5.0)</li>
+        <ul>
+            <li><a href="storage-overview.html">Overview</a></li>
+            <li><a href="storage-base-api.html">Base API</a></li>
+            <li><a href="storage-examples.html">Examples</a></li>
+        </ul>
+        <li class="title">Load Balancer (new in 0.5.0)</li>
+        <ul>
+            <li><a href="load-balancer-overview.html">Overview</a></li>
+            <li><a href="load-balancer-base-api.html">Base API</a></li>
+            <li><a href="load-balancer-examples.html">Examples</a></li>
+        </ul>
+        <li class="title">DNS (new in 0.6.0)</li>
+        <ul>
+            <li><a href="dns-overview.html">Overview</a></li>
+            <li><a href="dns-base-api.html">Base API</a></li>
+            <li><a href="dns-examples.html">Examples</a></li>
+        </ul>
+    </ul>
+    <li>Development</li>
+    <ul>
+        <li><a href="writing-tests-and-using-the-fixture-framework.html">Writing tests and using the fixture framework</a></li>
+    </ul>
+    <li>Other</li>
+    <ul>
+        <li><a href="ssl-certificate-validation.html">SSL certificate validation</a></li>
+        <li><a href="debugging.html">Debugging</a></li>
+        <li><a href="using-libcloud-in-multi-threaded-and-async-environments.html">Using Libcloud in multi-threaded and async environments</a></li>
+    </ul>
+    <li><a href="/apidocs">Generated API docs</a></li>
+</ul>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="writing-tests-and-using-the-fixture-framework">Writing tests and using the fixture framework</h2>
+<p>This section describes how to write tests for the provider drivers and how to use
+our fixture framework and system for mocking the responses.</p>
+<p>Examples in this section refer to the compute API but things described in this
+section are also applicable to other APIs.</p>
+<ul>
+<li><a href="#creating-fixtures">Creating Fixtures</a></li>
+<li><a href="#mocking-responses-and-using-mockhttp-class">Mocking responses and using MockHttp class</a></li>
+<li><a href="#mock-http-class-example">MockHttp class example</a></li>
+</ul>
+<h3 id="creating-fixtures">Creating Fixtures</h3>
+
+<p>In our test cases fixtures store different responses returned by the provider APIs.
+They are stored and named in the following format:
+<code>test/&lt;api name&gt;/fixtures/&lt;provider name&gt;/&lt;fixture name&gt;</code>.</p>
+<p>Fixtures are usually generated by "manually" performing (usually using a tool like curl)
+different actions with the provider API and saving responses in the files.</p>
+<p><em>Note: You are advised against using the examples from the provider API docs because empirical
+evidence has shown that in a lot of cases they are wrong or out of date.</em></p>
+<h3 id="mocking-responses-and-using-mockhttp-class">Mocking responses and using MockHttp class</h3>
+
+<p>Each provider test file usually contains a class which inherits from the base <code>MockHttp</code> class.
+This class is responsible for loading fixtures and returning a mocked response for
+each API call.</p>
+<p>Which method is called is primary determined by the requested path. All the forward slashes,
+periods and dashes in the requested path are replaced by an underscore (<code>_</code>).</p>
+<p>Some examples:</p>
+<p><strong>Requested path</strong>: <code>/servers/list.all</code><br />
+<strong>use_params</strong>: <code>MockHttp.use_params = None</code><br />
+<strong>Name of the method on the Mock class</strong>: <code>_servers_list_all</code></p>
+<p><strong>Requested path</strong>: <code>/servers/reboot-all</code><br />
+<strong>use_params</strong>: <code>MockHttp.use_params = None</code><br />
+<strong>Name of the method on the Mock class</strong>: <code>_servers_reboot_all</code></p>
+<p>Some providers use the same path for all the requests and the actual action is determined by
+some parameter in a query string. To overcome this problem, set the <code>use_param</code> MockHttp class
+attribute to the name of the query string parameter which specifies the action.
+Good example of a provider API which does this is the Amazon EC2 API
+(<code>test/compute/test_ec2.py</code>).</p>
+<p>Example:</p>
+<p><strong>Requested path</strong>: <code>/?Action=RebootInstances&amp;InstanceId=12345</code><br />
+<strong>use_params</strong>: <code>MockHttp.use_params = 'Action'</code><br />
+<strong>Name of the method on the Mock class</strong>: <code>_RebootInstances</code></p>
+<p>Usually we also want to test different scenarios for a single API call.
+Good example of this is testing a success and different failure scenarios when creating a node.
+Because we are testing a single API call, this means that the request path will in most
+cases be the same. This makes loading a different response fixture for each API call
+without inspecting the request parameters or doing something similar very cumbersome.</p>
+<p>This problem can be overcome by setting the <code>type</code> attribute on the <code>MockHttp</code> class before
+issuing a request. The specified <code>type</code> will be automatically appended to the end of the
+constructed method name.</p>
+<p>Example:</p>
+<p><strong>Requested path</strong>: <code>/servers/reboot-all</code><br />
+<strong>use_params</strong>: <code>MockHttp.use_params = None</code><br />
+<strong>type</strong>: <code>MockHttp.type = 'FAILURE'</code><br />
+<strong>Name of the method on the Mock class</strong>: <code>_servers_reboot_all_FAILURE</code></p>
+<h3 id="mock-http-class-example">MockHttp class example</h3>
+
+<p>Bellow is an example of a MockHttp class from the Amazon EC2 tests with a
+single method.</p>
+<p>Return value of a mock method is a tuple - 
+<strong>(status_code, response_body, response_headers, response_status_string)</strong>.</p>
+<ul>
+<li><strong>response_code</strong> (intger) - response status code (httplib.OK, httplib.NOT_FOUND, ...)</li>
+<li><strong>response_body</strong> (string) - actual mocked response body which is usually read from a fixture</li>
+<li><strong>response_headers</strong> (dictionary) - response headers</li>
+<li>
+<p><strong>response_status_string</strong> (string) - string representation of the response status code (httplib.responses[httplib.OK], httplib.responses[httplib.CONTINUE], ...)</p>
+<p>::python
+class EC2MockHttp(MockHttp):</p>
+<div class="codehilite"><pre><span class="n">fixtures</span> <span class="p">=</span> <span class="n">ComputeFileFixtures</span><span class="p">(</span><span class="s">&#39;ec2&#39;</span><span class="p">)</span>
+
+<span class="n">def</span> <span class="n">_DescribeInstances</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="n">headers</span><span class="p">):</span>
+    <span class="n">body</span> <span class="p">=</span> <span class="n">self</span><span class="p">.</span><span class="n">fixtures</span><span class="p">.</span><span class="n">load</span><span class="p">(</span><span class="s">&#39;describe_instances.xml&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="p">(</span><span class="n">httplib</span><span class="p">.</span><span class="n">OK</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;Content-Type&#39;</span><span class="p">:</span> <span class="s">&#39;application/xml&#39;</span><span class="p">},</span> <span class="n">httplib</span><span class="p">.</span><span class="n">responses</span><span class="p">[</span><span class="n">httplib</span><span class="p">.</span><span class="n">OK</span><span class="p">])</span>
+</pre></div>
+
+
+</li>
+</ul>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/docstring-conventions.html
==============================================================================
--- websites/staging/libcloud/trunk/content/docstring-conventions.html (added)
+++ websites/staging/libcloud/trunk/content/docstring-conventions.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Docstring Convetions</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Docstring Convetions</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="docstring-convetions">Docstring Convetions</h2>
+<p>Libcloud follow <a href="http://epydoc.sourceforge.net/epytextintro.html">epytext</a> docstring formatiing.</p>
+<ul>
+<li>Docstrings should always be used to describe the purpose of methods, functions, classes, and modules.</li>
+<li>Method docstring describes  all vargs and keywords (varargs and keywords are the names of the * and ** arguments).</li>
+<li>All of the blocks contained by a field must all have equal indentation, and that indentation must be greater than or equal to the indentation of the field's tag.</li>
+<li>All parametrs must have <code>@param</code> or <code>@keyword</code> field and <code>@type</code> field.</li>
+<li><code>@param p: ...</code>  A description of the parameter p for a function or method.</li>
+<li><code>@keyword p: ...</code> A description of the keyword parameter p.</li>
+<li><code>@type p: ...</code> The expected type for the parameter. p.</li>
+<li>Return must contain @return and @rtype.</li>
+<li><code>@return: ...</code> A description of return value for a function or method.</li>
+<li><code>@rtype: ...</code> The type of the return value for a function or method.</li>
+<li>Required parameters contain <code>(required)</code> notation in description.
+For example: <code>@keyword    image:  OS Image to boot on node. (required)</code></li>
+<li>Multiple types separated with "or"
+For example: <code>@type       auth:   L{NodeAuthSSHKey} or L{NodeAuthPassword}</code></li>
+<li><code>C{type}</code> for Built-in types and <code>L{type}</code> for Libcloud types.</li>
+<li><code>@type ssh_username: C{str}</code></li>
+<li><code>@type node: L{Node}</code></li>
+<li>For a description of constainer types used notation: <code>&lt;container_type&gt; of &lt;objects_type&gt;</code>
+For example: <code>@rtype: C{list} of L{Node}</code></li>
+<li>Sometimes you need to inhterit all arguments and add new keyword arguments, for this used <code>@inherits</code> field: <code>@inherits: L{class_name.method_name}</code>
+This field should be added before the arguments. If inherited docstring doesn't contain description\rtype, they used from the parent docstring.</li>
+</ul>
+<p>For example:</p>
+<div class="codehilite"><pre><span class="k">class</span> <span class="nc">NodeDriver</span><span class="p">(</span><span class="n">BaseDriver</span><span class="p">):</span>
+        <span class="k">def</span> <span class="nf">create_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+            <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">            Create a new node instance.</span>
+
+<span class="sd">            @keyword    name:   String with a name for this new node (required)</span>
+<span class="sd">            @type       name:   C{str}</span>
+
+<span class="sd">            @return: The newly created node.</span>
+<span class="sd">            @rtype: L{Node}</span>
+<span class="sd">            &quot;&quot;&quot;</span>
+            <span class="k">pass</span>
+
+        <span class="k">def</span> <span class="nf">deploy_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+            <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">            Create a new node, and start deployment.</span>
+
+<span class="sd">            @inherits: L{NodeDriver.create_node}</span>
+
+<span class="sd">            @keyword    deploy: Deployment to run once machine is online and</span>
+<span class="sd">                                availble to SSH.</span>
+<span class="sd">            @type       deploy: L{Deployment}</span>
+<span class="sd">            &quot;&quot;&quot;</span>
+            <span class="k">pass</span>
+
+
+<span class="k">class</span> <span class="nc">OpenStackNodeDriver</span><span class="p">(</span><span class="n">NodeDriver</span><span class="p">):</span>
+        <span class="k">def</span> <span class="nf">create_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+            <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">            @inherits: L{NodeDriver.create_node}</span>
+
+<span class="sd">            @keyword    ex_metadata: Key/Value metadata to associate with a node</span>
+<span class="sd">            @type       ex_metadata: C{dict}</span>
+<span class="sd">            &quot;&quot;&quot;</span>
+            <span class="k">pass</span>
+</pre></div>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/downloads.html
==============================================================================
--- websites/staging/libcloud/trunk/content/downloads.html (added)
+++ websites/staging/libcloud/trunk/content/downloads.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Downloads</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Downloads</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="downloads">Downloads</h2>
+<h3 id="latest-stable-release">Latest stable release</h3>
+<ul>
+    <li>0.13.2 - Released on September 18th, 2013:
+      <ul>
+        <li><a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.tar.bz2">apache-libcloud-0.13.2.tar.bz2</a>
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.tar.bz2.asc">asc</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.tar.bz2.sha1">sha1</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.tar.bz2.md5">md5</a>]
+        </li>
+        <li><a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.zip">apache-libcloud-0.13.2.zip</a>
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.zip.asc">asc</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.zip.sha1">sha1</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.13.2.zip.md5">md5</a>]
+        </li>
+          <li>Verify with these public <a href="http://www.apache.org/dist/libcloud/KEYS">KEYS</a> used by Apache Libcloud developers.</li>
+      </ul>
+    </li>
+  </ul>
+
+<p><p>For upgrade notes please see <a href="https://libcloud.readthedocs.org/en/latest/upgrade_notes.html">Upgrade notes</a>.
+  Old releases can be found in the archive at
+  <a href="http://archive.apache.org/dist/libcloud/">http://archive.apache.org/dist/libcloud/</a>.</p></p>
+<h3 id="latest-beta-release">Latest beta release</h3>
+<ul>
+    <li>0.14.0-beta3 - Released on November 21st, 2013:
+      <ul>
+        <li><a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.tar.bz2">apache-libcloud-0.14.0-beta3.tar.bz2</a>
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.tar.bz2.asc">asc</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.tar.bz2.sha1">sha1</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.tar.bz2.md5">md5</a>]
+        </li>
+        <li><a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.zip">apache-libcloud-0.14.0-beta3.zip</a>
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.zip.asc">asc</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.zip.sha1">sha1</a>]
+            [<a href="http://www.apache.org/dist/libcloud/apache-libcloud-0.14.0-beta3.zip.md5">md5</a>]
+        </li>
+          <li>Verify with these public <a href="http://www.apache.org/dist/libcloud/KEYS">KEYS</a> used by Apache Libcloud developers.</li>
+      </ul>
+    </li>
+  </ul>
+
+<p><p>For upgrade notes please see <a href="https://libcloud.readthedocs.org/en/latest/upgrade_notes.html">Upgrade notes</a>.
+  Old releases can be found in the archive at
+  <a href="http://archive.apache.org/dist/libcloud/">http://archive.apache.org/dist/libcloud/</a>.</p></p>
+<h2 id="distribution-specific-packages">Distribution specific packages</h2>
+<ul>
+<li>FreeBSD (ports) - <code>ports/net/py-libcloud</code></li>
+<li>Ubuntu, Debian (apt) - <code>python-libcloud</code></li>
+<li>Fedora (yum) - <code>python-libcloud</code></li>
+</ul>
+<p>Note: Distribution packages are usually out of date so you are recommended to install the library using pip.</p>
+<p>
+    Quick package verification guide:
+    <ol style="margin-left:3em;">
+      <li>
+        Import KEYS file
+<pre>$ <strong>gpg --import KEYS</strong>
+gpg: key 42721F00: public key "Paul Querna &lt;...&gt;" imported
+gpg: Total number processed: 1
+gpg:               imported: 1
+gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
+gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
+gpg: next trustdb check due at 2011-10-30</pre>
+      </li>
+      <li>
+        Verify package with .asc signature:
+<pre>$ <strong>gpg --verify apache-libcloud-0.13.2.tar.bz2.asc</strong>
+gpg: Signature made Wed Oct  6 15:31:35 2010 CDT using DSA key ID 42721F00
+<span style="color:green">gpg: Good signature from "Paul Querna &lt;...&gt;"
+gpg:                 aka "Paul Querna &lt;...&gt;"
+gpg:                 ...</span>
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg:          There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 39F6 691A 0ECF 0C50 E8BB  849C F788 75F6 4272 1F00</pre>
+            Example bad signature:
+<pre>$ <strong>gpg --verify apache-libcloud-0.13.2.tar.bz2.asc</strong>
+gpg: Signature made Wed Oct  6 15:31:35 2010 CDT using DSA key ID 42721F00
+<span style="color:red">gpg: BAD signature from "Paul Querna &lt;...&gt;"</span></pre>
+      </li>
+    </ol>
+
+See the <a href="/devinfo.html">developer information</a> for how to get libcloud from source control.</p>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/driver-features.html
==============================================================================
--- websites/staging/libcloud/trunk/content/driver-features.html (added)
+++ websites/staging/libcloud/trunk/content/driver-features.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Driver features</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Driver features</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="driver-features">Driver features</h2>
+<p>Here you can find a short description of the common features supported by different provider drivers. Keep in mind that this page only contains a list of standard features - provider specific features (extension methods) are not included.</p>
+<h2 id="wzxhzdk0computewzxhzdk1"><a name="compute">Compute</a></h2>
+<p>Compute part of the library allows users to manage virtual servers and services such as Amazon EC2 and Rackspace CloudServers.</p>
+<h3 id="wzxhzdk2listwzxhzdk3"><a name="list">list</a></h3>
+<p>Returns a list of the currently active nodes.</p>
+<h3 id="wzxhzdk4rebootwzxhzdk5"><a name="reboot">reboot</a></h3>
+<p>Allows user to reboot (restart) a node.</p>
+<h3 id="wzxhzdk6createwzxhzdk7"><a name="create">create</a></h3>
+<p>Allows user to create a new node.</p>
+<h3 id="wzxhzdk8destroywzxhzdk9"><a name="destroy">destroy</a></h3>
+<p>Allows user to destroy an existing node.</p>
+<h3 id="wzxhzdk10imageswzxhzdk11"><a name="images">images</a></h3>
+<p>Returns a list of available node images. An image usually represents an operating system which is installed on the server.</p>
+<h3 id="wzxhzdk12sizeswzxhzdk13"><a name="sizes">sizes</a></h3>
+<p>Returns a list of available node sizes. A size represents server configuration (CPU speed, number of cores, amount of RAM, disk size, etc.)</p>
+<h3 id="wzxhzdk14deploywzxhzdk15"><a name="deploy">deploy</a></h3>
+<p>Allows user to run arbitrary shell script on the node after it has been provisioned.</p>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/europython-libcloud-sprint.html
==============================================================================
--- websites/staging/libcloud/trunk/content/europython-libcloud-sprint.html (added)
+++ websites/staging/libcloud/trunk/content/europython-libcloud-sprint.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Apache Libcloud development sprint at EuroPython 2011 in Florence, Italy</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Apache Libcloud development sprint at EuroPython 2011 in Florence, Italy</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="apache-libcloud-development-sprint-at-europython-2011-in-florence-italy">Apache Libcloud development sprint at EuroPython 2011 in Florence, Italy</h2>
+<p>Tomaz Muraus, one of the Libcloud developers will be present at <a href="http://ep2011.europython.eu/">EuroPython</a>
+in Florence Italy from <strong>20-26 of June</strong> where he will held a Libcloud development sprint.</p>
+<p>This is a great opportunity for anyone who would like to participate or learn more about Libcloud to join
+him.</p>
+<p><a href="http://ep2011.europython.eu/"><img src="/images/europython-logo.png" style="display: block; margin: 0 auto;" /></a></p>
+<p>Sprint topics include, but are not limited to:</p>
+<ul>
+<li>Working on the new Storage drivers</li>
+<li>Working on the new Load-balancer drivers</li>
+<li>Working on DNS support which is planned for Libcloud 0.6.0</li>
+<li>Exploring existing monitoring services and their APIs (Amazon CloudWatch, Cloudkick, ServerDensity, Librato Silverling, New Relic, ...)</li>
+<li>Improving the documentation</li>
+<li>Working on tutorials and examples for the new Storage and Load-balancer
+  APIs</li>
+<li>Improving and extending the OpenStack drivers</li>
+<li>Making it work with Python 3</li>
+</ul>
+<p>If you plan to join us, please post on <a href="devinfo.html">our mailing list</a> so we know how many people to
+expect.</p>
+<p>Thanks and hopefully see you in Florence!</p>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/getting-started.html
==============================================================================
--- websites/staging/libcloud/trunk/content/getting-started.html (added)
+++ websites/staging/libcloud/trunk/content/getting-started.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,236 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Getting started</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Getting started</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="installation">Installation</h2>
+<p>Libcloud is <a href="http://pypi.python.org/pypi/apache-libcloud">available on PyPi</a> and can be installed using pip:</p>
+<div class="codehilite"><pre>pip install apache-libcloud
+</pre></div>
+
+
+<h2 id="upgrading">Upgrading</h2>
+<p>If you used pip to install the library you can also use it to upgrade it:</p>
+<div class="codehilite"><pre>pip install --upgrade apache-libcloud
+</pre></div>
+
+
+<h2 id="documentation">Documentation</h2>
+<p>Available at <a href="https://libcloud.readthedocs.org/en/latest/">https://libcloud.readthedocs.org/en/latest/</a>.</p>
+<h2 id="example-connecting-with-a-driver">Example: Connecting with a Driver</h2>
+<div class="codehilite"><pre><span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
+<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
+
+<span class="n">EC2_ACCESS_ID</span> <span class="o">=</span> <span class="s">&#39;your access id&#39;</span>
+<span class="n">EC2_SECRET_KEY</span> <span class="o">=</span> <span class="s">&#39;your secret key&#39;</span>
+
+<span class="n">Driver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">EC2</span><span class="p">)</span>
+<span class="n">conn</span> <span class="o">=</span> <span class="n">Driver</span><span class="p">(</span><span class="n">EC2_ACCESS_ID</span><span class="p">,</span> <span class="n">EC2_SECRET_KEY</span><span class="p">)</span>
+
+<span class="n">nodes</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_nodes</span><span class="p">()</span>
+<span class="c"># [&lt;Node: uuid=..., state=3, public_ip=[&#39;1.1.1.1&#39;], provider=EC2 ...&gt;, ...]</span>
+</pre></div>
+
+
+<h2 id="example-creating-a-node">Example: Creating a Node</h2>
+<div class="codehilite"><pre><span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
+<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
+
+<span class="n">RACKSPACE_USER</span> <span class="o">=</span> <span class="s">&#39;your username&#39;</span>
+<span class="n">RACKSPACE_KEY</span> <span class="o">=</span> <span class="s">&#39;your key&#39;</span>
+
+<span class="n">Driver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">RACKSPACE</span><span class="p">)</span>
+<span class="n">conn</span> <span class="o">=</span> <span class="n">Driver</span><span class="p">(</span><span class="n">RACKSPACE_USER</span><span class="p">,</span> <span class="n">RACKSPACE_KEY</span><span class="p">)</span>
+
+<span class="c"># retrieve available images and sizes</span>
+<span class="n">images</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_images</span><span class="p">()</span>
+<span class="c"># [&lt;NodeImage: id=3, name=Gentoo 2008.0, driver=Rackspace  ...&gt;, ...]</span>
+<span class="n">sizes</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_sizes</span><span class="p">()</span>
+<span class="c"># [&lt;NodeSize: id=1, name=256 server, ram=256 ... driver=Rackspace ...&gt;, ...]</span>
+
+<span class="c"># create node with first image and first size</span>
+<span class="n">node</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">create_node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">&#39;test&#39;</span><span class="p">,</span> <span class="n">image</span><span class="o">=</span><span class="n">images</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">size</span><span class="o">=</span><span class="n">sizes</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+<span class="c"># &lt;Node: uuid=..., name=test, state=3, public_ip=[&#39;1.1.1.1&#39;], provider=Rackspace ...&gt;</span>
+</pre></div>
+
+
+<h2 id="example-list-nodes-across-multiple-providers">Example: List Nodes Across Multiple Providers</h2>
+<p>The following example will list servers across Amazon EC2, Slicehost, and Rackspace Cloud Servers using the same API call. The servers will be represented in a standard Node object.</p>
+<div class="codehilite"><pre><span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
+<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
+
+<span class="n">EC2_ACCESS_ID</span>    <span class="o">=</span> <span class="s">&#39;your access id&#39;</span>
+<span class="n">EC2_SECRET_KEY</span>    <span class="o">=</span> <span class="s">&#39;your secret key&#39;</span>
+<span class="n">RACKSPACE_USER</span>    <span class="o">=</span> <span class="s">&#39;your username&#39;</span>
+<span class="n">RACKSPACE_KEY</span>    <span class="o">=</span> <span class="s">&#39;your key&#39;</span>
+
+<span class="n">EC2Driver</span>     <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">EC2</span><span class="p">)</span>
+<span class="n">RackspaceDriver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">RACKSPACE</span><span class="p">)</span>
+
+<span class="n">drivers</span> <span class="o">=</span> <span class="p">[</span><span class="n">EC2Driver</span><span class="p">(</span><span class="n">EC2_ACCESS_ID</span><span class="p">,</span> <span class="n">EC2_SECRET_KEY</span><span class="p">),</span>
+           <span class="n">RackspaceDriver</span><span class="p">(</span><span class="n">RACKSPACE_USER</span><span class="p">,</span> <span class="n">RACKSPACE_KEY</span><span class="p">)]</span>
+
+<span class="n">nodes</span> <span class="o">=</span> <span class="p">[]</span>
+<span class="k">for</span> <span class="n">driver</span> <span class="ow">in</span> <span class="n">drivers</span><span class="p">:</span>
+    <span class="n">nodes</span> <span class="o">+=</span> <span class="n">driver</span><span class="o">.</span><span class="n">list_nodes</span><span class="p">()</span>
+<span class="k">print</span> <span class="n">nodes</span>
+<span class="c"># [ &lt;Node: provider=Amazon, status=RUNNING, name=bob, ip=1.2.3.4.5&gt;,</span>
+<span class="c">#   &lt;Node: provider=Slicehost, status=REBOOT, name=korine, ip=6.7.8.9&gt;, ... ]</span>
+
+<span class="c"># Reboot all nodes named &#39;test&#39;</span>
+<span class="p">[</span><span class="n">node</span><span class="o">.</span><span class="n">reboot</span><span class="p">()</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">&#39;test&#39;</span><span class="p">]</span>
+</pre></div>
+
+
+<h2 id="example-bootstrapping-puppet-on-a-node">Example: Bootstrapping Puppet on a Node</h2>
+<p>Just creating a node isn't that helpful because each cloud gives you
+back nodes in different states. The deploy_node API lets
+you do more complex actions in cross-cloud portable manner. It works by
+calling create_node, and then SSHing into the node to run a script
+or install an SSH Key.</p>
+<div class="codehilite"><pre><span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
+<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
+<span class="kn">from</span> <span class="nn">libcloud.compute.deployment</span> <span class="kn">import</span> <span class="n">MultiStepDeployment</span><span class="p">,</span> <span class="n">ScriptDeployment</span><span class="p">,</span> <span class="n">SSHKeyDeployment</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="n">RACKSPACE_USER</span> <span class="o">=</span> <span class="s">&#39;your username&#39;</span>
+<span class="n">RACKSPACE_KEY</span> <span class="o">=</span> <span class="s">&#39;your key&#39;</span>
+
+<span class="n">Driver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">RACKSPACE</span><span class="p">)</span>
+<span class="n">conn</span> <span class="o">=</span> <span class="n">Driver</span><span class="p">(</span><span class="n">RACKSPACE_USER</span><span class="p">,</span> <span class="n">RACKSPACE_KEY</span><span class="p">)</span>
+
+<span class="c"># read your public key in</span>
+<span class="c"># Note: This key will be added to the authorized keys for the root user</span>
+<span class="c"># (/root/.ssh/authorized_keys)</span>
+<span class="n">sd</span> <span class="o">=</span> <span class="n">SSHKeyDeployment</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~/.ssh/id_rsa.pub&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
+<span class="c"># a simple script to install puppet post boot, can be much more complicated.</span>
+<span class="n">script</span> <span class="o">=</span> <span class="n">ScriptDeployment</span><span class="p">(</span><span class="s">&quot;apt-get -y install puppet&quot;</span><span class="p">)</span>
+<span class="c"># a task that first installs the ssh key, and then runs the script</span>
+<span class="n">msd</span> <span class="o">=</span> <span class="n">MultiStepDeployment</span><span class="p">([</span><span class="n">sd</span><span class="p">,</span> <span class="n">script</span><span class="p">])</span>
+
+<span class="n">images</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_images</span><span class="p">()</span>
+<span class="n">sizes</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">list_sizes</span><span class="p">()</span>
+
+<span class="c"># deploy_node takes the same base keyword arguments as create_node.</span>
+<span class="n">node</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">deploy_node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">&#39;test&#39;</span><span class="p">,</span> <span class="n">image</span><span class="o">=</span><span class="n">images</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">size</span><span class="o">=</span><span class="n">sizes</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">deploy</span><span class="o">=</span><span class="n">msd</span><span class="p">)</span>
+<span class="c"># &lt;Node: uuid=..., name=test, state=3, public_ip=[&#39;1.1.1.1&#39;], provider=Rackspace ...&gt;</span>
+<span class="c"># the node is now booted, with your ssh key and puppet installed.</span>
+</pre></div>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/gsoc-2012-ideas.html
==============================================================================
--- websites/staging/libcloud/trunk/content/gsoc-2012-ideas.html (added)
+++ websites/staging/libcloud/trunk/content/gsoc-2012-ideas.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Google Summer of Code 2012</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Google Summer of Code 2012</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="google-summer-of-code-2012">Google Summer of Code 2012</h2>
+<p>Google Summer of Code is a program where Google sponsors students from around
+the world to spend their summer working on open-source projects. Student is
+paid 5000$ if they successfully complete all of their evaluations. More
+information about the program can be found on the
+<a href="http://google-melange.appspot.com/gsoc/homepage/google/gsoc2012">project website</a>.</p>
+<h2 id="project-ideas">Project Ideas</h2>
+<p>Some of the existing project ideas proposed by Libcloud developers can be found
+on our <a href="http://s.apache.org/lcgsoc2012tasks">ticket tracker</a>.
+Students are also more than welcome to propose their own ideas.</p>
+<h2 id="mentors">Mentors</h2>
+<ul>
+<li>Tomaz Muraus (tomaz) - UTC -8</li>
+<li>Roman Bogorodsky (rbogorodskiy) - UTC +4</li>
+<li>Jed Smith (jed) - UTC -8</li>
+</ul>
+<h2 id="student-applications">Student Applications</h2>
+<p>Application template can be found in the section bellow. Before submitting
+your application please start a discussion about the project idea on our
+mailing list (dev@libcloud.apache.org).</p>
+<h2 id="student-application-template">Student Application Template</h2>
+<ul>
+<li>Name and surname</li>
+<li>E-mail address</li>
+<li>Blog / homepage (if you have one)</li>
+<li>IRC nick and network</li>
+<li>Google+ handle / Skype handle</li>
+<li>Name of school/  university, country, year, your average grade (and describe what this grade means)</li>
+<li>Age</li>
+<li>Which languages do you actively speak (and write)?</li>
+<li>Project / proposal title</li>
+<li>Project / proposal description</li>
+<li>Project / proposal schedule. How long will the project take? When can you begin work?</li>
+<li>Availability. How many hours per week can you spend working on this? What other obligations do you have this summer?</li>
+<li>Deliverables. It is very important to list quantifiable results here, for example:</li>
+<li>Improve X modules in ways Y and Z.</li>
+<li>Write 3 new documentation pages for the new interfaces.</li>
+<li>Improve test coverage by writing X more unit/regression tests.</li>
+<li>Improve performance in FOO by X%.</li>
+<li>How do you plan to continue with your project / proposal and within the Apache Libcloud community after GSoC?</li>
+<li>Benefits to the Free Software Community, who would gain from your project?</li>
+<li>Biography and Free Software experiences. Who are you? What makes you the best person to work on this project/proposal? What free and/or open source projects have you participated in? Please describe your contributions with references.</li>
+</ul>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>

Added: websites/staging/libcloud/trunk/content/gsoc-2012.html
==============================================================================
--- websites/staging/libcloud/trunk/content/gsoc-2012.html (added)
+++ websites/staging/libcloud/trunk/content/gsoc-2012.html Tue Dec 31 14:19:37 2013
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+  <title>Apache Libcloud Python library - Google Summer of Code 2012</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="/js/clearlink.js" type="text/javascript"></script>
+  <script src="/js/libcloud.js" type="text/javascript"></script>
+  <link rel="stylesheet" href="/css/screen.css" type="text/css">
+  <link rel="stylesheet" href="/css/libcloud.css" type="text/css">
+  <link rel="stylesheet" href="/css/code.css" type="text/css">
+  <link rel="stylesheet" href="/css/jquery.tweet.css" type="text/css">
+  <link rel="icon" type="image/png" href="/images/favicon.png"/>
+  <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-23580482-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+
+</head>
+<body>
+  <div class="container">
+    <div id="header" class="span-24 last">
+      
+      <h1>Apache Libcloud <span>a unified interface to the cloud</span></h1>
+      
+    </div>
+
+    <div id="banner" class="span-24 last">
+      
+      <h2>Google Summer of Code 2012</h2>
+      
+    </div>
+
+    <div id="feature" class="container">
+      
+      
+    </div>
+
+    
+    <div id="sidebar" class="span-8 border">
+      
+<div id="menu">
+    <h2><a href="/">home</a></h2>
+<h2><a href="/news.html">news</a></h2>
+<h2><a href="/about.html">about</a></h2>
+<h2><a href="/getting-started.html">getting started</a></h2>
+<h2><a href="/docs/">documentation</a></h2>
+<h2><a href="/whos-using.html">who's using libcloud?</a></h2>
+<h2><a href="/community-resources.html">community resources</a></h2>
+<h2><a href="/devinfo.html">developer information</a></h2>
+<h2><a href="/gsoc-2012.html">google summer of code</a></h2>
+<h2><a href="/contributing.html">contributing</a></h2>
+<h2><a href="/downloads.html">downloads</a></h2>
+
+</div>
+
+
+
+<h3>Get it</h3>
+<div id="get-it">
+    Latest stable: <a href="/downloads.html">0.13.3</a> (December 31st, 2013)<br />
+	<a href="https://crate.io/packages/apache-libcloud/">apache-libcloud PyPi package</a>
+</div>
+
+<h3>Need help?</h3>
+<div id="help">
+    <a href="http://webchat.freenode.net/?channels=libcloud&uio=d4">#libcloud @ freenode</a><br />
+	<a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a>
+</div>
+
+<h3>Follow us / Get in Touch</h3>
+<div id="help">
+	<a href="https://plus.google.com/100590055818889164025" rel="publisher">Apache Libcloud @ Google+</a><br />
+    <a href="https://twitter.com/libcloud" rel="publisher">libcloud @ Twitter</a><br />
+	<a href="https://www.ohloh.net/p/libcloud/" rel="publisher">libcloud @ Ohloh</a>
+</div>
+
+<h3>What's going on</h3>
+
+<div id="twitter">
+  <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/libcloud" data-widget-id="383960597152284673">Tweets by @libcloud</a>
+  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+</div>
+
+<h3>Links</h3>
+<div id="apache-logo">
+  <a href="http://www.apache.org/"><img src="images/apache_logo.gif" alt="Apache
+      Software Foundation" /></a>
+</div>
+
+
+
+    </div>
+    
+
+    <div id="main" class="span-16 last">
+      
+      <h2 id="google-summer-of-code-2012">Google Summer of Code 2012</h2>
+<p>Google Summer of Code is a program where Google sponsors students from around
+the world to spend their summer working on open-source projects. Student is
+paid 5000$ if they successfully complete all of their evaluations. More
+information about the program can be found on the
+<a href="http://google-melange.appspot.com/gsoc/homepage/google/gsoc2012">project website</a>.</p>
+<h2 id="accepted-projects">Accepted projects</h2>
+<h3 id="libcloud-rest">Libcloud REST</h3>
+<p>HTTP interface for Libcloud (http://libcloud.apache.org/) which exposes all the
+Libcloud functionality through a RESTful API. Currently Libcloud has a big
+limitation - you can only use it with Python. Adding a REST interface would
+allow users to leverage Libcloud functionality through an arbitrary language
+which knows how to talk HTTP.</p>
+<p><strong>Mentor</strong>: Tomaz Muraus <br />
+<strong>Student</strong>: Ilgiz Islamgulov <br />
+<strong>Strategic plan</strong>: <a href="https://docs.google.com/document/d/1P9fIxILn-WdgpkXDPydHB_dghGs-BYuoSmkFwh0Y36w/edit">https://docs.google.com/document/d/1P9fIxILn-WdgpkXDPydHB_dghGs-BYuoSmkFwh0Y36w/edit</a>   </p>
+<p>Project progress can be tracked on <a href="https://github.com/islamgulov/libcloud.rest">Github</a>
+and weekly updates are sent to <a href="/devinfo.html">the mailing list</a>.</p>
+      
+    </div>
+
+    <div id="footer" class="span-24">
+    <a href="http://www.apache.org/licenses/">License</a> | <a
+    href="/security.html">Security</a> | <a
+    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> | <a
+    href="/credits.html">Credits</a> | <a href="/sitemap.html">Sitemap</a><br /><br />
+
+Copyright © 2009-2013, <a href="http://apache.org/">The Apache Software Foundation</a><br />
+Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud
+project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+
+    </div>
+  </div>
+</body>
+</html>