libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From to...@apache.org
Subject svn commit: r1554515 [2/3] - in /libcloud/site/trunk: content/ content/css/ content/docs/ content/images/ content/js/ lib/ templates/ templates/blocks/
Date Tue, 31 Dec 2013 14:19:13 GMT
Added: libcloud/site/trunk/content/docs/storage-base-api.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/docs/storage-base-api.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/docs/storage-base-api.mdtext (added)
+++ libcloud/site/trunk/content/docs/storage-base-api.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,99 @@
+title: Storage -> Base API
+
+## Base API ##
+
+* [list_containers](#containers)
+* [list_container_object](#list_container_object)
+* [get_container](#get_container)
+* [get_object](#get_object)
+* [create_container](#create_container)
+* [upload_object](#upload_object)
+* [upload_object_via_stream](#upload_object_via_stream)
+* [download_object](#download_object)
+* [download_object_as_stream](#download_object_as_stream)
+* [delete_container](#delete_container)
+* [delete_object](#delete_object)
+
+<h3 id="list_containers">list_containers</h3>
+
+**Method signature**:
+[driver.list_containters()](/apidocs/current/libcloud.storage.base.StorageDriver.html#list_containters)  
+**Description**: Return a list of all the containers belonging to your account.
+The returned object is actually an instance of `LazyList` class which implements
+an iterator interface and transparently handles pagination for you.  
+
+
+<h3 id="list_container_object">list_container_object</h3>
+
+[driver.list_container_object()](/apidocs/current/libcloud.storage.base.StorageDriver.html#list_container_object)  
+**Description**: Return a list of all the object inside the container.
+Similar to the list_containers this method also returns a `LazyList` instance.  
+
+<h3 id="get_container">get_container></h3>
+
+[driver.get_container(container_name)](/apidocs/current/libcloud.storage.base.StorageDriver.html#get_container)  
+**Description**: Return a `Container` instance. This method is useful if you
+know the container name and want perform operations on it. Usually it is also
+more efficient then calling `list_containers()` and manually iterating over the
+list to find the container you are interested in.
+
+<h3 id="get_object">get_object</h3>
+
+[driver.get_object(container_name, object_name)](/apidocs/current/libcloud.storage.base.StorageDriver.html#get_object)  
+**Description**: Return an `Object` instance. Similar to the `get_container`
+this method is also useful if you know the name of the object and the container
+holding this object and you want to perform operations on it.
+
+<h3 id="create_container">create_container</h3>
+
+[driver.create_container(container_name)](/apidocs/current/libcloud.storage.base.StorageDriver.html#create_container)  
+**Description**: Create a new container.
+
+<h3 id="upload_object">upload_object</h3>
+
+[driver.upload_object(file_path, container, object_name, extra=None, verify_hash)](/apidocs/current/libcloud.storage.base.StorageDriver.html#upload_object),
+[container.upload_object(file_path, object_name, extra=None, verify_hash)](/apidocs/current/libcloud.storage.base.Container.html#upload_object)  
+**Description**: Upload a file stored on a disk.
+
+<h3 id="upload_object_via_stream">upload_object_via_stream</h3>
+
+[driver.upload_object_via_stream(iterator, container, object_name, extra)](/apidocs/current/libcloud.storage.base.StorageDriver.html#upload_object_via_stream),
+[container.upload_object_via_stream(file_path, object_name, extra=None, verify_hash)](/apidocs/current/libcloud.storage.base.Container.html#upload_object_via_stream)  
+**Description**: Upload an object using an iterator. If a provider supports
+chunked transfer encoding this method doesn't require you to know the object
+size in advance. This allows you to directly stream data to the provider without
+buffering it on disk.
+
+Good example of this are backups - you can directly stream tar output to the
+provider without buffering or temporary storing data on the disk.
+
+**Note: If the provider doesn't support chunked transfer encoding this function
+will first exhaust your iterator to determine the file size and then send it to
+the provider. Exhausting the iterator means that the whole iterator content
+must be buffered in the memory which might lead to the resource exhaustion.**
+
+<h3 id="download_object">download_object</h3>
+
+[driver.download_object(obj, destination_path, overwrite_existing, delete_on_failure)](/apidocs/current/libcloud.storage.base.StorageDriver.html#download_object),
+[container.download_object(obj, destination_path, overwrite_existing, delete_on_failure)](/apidocs/current/libcloud.storage.base.Container.html#download_object),
+[object.download(destination_path, overwrite_existing, delete_on_failure)](/apidocs/current/libcloud.storage.base.Object.html#download_object)  
+**Description**: Download an object and save it to a file on disk.
+
+<h3 id="download_object_as_stream">download_object_as_stream</h3>
+[driver.download_object_as_stream(obj, chunk_size)](/apidocs/current/libcloud.storage.base.StorageDriver.html#download_object_as_stream),
+[container.download_object_as_stream(obj, chunk_size)](/apidocs/current/libcloud.storage.base.Container.html#download_object_as_stream),
+[object.as_stream(chunk_size)](/apidocs/current/libcloud.storage.base.Object.html#as_stream)  
+**Description**: Return a generator which yields object data. This method is
+useful if you don't want to directly save object on disk and want to perform
+some other operations with it.
+
+<h3 id="delete_container">delete_container</h3>
+[driver.delete_container(container)](/apidocs/current/libcloud.storage.base.StorageDriver.html#delete_container),
+[container.delete()](/apidocs/current/libcloud.storage.base.Container.html#delete)  
+**Description**: Delete a container.
+
+<h3 id="delete_object">delete_object</h3>
+[driver.delete_object(obj)](/apidocs/current/libcloud.storage.base.StorageDriver.html#delete_object),
+[container.delete_object(obj)](/apidocs/current/libcloud.storage.base.Container.html#delete_object),
+[object.delete()](/apidocs/current/libcloud.storage.base.Object.html#delete)  
+**Description**: Delete an object.

Added: libcloud/site/trunk/content/docs/storage-examples.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/docs/storage-examples.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/docs/storage-examples.mdtext (added)
+++ libcloud/site/trunk/content/docs/storage-examples.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,118 @@
+title: Storage -> Examples
+
+## Examples
+
+* [Create a backup of a directory and directly stream it to CloudFiles](#example-1-streaming-upload)
+* [Efficiently download multiple files using gevent](#efficiently-download-multiple-files-using-gevent)
+* [Publishing a static website using CloudFiles driver](#publishing-a-static-website-using-cloudfiles-driver)
+
+<h3 id="example-1-streaming-upload">Create a backup of a directory and directly stream it to CloudFiles</h3>
+
+    ::python
+    import subprocess
+    from datetime import datetime
+
+    from libcloud.storage.types import Provider, ContainerDoesNotExistError
+    from libcloud.storage.providers import get_driver
+
+    driver = get_driver(Provider.CLOUDFILES_US)('username', 'api key')
+
+    directory = '/home/some/path'
+    cmd = 'tar cvzpf - %s' % (directory)
+
+    object_name = 'backup-%s.tar.gz' % (datetime.now().strftime('%Y-%m-%d'))
+    container_name = 'backups'
+
+    # Create a container if it doesn't already exist
+    try:
+        container = driver.get_container(container_name=container_name)
+    except ContainerDoesNotExistError:
+        container = driver.create_container(container_name=container_name)
+
+    pipe = subprocess.Popen(cmd, bufsize=0, shell=True, stdout=subprocess.PIPE)
+    return_code = pipe.poll()
+
+    print 'Uploading object...'
+
+    while return_code is None:
+        # Compress data in our directory and stream it directly to CF
+        obj = container.upload_object_via_stream(iterator=pipe.stdout,
+                                                object_name=object_name)
+        return_code = pipe.poll()
+
+    print 'Upload complete, transferred: %s KB' % ((obj.size / 1024))
+
+<h3 id="efficiently-download-multiple-files-using-gevent">Efficiently download multiple files using gevent</h3>
+
+    ::python
+    import os.path
+
+    from gevent import monkey
+    from gevent.pool import Pool
+    monkey.patch_all()
+
+    from libcloud.storage.providers import get_driver
+    from libcloud.storage.types import Provider
+
+    USERNAME = 'username'
+    API_KEY = 'api key'
+
+    cls = get_driver(Provider.CLOUDFILES_US)
+    driver = cls(USERNAME, API_KEY)
+
+    def download_obj(container, obj):
+        driver = cls(USERNAME, API_KEY)
+        obj = driver.get_object(container_name=container.name,
+                                object_name=obj.name)
+        filename = os.path.basename(obj.name)
+        path = os.path.join(os.path.expanduser('~/Downloads'), filename)
+        print 'Downloading: %s to %s' % (obj.name, path)
+        obj.download(destination_path=path)
+
+    containers = driver.list_containers()
+
+    jobs = []
+    pool = Pool(20)
+
+    for index, container in enumerate(containers):
+        objects = container.list_objects()
+
+        for obj in objects:
+            pool.spawn(download_obj, container, obj)
+
+    pool.join()
+    print 'Done'
+
+<h3 id="publishing-a-static-website-using-cloudfiles-driver">Publishing a static website using CloudFiles driver</h3>
+
+Note this feature is available since Libcloud `0.11.0`.
+
+    ::python
+    from StringIO import StringIO
+
+    from libcloud.storage.types import Provider
+    from libcloud.storage.providers import get_driver
+
+    CloudFiles = get_driver(Provider.CLOUDFILES_US)
+
+    driver = CloudFiles('username', 'api key')
+
+    container = driver.create_container(container_name='my_website')
+
+    iterator1 = StringIO('<p>Hello World from Libcloud!</p>')
+    iterator2 = StringIO('<p>Oh, noez, 404!!</p>')
+    iterator3 = StringIO('<p>Oh, noez, 401!!</p>')
+
+    driver.upload_object_via_stream(iterator=iterator1, container=container,
+                                    object_name='index.html')
+    driver.upload_object_via_stream(iterator=iterator2, container=container,
+                                    object_name='404error.html')
+    driver.upload_object_via_stream(iterator=iterator3, container=container,
+                                    object_name='401error.html')
+
+    driver.ex_enable_static_website(container=container)
+    driver.ex_set_error_page(container=container, file_name='error.html')
+    driver.enable_container_cdn(container=container)
+
+    print('All done you can view the website at: ' + \
+          driver.get_container_cdn_url(container=container))

Added: libcloud/site/trunk/content/docs/storage-overview.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/docs/storage-overview.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/docs/storage-overview.mdtext (added)
+++ libcloud/site/trunk/content/docs/storage-overview.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,14 @@
+title: Storage -> Overview
+
+## Overview ##
+
+Storage API allows you to manage cloud storage and services such as Amazon S3,
+Rackspace CloudFiles, Google Storage and [others](/supported_providers.html).
+
+### Terminology ###
+
+* **Object** - represents an object or so called BLOB.
+* **Container** - represents a container which can contain multiple objects. You
+can think of it as a folder on a file system. Difference between container and a
+folder on file system is that containers cannot be nested. Some APIs also call
+it a **Bucket**.

Added: libcloud/site/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.mdtext (added)
+++ libcloud/site/trunk/content/docs/using-libcloud-in-multi-threaded-and-async-environments.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,76 @@
+title: Using Libcloud in multi-threaded and async environments
+
+## Using Libcloud in multi-threaded and async environments ##
+
+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.
+
+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).
+
+Problems like this are usually solved using threads or async libraries such as
+Twisted, Tornado or gevent.
+
+This page contains some information and tips about how to use Libcloud in
+such environments.
+
+### Libcloud and thread-safety ###
+
+Important thing to keep in mind when dealing with threads is
+thread-safety. Libcloud driver instance is **not** 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.
+
+### Using Libcloud with gevent ###
+
+gevent has an ability to monkey patch and replace functions in the Python `socket`
+`urllib2`, `httplib` and `time` module with its own functions which don't block.
+
+You need to do two things when you want to use Libcloud with gevent:
+
+1. Enable monkey patching
+
+    ::python
+    from gevent import monkey
+    monkey.patch_all()
+
+2. Create a separate driver instance for each Greenlet. This is necessary
+because a driver instance reuses the same `Connection` class.
+
+For example see [Efficiently download multiple files using gevent](/docs/storage-examples.html#efficiently-download-multiple-files-using-gevent).
+
+### Using Libcloud with Twisted ###
+
+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.
+
+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.
+
+A simple solution to prevent blocking the reactor is to run Libcloud calls
+inside a thread. In Twisted this can be achieved using `threads.deferToThread`
+which runs a provided method inside the Twisted thread pool.
+
+The example bellow demonstrates how to create a new node inside a thread
+without blocking the whole reactor.
+
+    ::python
+    from twisted.internet import defer, threads, reactor
+
+    from libcloud.compute.types import Provider
+    from libcloud.compute.providers import get_driver
+
+    @defer.inlineCallbacks
+    def create_node():
+        node = yield threads.deferToThread(_thread_create_node,
+                                           name=name)
+    def _thread_create_node(name):
+        Driver = get_driver(Provider.RACKSPACE)
+        conn = Driver('username', 'api key')
+        image = conn.list_images()[0]
+        size = conn.list_sizes()[0]
+        node = conn.create_node(name=name, image=image, size=size)
+        return node

Added: libcloud/site/trunk/content/docs/writing-tests-and-using-the-fixture-framework.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/docs/writing-tests-and-using-the-fixture-framework.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/docs/writing-tests-and-using-the-fixture-framework.mdtext (added)
+++ libcloud/site/trunk/content/docs/writing-tests-and-using-the-fixture-framework.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,95 @@
+title: Writing tests and using the fixture framework
+
+## Writing tests and using the fixture framework ##
+
+This section describes how to write tests for the provider drivers and how to use
+our fixture framework and system for mocking the responses.
+
+Examples in this section refer to the compute API but things described in this
+section are also applicable to other APIs.
+
+* [Creating Fixtures](#creating-fixtures)
+* [Mocking responses and using MockHttp class](#mocking-responses-and-using-mockhttp-class)
+* [MockHttp class example](#mock-http-class-example)
+
+<h3 id="creating-fixtures">Creating Fixtures</h3>
+
+In our test cases fixtures store different responses returned by the provider APIs.
+They are stored and named in the following format:
+`test/<api name>/fixtures/<provider name>/<fixture name>`.
+
+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.
+
+*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.*
+
+<h3 id="mocking-responses-and-using-mockhttp-class">Mocking responses and using MockHttp class</h3>
+
+Each provider test file usually contains a class which inherits from the base `MockHttp` class.
+This class is responsible for loading fixtures and returning a mocked response for
+each API call.
+
+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 (`_`).
+
+Some examples:
+
+**Requested path**: `/servers/list.all`  
+**use_params**: `MockHttp.use_params = None`  
+**Name of the method on the Mock class**: `_servers_list_all`
+
+**Requested path**: `/servers/reboot-all`  
+**use_params**: `MockHttp.use_params = None`  
+**Name of the method on the Mock class**: `_servers_reboot_all`
+
+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 `use_param` 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
+(`test/compute/test_ec2.py`).
+
+Example:
+
+**Requested path**: `/?Action=RebootInstances&InstanceId=12345`  
+**use_params**: `MockHttp.use_params = 'Action'`  
+**Name of the method on the Mock class**: `_RebootInstances`
+
+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.
+
+This problem can be overcome by setting the `type` attribute on the `MockHttp` class before
+issuing a request. The specified `type` will be automatically appended to the end of the
+constructed method name.
+
+Example:
+
+**Requested path**: `/servers/reboot-all`  
+**use_params**: `MockHttp.use_params = None`  
+**type**: `MockHttp.type = 'FAILURE'`  
+**Name of the method on the Mock class**: `_servers_reboot_all_FAILURE`
+
+<h3 id="mock-http-class-example">MockHttp class example</h3>
+
+Bellow is an example of a MockHttp class from the Amazon EC2 tests with a
+single method.
+
+Return value of a mock method is a tuple - 
+**(status_code, response_body, response_headers, response_status_string)**.
+
+* **response_code** (intger) - response status code (httplib.OK, httplib.NOT_FOUND, ...)
+* **response_body** (string) - actual mocked response body which is usually read from a fixture
+* **response_headers** (dictionary) - response headers
+* **response_status_string** (string) - string representation of the response status code (httplib.responses[httplib.OK], httplib.responses[httplib.CONTINUE], ...)
+
+    ::python
+    class EC2MockHttp(MockHttp):
+
+        fixtures = ComputeFileFixtures('ec2')
+
+        def _DescribeInstances(self, method, url, body, headers):
+            body = self.fixtures.load('describe_instances.xml')
+            return (httplib.OK, body, {'Content-Type': 'application/xml'}, httplib.responses[httplib.OK])

Added: libcloud/site/trunk/content/docstring-conventions.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/docstring-conventions.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/docstring-conventions.mdtext (added)
+++ libcloud/site/trunk/content/docstring-conventions.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,66 @@
+title: Docstring Convetions
+
+## Docstring Convetions ##
+
+Libcloud follow [epytext](http://epydoc.sourceforge.net/epytextintro.html) docstring formatiing.
+
+  - Docstrings should always be used to describe the purpose of methods, functions, classes, and modules.
+  - Method docstring describes  all vargs and keywords (varargs and keywords are the names of the * and ** arguments).
+  - 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.
+  - All parametrs must have `@param` or `@keyword` field and `@type` field.
+ - `@param p: ... `  A description of the parameter p for a function or method.
+ - `@keyword p: ... ` A description of the keyword parameter p.
+ - `@type p: ... ` The expected type for the parameter. p.
+  - Return must contain @return and @rtype.
+ - `@return: ... ` A description of return value for a function or method.
+ - `@rtype: ... ` The type of the return value for a function or method.
+  - Required parameters contain `(required)` notation in description.
+For example: `@keyword    image:  OS Image to boot on node. (required)`
+  -  Multiple types separated with "or"
+For example: `@type       auth:   L{NodeAuthSSHKey} or L{NodeAuthPassword}`
+  - `C{type}` for Built-in types and `L{type}` for Libcloud types.
+ - `@type ssh_username: C{str}`
+ - `@type node: L{Node}`
+  - For a description of constainer types used notation: `<container_type> of <objects_type>`
+For example: `@rtype: C{list} of L{Node}`
+  - Sometimes you need to inhterit all arguments and add new keyword arguments, for this used `@inherits` field: `@inherits: L{class_name.method_name}`
+This field should be added before the arguments. If inherited docstring doesn't contain description\rtype, they used from the parent docstring.
+
+For example:
+
+    ::python
+    class NodeDriver(BaseDriver):
+            def create_node(self, **kwargs):
+                """
+                Create a new node instance.
+
+                @keyword    name:   String with a name for this new node (required)
+                @type       name:   C{str}
+
+                @return: The newly created node.
+                @rtype: L{Node}
+                """
+                pass
+
+            def deploy_node(self, **kwargs):
+                """
+                Create a new node, and start deployment.
+
+                @inherits: L{NodeDriver.create_node}
+
+                @keyword    deploy: Deployment to run once machine is online and
+                                    availble to SSH.
+                @type       deploy: L{Deployment}
+                """
+                pass
+
+
+    class OpenStackNodeDriver(NodeDriver):
+            def create_node(self, **kwargs):
+                """
+                @inherits: L{NodeDriver.create_node}
+
+                @keyword    ex_metadata: Key/Value metadata to associate with a node
+                @type       ex_metadata: C{dict}
+                """
+                pass
\ No newline at end of file

Added: libcloud/site/trunk/content/downloads.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/downloads.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/downloads.mdtext (added)
+++ libcloud/site/trunk/content/downloads.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,90 @@
+title: Downloads
+
+## Downloads
+
+### Latest stable release
+
+<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>For upgrade notes please see [Upgrade notes](https://libcloud.readthedocs.org/en/latest/upgrade_notes.html).
+  Old releases can be found in the archive at
+  [http://archive.apache.org/dist/libcloud/](http://archive.apache.org/dist/libcloud/).</p>
+
+### Latest beta release
+
+<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>For upgrade notes please see [Upgrade notes](https://libcloud.readthedocs.org/en/latest/upgrade_notes.html).
+  Old releases can be found in the archive at
+  [http://archive.apache.org/dist/libcloud/](http://archive.apache.org/dist/libcloud/).</p>
+
+## Distribution specific packages
+
+* FreeBSD (ports) - `ports/net/py-libcloud`
+* Ubuntu, Debian (apt) - `python-libcloud`
+* Fedora (yum) - `python-libcloud`
+
+Note: Distribution packages are usually out of date so you are recommended to install the library using pip.
+
+<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>

Added: libcloud/site/trunk/content/driver-features.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/driver-features.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/driver-features.mdtext (added)
+++ libcloud/site/trunk/content/driver-features.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,37 @@
+title: Driver features
+
+## Driver features ##
+
+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.
+
+## <a name="compute">Compute</a> ##
+
+Compute part of the library allows users to manage virtual servers and services such as Amazon EC2 and Rackspace CloudServers.
+
+### <a name="list">list</a> ###
+
+Returns a list of the currently active nodes.
+
+### <a name="reboot">reboot</a> ###
+
+Allows user to reboot (restart) a node.
+
+### <a name="create">create</a> ###
+
+Allows user to create a new node.
+
+### <a name="destroy">destroy</a> ###
+
+Allows user to destroy an existing node.
+
+### <a name="images">images</a> ###
+
+Returns a list of available node images. An image usually represents an operating system which is installed on the server.
+
+### <a name="sizes">sizes</a> ###
+
+Returns a list of available node sizes. A size represents server configuration (CPU speed, number of cores, amount of RAM, disk size, etc.)
+
+### <a name="deploy">deploy</a> ###
+
+Allows user to run arbitrary shell script on the node after it has been provisioned.

Added: libcloud/site/trunk/content/europython-libcloud-sprint.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/europython-libcloud-sprint.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/europython-libcloud-sprint.mdtext (added)
+++ libcloud/site/trunk/content/europython-libcloud-sprint.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,28 @@
+title: Apache Libcloud development sprint at EuroPython 2011 in Florence, Italy
+
+## Apache Libcloud development sprint at EuroPython 2011 in Florence, Italy ##
+
+Tomaz Muraus, one of the Libcloud developers will be present at [EuroPython](http://ep2011.europython.eu/)
+in Florence Italy from **20-26 of June** where he will held a Libcloud development sprint.
+
+This is a great opportunity for anyone who would like to participate or learn more about Libcloud to join
+him.
+
+<a href="http://ep2011.europython.eu/"><img src="/images/europython-logo.png" style="display: block; margin: 0 auto;" /></a>
+
+Sprint topics include, but are not limited to:
+
+* Working on the new Storage drivers
+* Working on the new Load-balancer drivers
+* Working on DNS support which is planned for Libcloud 0.6.0
+* Exploring existing monitoring services and their APIs (Amazon CloudWatch, Cloudkick, ServerDensity, Librato Silverling, New Relic, ...)
+* Improving the documentation
+* Working on tutorials and examples for the new Storage and Load-balancer
+  APIs
+* Improving and extending the OpenStack drivers
+* Making it work with Python 3
+
+If you plan to join us, please post on [our mailing list](devinfo.html) so we know how many people to
+expect.
+
+Thanks and hopefully see you in Florence!

Added: libcloud/site/trunk/content/getting-started.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/getting-started.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/getting-started.mdtext (added)
+++ libcloud/site/trunk/content/getting-started.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,122 @@
+title: Getting started
+
+## Installation ##
+
+Libcloud is [available on PyPi](http://pypi.python.org/pypi/apache-libcloud) and can be installed using pip:
+
+    ::bash
+    pip install apache-libcloud
+
+## Upgrading ##
+
+If you used pip to install the library you can also use it to upgrade it:
+
+    ::bash
+    pip install --upgrade apache-libcloud
+
+## Documentation ##
+
+Available at [https://libcloud.readthedocs.org/en/latest/](https://libcloud.readthedocs.org/en/latest/).
+
+## Example: Connecting with a Driver ##
+
+    ::python
+    from libcloud.compute.types import Provider
+    from libcloud.compute.providers import get_driver
+
+    EC2_ACCESS_ID = 'your access id'
+    EC2_SECRET_KEY = 'your secret key'
+
+    Driver = get_driver(Provider.EC2)
+    conn = Driver(EC2_ACCESS_ID, EC2_SECRET_KEY)
+
+    nodes = conn.list_nodes()
+    # [<Node: uuid=..., state=3, public_ip=['1.1.1.1'], provider=EC2 ...>, ...]
+
+## Example: Creating a Node ##
+
+    ::python
+    from libcloud.compute.types import Provider
+    from libcloud.compute.providers import get_driver
+
+    RACKSPACE_USER = 'your username'
+    RACKSPACE_KEY = 'your key'
+
+    Driver = get_driver(Provider.RACKSPACE)
+    conn = Driver(RACKSPACE_USER, RACKSPACE_KEY)
+
+    # retrieve available images and sizes
+    images = conn.list_images()
+    # [<NodeImage: id=3, name=Gentoo 2008.0, driver=Rackspace  ...>, ...]
+    sizes = conn.list_sizes()
+    # [<NodeSize: id=1, name=256 server, ram=256 ... driver=Rackspace ...>, ...]
+
+    # create node with first image and first size
+    node = conn.create_node(name='test', image=images[0], size=sizes[0])
+    # <Node: uuid=..., name=test, state=3, public_ip=['1.1.1.1'], provider=Rackspace ...>
+
+## Example: List Nodes Across Multiple Providers ##
+
+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.
+
+    ::python
+    from libcloud.compute.types import Provider
+    from libcloud.compute.providers import get_driver
+
+    EC2_ACCESS_ID    = 'your access id'
+    EC2_SECRET_KEY    = 'your secret key'
+    RACKSPACE_USER    = 'your username'
+    RACKSPACE_KEY    = 'your key'
+
+    EC2Driver     = get_driver(Provider.EC2)
+    RackspaceDriver = get_driver(Provider.RACKSPACE)
+
+    drivers = [EC2Driver(EC2_ACCESS_ID, EC2_SECRET_KEY),
+               RackspaceDriver(RACKSPACE_USER, RACKSPACE_KEY)]
+
+    nodes = []
+    for driver in drivers:
+        nodes += driver.list_nodes()
+    print nodes
+    # [ <Node: provider=Amazon, status=RUNNING, name=bob, ip=1.2.3.4.5>,
+    #   <Node: provider=Slicehost, status=REBOOT, name=korine, ip=6.7.8.9>, ... ]
+
+    # Reboot all nodes named 'test'
+    [node.reboot() for node in nodes if node.name == 'test']
+
+## Example: Bootstrapping Puppet on a Node ##
+
+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.
+
+    ::python
+    from libcloud.compute.types import Provider
+    from libcloud.compute.providers import get_driver
+    from libcloud.compute.deployment import MultiStepDeployment, ScriptDeployment, SSHKeyDeployment
+    import os
+
+    RACKSPACE_USER = 'your username'
+    RACKSPACE_KEY = 'your key'
+
+    Driver = get_driver(Provider.RACKSPACE)
+    conn = Driver(RACKSPACE_USER, RACKSPACE_KEY)
+
+    # read your public key in
+    # Note: This key will be added to the authorized keys for the root user
+    # (/root/.ssh/authorized_keys)
+    sd = SSHKeyDeployment(open(os.path.expanduser("~/.ssh/id_rsa.pub")).read())
+    # a simple script to install puppet post boot, can be much more complicated.
+    script = ScriptDeployment("apt-get -y install puppet")
+    # a task that first installs the ssh key, and then runs the script
+    msd = MultiStepDeployment([sd, script])
+
+    images = conn.list_images()
+    sizes = conn.list_sizes()
+
+    # deploy_node takes the same base keyword arguments as create_node.
+    node = conn.deploy_node(name='test', image=images[0], size=sizes[0], deploy=msd)
+    # <Node: uuid=..., name=test, state=3, public_ip=['1.1.1.1'], provider=Rackspace ...>
+    # the node is now booted, with your ssh key and puppet installed.

Added: libcloud/site/trunk/content/gsoc-2012-ideas.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/gsoc-2012-ideas.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/gsoc-2012-ideas.mdtext (added)
+++ libcloud/site/trunk/content/gsoc-2012-ideas.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,50 @@
+title: Google Summer of Code 2012
+
+## Google Summer of Code 2012 ##
+
+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
+[project website](http://google-melange.appspot.com/gsoc/homepage/google/gsoc2012).
+
+## Project Ideas ##
+
+Some of the existing project ideas proposed by Libcloud developers can be found
+on our [ticket tracker](http://s.apache.org/lcgsoc2012tasks).
+Students are also more than welcome to propose their own ideas.
+
+## Mentors ##
+
+* Tomaz Muraus (tomaz) - UTC -8
+* Roman Bogorodsky (rbogorodskiy) - UTC +4
+* Jed Smith (jed) - UTC -8
+
+## Student Applications ##
+
+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).
+
+## Student Application Template ##
+
+* Name and surname
+* E-mail address
+* Blog / homepage (if you have one)
+* IRC nick and network
+* Google+ handle / Skype handle
+* Name of school/  university, country, year, your average grade (and describe what this grade means)
+* Age
+* Which languages do you actively speak (and write)?
+* Project / proposal title
+* Project / proposal description
+* Project / proposal schedule. How long will the project take? When can you begin work?
+* Availability. How many hours per week can you spend working on this? What other obligations do you have this summer?
+* Deliverables. It is very important to list quantifiable results here, for example:
+  * Improve X modules in ways Y and Z.
+  * Write 3 new documentation pages for the new interfaces.
+  * Improve test coverage by writing X more unit/regression tests.
+  * Improve performance in FOO by X%.
+* How do you plan to continue with your project / proposal and within the Apache Libcloud community after GSoC?
+* Benefits to the Free Software Community, who would gain from your project?
+* 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.
\ No newline at end of file

Added: libcloud/site/trunk/content/gsoc-2012.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/gsoc-2012.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/gsoc-2012.mdtext (added)
+++ libcloud/site/trunk/content/gsoc-2012.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,26 @@
+title: Google Summer of Code 2012
+
+## Google Summer of Code 2012 ##
+
+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
+[project website](http://google-melange.appspot.com/gsoc/homepage/google/gsoc2012).
+
+## Accepted projects ##
+
+### Libcloud REST ###
+
+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.
+
+**Mentor**: Tomaz Muraus   
+**Student**: Ilgiz Islamgulov   
+**Strategic plan**: [https://docs.google.com/document/d/1P9fIxILn-WdgpkXDPydHB_dghGs-BYuoSmkFwh0Y36w/edit](https://docs.google.com/document/d/1P9fIxILn-WdgpkXDPydHB_dghGs-BYuoSmkFwh0Y36w/edit)   
+
+Project progress can be tracked on [Github](https://github.com/islamgulov/libcloud.rest)
+and weekly updates are sent to [the mailing list](/devinfo.html).

Added: libcloud/site/trunk/content/gsoc.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/gsoc.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/gsoc.mdtext (added)
+++ libcloud/site/trunk/content/gsoc.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,50 @@
+title: Google Summer of Code 2012
+
+## Google Summer of Code 2012 ##
+
+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
+[project website](http://google-melange.appspot.com/gsoc/homepage/google/gsoc2012).
+
+## Project Ideas ##
+
+Some of the existing project ideas proposed by Libcloud developers can be found
+on our [ticket tracker](http://s.apache.org/lcgsoc2012tasks).
+Students are also more than welcome to propose their own ideas.
+
+## Mentors ##
+
+* Tomaz Muraus (tomaz) - UTC -8
+* Roman Bogorodsky (rbogorodskiy) - UTC +4
+* Jed Smith (jed) - UTC -8
+
+## Student Applications ##
+
+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).
+
+## Student Application Template ##
+
+* Name and surname
+* E-mail address
+* Blog / homepage (if you have one)
+* IRC nick and network
+* Google+ handle / Skype handle
+* Name of school/  university, country, year, your average grade (and describe what this grade means)
+* Age
+* Which languages do you actively speak (and write)?
+* Project / proposal title
+* Project / proposal description
+* Project / proposal schedule. How long will the project take? When can you begin work?
+* Availability. How many hours per week can you spend working on this? What other obligations do you have this summer?
+* Deliverables. It is very important to list quantifiable results here, for example:
+  * Improve X modules in ways Y and Z.
+  * Write 3 new documentation pages for the new interfaces.
+  * Improve test coverage by writing X more unit/regression tests.
+  * Improve performance in FOO by X%.
+* How do you plan to continue with your project / proposal and within the Apache Libcloud community after GSoC?
+* Benefits to the Free Software Community, who would gain from your project?
+* 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.
\ No newline at end of file

Added: libcloud/site/trunk/content/images/apache_feather.gif
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/apache_feather.gif?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/apache_feather.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/apache_incubator.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/apache_incubator.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/apache_incubator.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/apache_logo.gif
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/apache_logo.gif?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/apache_logo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/apacheconna2013.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/apacheconna2013.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/apacheconna2013.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/europython-logo.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/europython-logo.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/europython-logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/europython-logo_small.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/europython-logo_small.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/europython-logo_small.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/favicon.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/favicon.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/favicon.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/libcloud_logo.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/libcloud_logo.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/libcloud_logo.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: libcloud/site/trunk/content/images/libcloud_logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/images/providers.png
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/images/providers.png?rev=1554515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: libcloud/site/trunk/content/images/providers.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: libcloud/site/trunk/content/index.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/index.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/index.mdtext (added)
+++ libcloud/site/trunk/content/index.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,18 @@
+title: Apache Libcloud is a standard Python library that abstracts away differences among multiple cloud provider APIs
+
+## Apache Libcloud ##
+
+Apache Libcloud is a standard Python library that abstracts away differences among multiple cloud provider APIs. 
+
+The current version allows users to manage four different cloud resources:
+
+* Cloud Servers - services such as Amazon EC2 and Rackspace CloudServers (**libcloud.compute.\***)
+* Cloud Storage - services such as Amazon S3 and Rackspace CloudFiles (**libcloud.storage.\***)
+* Load Balancers as a Service, LBaaS (**libcloud.loadbalancer.\***)
+* DNS as a Service, DNSaaS (**libcloud.dns.\***)
+
+<a href="supported_providers.html"><img src="images/providers.png" style="display: block; margin: 0 auto;"/></a>
+
+Compute part of the library is the oldest one and it currently supports more than **26** different providers.
+
+For a full list of the supported providers functionality, please see the [Supported Providers](supported_providers.html) page.

Added: libcloud/site/trunk/content/js/clearlink.js
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/js/clearlink.js?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/js/clearlink.js (added)
+++ libcloud/site/trunk/content/js/clearlink.js Tue Dec 31 14:19:12 2013
@@ -0,0 +1,31 @@
+/*
+CLCP v2.1 Clear Links to Current Page
+Jonathan Snook
+This code is offered unto the public domain
+http://www.snook.ca/jonathan/
+*/
+
+window.onload = clearCurrentLink;
+
+function clearCurrentLink(){
+
+    var nav = document.getElementById("menu");
+    var a = nav.getElementsByTagName("a");
+    for(var i=0;i<a.length;i++) {
+        if(a[i].href == window.location.href.split("#")[0]) {
+            removeNode(a[i]);
+        }
+    }
+}
+
+function removeNode(n){
+    if(n.hasChildNodes())
+    // gets the text from the link and moves it to the previous node.
+        for(var i=0;i<n.childNodes.length;i++) {
+            var strong = document.createElement('strong');
+            var label = n.childNodes[i].cloneNode(true);
+            label.style = "text-decoration: none !important;";
+            n.parentNode.appendChild(label);
+        }
+    n.parentNode.removeChild(n);
+}

Added: libcloud/site/trunk/content/js/libcloud.js
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/js/libcloud.js?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/js/libcloud.js (added)
+++ libcloud/site/trunk/content/js/libcloud.js Tue Dec 31 14:19:12 2013
@@ -0,0 +1,9 @@
+$(document).ready(function(){
+
+  //SUPPORT TABLE
+  $('.support-table td:contains("y")')
+    .addClass('supported').text('yes');
+  $('.support-table td:contains(" ")').add('.support-table td:empty')
+    .addClass('unsupported').text('no');
+
+});

Propchange: libcloud/site/trunk/content/js/libcloud.js
------------------------------------------------------------------------------
    svn:executable = *

Added: libcloud/site/trunk/content/news.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/news.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/news.mdtext (added)
+++ libcloud/site/trunk/content/news.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,59 @@
+title: News
+
+## News
+
+### 2013
+
+* 2013-11-21 - [Libcloud 0.14.0-beta is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201311.mbox/%3CCAJMHEm%2B51RFT672GanfW9DKopcmDtZz2kkA7m0uufP1UupjeZw@mail.gmail.com%3E))
+* 2013-09-05 - [Libcloud 0.13.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201309.mbox/%3CCAJMHEmL4-Xuysx13z1EDwq-1K95eDyANqgY2tYGUT-MB5Sz4bQ%40mail.gmail.com%3E))
+* 2013-08-04 - New committer and PMC member John Carr joins our team ([announcement](https://mail-archives.apache.org/mod_mbox/libcloud-dev/201308.mbox/%3CCAJMHEm%2Bh7Fbqc8vWBw0PJbkzUKaDHWVziezOgECa2n7qESvLeA%40mail.gmail.com%3E))
+* 2013-07-01 - [Libcloud 0.13.0 is released](/downloads.html) ([release announcement](https://mail-archives.apache.org/mod_mbox/libcloud-dev/201307.mbox/%3CCAJMHEmJBU_aMREM0f0LD-nHZt6pWTt9WabfdxDPtDSy%2B1w7K8g%40mail.gmail.com%3E))
+* 2013-21-03 - [Libcloud 0.12.3 is released](/downloads.html) ([release announcement](https://mail-archives.apache.org/mod_mbox/libcloud-dev/201303.mbox/%3CCAJMHEmJDKsYOn%3DaVDyChdQCgHbKc1r2n0Wy4_UxGmdd-aXf-WQ%40mail.gmail.com%3E))
+* 2013-02-18 - [Libcloud 0.12.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201302.mbox/%3CCAJMHEmLc0RfSxM9UhXPeTwKiNDbZPsQs6SJMA1o3y1D4Cv+reA@mail.gmail.com%3E))
+
+### 2012
+
+* 2012-12-28 - [New committer Mahendra Maheshwara joins the team](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201212.mbox/%3CCAJMHEmLyVg66Kb1Q9LRD1z9bSbtVFU=hTZGeWO2pc+s4qcEpow@mail.gmail.com%3E)
+* 2012-12-26 - [2012 in retrospect and a Happy New Year from the Libcloud team](http://mail-archives.apache.org/mod_mbox/libcloud-users/201212.mbox/%3CCAJMHEmK-Y47qbqpSQjNfWxK-1efqiifvpRgE-tO8q-QLTk-EYg@mail.gmail.com%3E) 
+* 2012-11-19 - [Libcloud 0.11.4 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201211.mbox/%3CCAJMHEmL73OCjiNqg0QGPWb1Cc2JnQ4OWjXs5ah-sU%2BA%3DOwPUTg%40mail.gmail.com%3E))
+* 2012-11-16 - [New committer Ilgiz Islamgulov (ilgiz) joins the team](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201211.mbox/%3CCAJMHEmJmRDdQbfRSxOBTueSJ8u4-VgU8YaeP5LcJ2gwubfNF2g%40mail.gmail.com%3E)
+* 2012-09-25 - [Libcloud 0.11.3 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/www-announce/201209.mbox/%3CCAJMHEmLn+MV_pcNZv03PW5wuS5c=O8cFdqMH8LFtaUr1gggkdw@mail.gmail.com%3E))
+* 2012-08-30 - [Libcloud REST GSoC project has been successfully completed](http://google-opensource.blogspot.com/2012/08/8th-year-of-google-summer-of-code-draws.html) ([blog post about student's experience](http://islamgulov.blogspot.com/2012/08/gsoc-experience.html))
+* 2012-08-02 - [Libcloud 0.11.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/www-announce/201208.mbox/%3CCAJMHEmL958gN+GZT0tWDM9jVmMBj+w0qqY8TYXbJUNPwdW+6yA@mail.gmail.com%3E))
+* 2012-07-30 - [Libcloud 0.11.0 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/www-announce/201207.mbox/%3CCAJMHEmLcSZi4bYmUaZtF_q=npc--DpVbTEH-Z+f0TCd2iteS-A@mail.gmail.com%3E))
+* 2012-05-24 - [Libcloud 0.10.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201205.mbox/%3CCAJMHEmKtqtkWsTHVYeO-ijytw9caQ4p%2B-ip7And3aPJhKuA8vA%40mail.gmail.com%3E))
+* 2012-04-23 - [Libcloud REST interface](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201204.mbox/%3CCAJMHEmKkSWe8pKKnxFBVMOgv8TjfCVsQPxWBFM6ksLuGOBVj0w%40mail.gmail.com%3E) project got accepted for Google Summer of Code 2012
+* 2012-04-01 - [Libcloud 0.9.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201204.mbox/%3CCAJMHEmJzeGL%2BU1PNeX0T-1dcxUC1um88jQTAmskZ-mXTQ3QLGw%40mail.gmail.com%3E))
+* 2012-03-03 Libcloud is participating in Google Summer of Code 2012, some of the project ideas can be found on the [ticket tracker](https://issues.apache.org/jira/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=labels+%3D+gsoc2012+AND+project+%3D+Libcloud&runQuery=true&clear=true).
+* 2012-02-08 - [Libcloud 0.8.0 is released](/downloads.html)
+* 2012-01-20 - [Libcloud meetup has been held at the Rackspace San Francisco office](http://libcloudmeetup.eventbrite.com/)
+
+
+### 2011
+
+* 2011-12-30 - [2011 in retrospect and a Happy New Year from the Libcloud team](http://mail-archives.apache.org/mod_mbox/libcloud-users/201112.mbox/%3CCAJMHEmL1D-HuCj4LSH-mF1bP_Of6XwEfuP1Y74_2APeD-8OrFA@mail.gmail.com%3E)
+* 2011-12-09 - [Version 0.7.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201112.mbox/%3CCAJMHEm+qKuSarmvQZ4H1PVUkv6L3vssjQEHs+3MCtSJ9hfBwOw@mail.gmail.com%3E))
+* 2011-11-22 - [New committer Hutson Betts (hbetts) joins the team](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201111.mbox/%3CCAJMHEm+08-1MMCgHDZgULc+StDiwgR+_krVZvHOJF0odcU_OWg@mail.gmail.com%3E)
+* 2011-11-17 - [Version 0.6.2 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201111.mbox/%3CCAJMHEmJTN407_JJRfnwDuJxNsWCupEGc0cXWxs%3DM-n8HoHoQKQ%40mail.gmail.com%3E))
+* 2011-11-09 - [Version 0.6.1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201111.mbox/%3CCAJMHEm+8XX704mSY4qw4P0YSBjGK=0SWCKjzSHBe8sLD__2UnA@mail.gmail.com%3E))
+* 2011-10-19 - [Version 0.6.0-beta1 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-users/201110.mbox/%3CCAJMHEmKtzJfh0DgRw+7a0OYgR5-M59qye4_+hd2fRKBr7REoxg@mail.gmail.com%3E))
+* 2011-09-07 - [Episode about Libcloud on FLOSS Weekly podcast](http://twit.tv/show/floss-weekly/181)
+* 2011-07-04 - [Version 0.5.2 is released](/downloads.html) ([release announcement](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201107.mbox/%3CCAJMHEm+-=3NxsZj+n+bogmYzGsxDJQOU_2aJbuNS77nmnsekJw@mail.gmail.com%3E))
+* 2011-06-06 - [Libcloud development sprint will be held at EuroPython in Florence, Italy](/europython-libcloud-sprint.html)
+* 2011-05-25 - [Libcloud graduates from the Apache Incubator to a Top level Project](https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces12)
+* 2011-05-25 - [Website and SVN repositories get moved](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201105.mbox/%3CBANLkTinTq7RrKpe8SMmSeKKW8yQpu-77Ew@mail.gmail.com%3E)
+* 2011-05-25 - [Version 0.5.0 is released](http://mail-archives.apache.org/mod_mbox/libcloud-dev/201105.mbox/%3CBANLkTi=LqBidHLHUwAJSAWSzd-qSpad+dA@mail.gmail.com%3E)
+* 2011-05-10 - [Community voting for graduating to the Top Level Project has started](http://mail-archives.apache.org/mod_mbox/incubator-libcloud/201105.mbox/%3CBANLkTimouwpSUkw-BVPV_KnpbfFgU6yqeQ@mail.gmail.com%3E)
+* 2011-05-10 - Libcloud gets a project chair - Tomaz Muraus
+* 2011-02-15 - Libcloud [sprint will be held at PyCon 2011 in Atlanta](http://mail-archives.apache.org/mod_mbox/incubator-libcloud/201102.mbox/%3CAANLkTimwn5Dm372VYZ4YVcgKQqbVVwxyo8=DMFtHoTwg@mail.gmail.com%3E)
+* 2011-01-17 - [Version 0.4.2 is released](/downloads.html)
+
+### 2010
+
+* 2010-10-12 - [Version 0.4.0 is released](/downloads.html)
+* 2010-05-10 - [Version 0.3.1 is released](/downloads.html)
+* 2010-02-02 - [Version 0.2.0 (first public release) is released](/downloads.html)
+
+### 2009
+
+* 2009-11-01 - [Libcloud enters Apache Incubator](http://incubator.apache.org/projects/libcloud.html)

Added: libcloud/site/trunk/content/releases.xml
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/releases.xml?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/releases.xml (added)
+++ libcloud/site/trunk/content/releases.xml Tue Dec 31 14:19:12 2013
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?>

Added: libcloud/site/trunk/content/security.mdtext
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/security.mdtext?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/security.mdtext (added)
+++ libcloud/site/trunk/content/security.mdtext Tue Dec 31 14:19:12 2013
@@ -0,0 +1,58 @@
+title: Security updates and reports
+
+## Libcloud Vulnerabilities
+
+### [CVE-2012-3446] Possible SSL MITM due to invalid regular expression used to validate the target server hostname
+
+**Severity**: Medium
+
+**Versions Affected**:
+
+Apache Libcloud 0.4.2 to 0.11.1
+
+Versions prior to 0.4.2 don't perform any target server SSL certificate
+validation.
+
+**Description**:
+
+When establishing a secure (SSL / TLS) connection to a target server an
+invalid regular expression has been used for performing the hostname
+verification. Subset instead of the full target server hostname has been
+marked an an acceptable match for the given hostname.
+
+For example, certificate with a hostname field of "aexample.com" was considered
+a valid certificate for domain "example.com".
+
+**Mitigation**:
+
+Users should upgrade to the latest version (0.11.1) which includes a fix.
+
+**Credit**:
+
+This issue was discovered by researchers from the University of Texas at Austin
+(Martin Georgiev, Suman Jana and Vitaly Shmatikov).
+
+### [CVE-2010-4340] SSL MITM vulnerability
+
+**Description**:
+
+Python SSL library doesn't validate a host SSL certificate and as a
+consequence, versions prior to **0.4.2** are vulnerable to a man-in-the-middle
+attack.
+
+**Affected versions**: All the versions prior to **0.4.2**
+
+**Fix version**:
+
+This vulnerability has been fixed in the version
+**[0.4.2](/libcloud/downloads.html)**. You are strongly encouraged
+to upgrade to this version and set libcloud.security.VERIFY_SSL_CERT variable
+to True.
+
+## Reporting a vulnerability
+
+If you find a security vulnerability you are strongly encouraged to report it to
+our private mailing list: [security@libcloud.apache.org](mailto:security@libcloud.apache.org)
+
+PGP keys of the libcloud developers can be found at
+[https://www.apache.org/dist/libcloud/KEYS](https://www.apache.org/dist/libcloud/KEYS)

Added: libcloud/site/trunk/content/sitemap.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/content/sitemap.html?rev=1554515&view=auto
==============================================================================
--- libcloud/site/trunk/content/sitemap.html (added)
+++ libcloud/site/trunk/content/sitemap.html Tue Dec 31 14:19:12 2013
@@ -0,0 +1,7 @@
+{% extends "basic.html" %}
+
+{% block content %}
+<h2>Sitemap</h2>
+
+{{ content|markdown }}
+{% endblock %}



Mime
View raw message