                                   -*- coding: utf-8 -*-

Changes with Apache Libcloud 0.9.1:

  *) General:

    - Make parsing of the Auth API responses in the OpenStack drivers more
      flexible and extensible.

      Now, every connection class that inherits from the openstack base
      connection must implement get_endpoint(), who's job is to return the
      correct endpoint out of the service catalog.

      Note: The openstack.py base driver no longer works by default with
      Rackspace nova. The default endpoint parsed from the service catalog
      is the default compute endpoint for devstack. ; LIBCLOUD-151
      [Brad Morgan]

    - Allow user to pass ex_tenant_name keyword argument to the OpenStack node
      driver class. This scopes all the endpoints returned by the Auth API
      endpoint to the provided tenant. ; LIBCLOUD-172
      [James E. Blair]

    - Allow user to specify OpenStack service catalog parameters (service type,
      name and region). This way base OpenStack driver can be used with
      different providers without needing to subclass. ; LIBCLOUD-173
      [James E. Blair]

  *) Compute:

    - Add new RackspaceNovaBeta and RackspaveNovaDfw driver based on the
      OpenStack. ; LIBCLOUD-151
      [Brad Morgan]

    - Include 'created' and 'updated' attribute in the OpenStack 1.1 driver.
      ; LIBCLOUD-155
      [Chris Gilmer]

    - Include 'minRam' and 'minDisk' attribute in the OpenStack 1.1 driver
      Node extra dictionary. ; LIBCLOUD-163
      [Chris Gilmer]

    - Alow users to use a list of tuples for the query string parameters inside
      the OpenStack connection classes. This way same key can be specified
      multiple times ; LIBCLOUD-153
      [Dave King]

    - Allow user to pass 'max_tries' keyword argument to deploy_node method.
      [Tomaz Muraus]

    - Include original exception error message when re-throwing an exception
      inside _run_deployment_script method.
      [Tomaz Muraus]

    - Add support for ElasticHosts new United States (Los Angeles) and Canada
      (Toronto) locations. ; GITHUB-53
      [Jaime Irurzun]

    - Add serverId attribute to the NodeImage object extra dictionary in the
      OpenStack driver.
      [Mark Everett]

    - Add new EC2 instance type - m1.medium.
      [Tomaz Muraus]

    - Allow user to re-use auth tokens and pass 'ex_force_auth_token' keyword
      argument to the OpenStack driver constructor.
      [Dave King]

    - Add new experimental libvirt driver.
      [Tomaz Muraus]

    - Properly handle OpenStack providers which return public IP addresses under
      the 'internet' key in the addresses dictionary.
      [Tomaz Muraus]

    - Update create_node in Linode driver and make it return a Node object
      instead of a list. Reported by Jouke Waleson. ; LIBCLOUD-175
      [Tomaz Muraus]

  *) Storage:

    - Don't lowercase special header names in the Amazon S3 storage driver. ;
      LIBCLOUD-149
      [Tomaz Muraus]

  *) Load-balancer:

    - Allow user to specify a condition and weight when adding a member in
      the Rackspace driver.
      [Adam Pickeral]

    - Add an extension method (ex_balancer_attach_members) for attaching
      multiple members to a load balancer in the Rackspace driver.
      LIBCLOUD-152
      [Adam Pickeral]

    - Add ex_creaate_balancer method to the Rackspace driver and allow user to
      pass 'vip' argument to it. ; LIBCLOUD-166
      [Adam Pickeral]

    - Update Rackspace driver to support Auth 2.0. ; LIBCLOUD-165
      [Dave King]

    - Add new ex_create_balancer_access_rule and
      ex_create_balancer_access_rule_no_poll method to the Rackspace driver. ;
      LIBCLOUD-170
      [Dave King]

  *) DNS:

    - Update Rackspace driver to support Auth 2.0. ; LIBCLOUD-165
      [Dave King]

Changes with Apache Libcloud 0.8.0:

  *) General:

     - Add 'request_kwargs' argument to the get_poll_request_kwargs method.
       This argument contains kwargs which were previously used to initiate the
       poll request.
       [Mark Everett]

     - Add support for handling compressed responses (deflate, gzip). Also send
       "Accept-Encoding" "gzip,deflate" header with all the requests.
       [Tomaz Muraus]

     - Fix debug module (LIBCLOUD_DEBUG env variable) so it works with Python 3
       [Tomaz Muraus]

  *) Compute:

     - Added support for retrieving OpenNebula v3.2 instance types, OpenNebula
       v3.0 network Public attribute support, and additional code coverage
       tests.
       [Hutson Betts]

     - Add implementation for ex_save_image method to the OpenStack 1.1 driver.
       [Shawn Smith]

     - Add support for Amazon new South America (Sao Paulo) location.
       [Tomaz Muraus]

     - Fix a bug in OpenStack driver when 2.0_apikey or 2.0_password
       'auth_version' is used.
       [Tomaz Muraus]

     - Current OpenNebula OCCI implementation does not support a proper
       restart method. Rather it suspends and resumes. Therefore, restart_node
       has been removed from the OpenNebula driver.
       [Hutson Betts]

     - Enable ex_delete_image method in the OpenStack 1.1 driver.
       [Shawn Smith]

     - Return NodeImage instance in OpenStack 1.1 driver ex_save_image method 
       ; LIBCLOUD-138
       [Shawn Smith]

     - Enable reboot_node method in the OpenNebula 3.2 driver.
       [Hutson Betts]

     - Fix a public_ips Node variable assignment in the Gandi.net driver.
       [Aymeric Barantal]

     - Updated the list of node states for OpenNebula drivers. ; LIBCLOUD-148
       [Hutson Betts]

  *) Storage:

    - Propagate extra keyword arguments passed to the Rackspace driver
      connection class.
      [Dave King]

  *) Load-balancer:

    - Add 'extra' attribute to the LoadBalancer object and retrieve all the
      virtual IP addresses in the Rackspace driver.
      [Dave King]

    - Add list_supported_algorithms() method to the base LoadBalancer class.
      This method returns a list of supported algorithms by the provider.
      [Dave King]

    - Update Rackspace driver:
      - Add two new supported algorithms: WEIGHTED_ROUND_ROBIN,
        WEIGHTED_LEAST_CONNECTIONS
      - Add ex_list_algorithm_names method
      - Add ex_get_balancer_error_page method
      - Add ex_balancer_access_list method
      - Populate LoadBalancer extra dictionary with more attributes
      - Add support for health monitors and connection throttling
      - Add more balancer states
      - ex_list_protocols_with_default_ports
      [Dave King]

    - Propagate extra keyword arguments passed to the Rackspace driver
      connection class.
      [Dave King]

    - Add 'extra' attribute to the Member object and populate it in
      the Rackspace driver.
      [Mark Everett]

    - Adds status to the Member object and conditions an 'enum'
      (Rackspace driver).
      [Mark Everett]

    - Add update_balancer method to the base LoadBalancer class.
      [Mark Everett]

    - Add update_balancer method to the Rackspace driver.
      [Mark Everett]

    - Add created and updated attribute to the LoadBalancer extra dictionary in
      the Rackspace driver.
      [Mark Everett]

    - Fix protocol name maping in the Rackspace driver.
      [Bill Woodward]

Changes with Apache Libcloud 0.7.1:

  *) General:

     - Fix a minor bug in debug mode (LIBCLOUD_DEBUG=/dev/stderr) which has been
       introduced when adding Python 3 compatibility layer.
       [Paul Querna]

     - Update OpenStack Auth API endpoint paths.
       [Paul Querna]

Changes with Apache Libcloud 0.7.0:

  *) General:

     - Add support for Python 3.x.
       [Tomaz Muraus]

     - Remove old deprecated paths.
       [Tomaz Muraus]

  *) Compute:

     - Update CloudSigma Zurich API endpoint address.
       [Tomaz Muraus]

     - Add new US Las Vegas endpoint to CloudSigma driver (types.CLOUDSIGMA_US)
       [Tomaz Muraus]

     - Allow user to specify drive type (hdd, ssd) when creating a
       CloudSigma server.

       Note 'ssd' drive_type doesn't work with the API yet.
       [Tomaz Muraus]

     - Update OpenStack 1.1 driver to comply with the API specs. Need to make
       another call to retrieve node name and ip addresses when creating a node,
       because the first call only returns an id an the password. ; GITHUB-40
       [Dave King]

     - Add ex_node_ids argument to the EC2 driver list_nodes method. ;
       GITHUB-39
       [Suvish Vt]

     - If OpenStack Auth 2.0 API is used, also parse out tenant id and
       name and save it on the connection class (conn.tenant['id'],
       conn.tenant['name']).
       [Tomaz Muraus]

     - Add new "Cluster Compute Eight Extra Large" size to the Amazon EC2
       driver.
       [Tomaz Muraus]

     - Add the following extension methods to the EC2 compute driver:
       ex_describe_all_addresses, ex_associate_addresses, ex_start_node,
       ex_stop_node.
       [Suvish Vt]

     - Change public_ip and private_ip attribute on the Node object to the
       public_ips and private_ips since both of the objects are always a list.

       Note: For backward compatibility you can still access public_ip and
       private_ip attributes, but this will be removed in the next release.
       [Tomaz Muraus]

     - Fix an inconsistency in IBM SBC driver and make sure public_ips and
       private_ips attributes are a list.
       [Tomaz Muraus]

     - Fix an inconsistency in OpSource driver and make sure public_ips is an
       empty list ([]), not 'unknown'
       [Tomaz Muraus]

     - Updated support for OpenNebula.org v1.4, v2.x, and v3.x APIs and included
       additional compute tests validating functionality; LIBCLOUD-121
       [Hutson Betts]

  *) Load-balancer:

    - Add ex_member_address argument to the Rackspace driver list_balancers
      method. If this argument is provided, only loadbalancers which have a
      member with the provided IP address attached are returned.
      [Tomaz Muraus]

Changes with Apache Libcloud 0.6.2:

  *) General

     - Fix a bug in PollingConnection class - actually use and don't ignore
       the poll_interval
       [Tomaz Muraus]

  *) Compute:

     - Add support for Auth 2.0 API (keystone) to the OpenStack Auth
       connection class.
       [Brad Morgan]

     - Add list_locations method to the OpenStack driver and fix some
       inconsistencies in the OpenStack driver extension method signatures.
       [Brad Morgan]

     - Update Amazon EC2 driver and pricing data to support a new region -
       US West 2 (Oregon)
       [Tomaz Muraus]

     - Expose 'CLOUDSTACK' provider. This driver can be used with an
       arbitrary CloudStack installation.
       [Tomaz Muraus]

  *) Storage:

     - Update Amazon S3 driver to support a new region - US West 2 (Oregon)
       [Tomaz Muraus]

   *) DNS:

      - Increase the default poll interval in the Rackspace driver to 2.5
        seconds.
        [Tomaz Muraus]

      - Fix a bug in Rackspace Cloud DNS driver and make sure to throw an
        exception if an unexpected status code is returned. Reported by
        "jeblair".
        [Tomaz Muraus]

Changes with Apache Libcloud 0.6.1:

  *) General:

     - Modify ParamikoSSHClient.connect so it supports authentication using a
       key file ; LIBCLOUD-116
       [Jay Doane]

     - User must now explicitly specify a path when using LIBCLOUD_DEBUG
       environment variable ; LIBCLOUD-95.
       [daveb, Tomaz Muraus]

     - Add new XmlResponse and JsonResponse base class and modify all the
       driver-specific response classes to inherit from one of those two
       classes where applicable.
       [Caio Romão]

     - Add new 'PollingConnection' class. This class can work with 'async'
       APIs. It sends and an initial request and then periodically poll the API
       until the job has completed or a timeout has been reached.
       [Tomaz Muraus]

  *) Compute:

     - Add 24GB size to the GoGrid driver
       [Roman Bogorodskiy]

     - Fix API endpoint URL in the Softlayer driver
       [Tomaz Muraus]

     - Add support for OpenNebula 3.0 API ; LIBCLOUD-120
       [Hutson Betts]

     - Add more attributes to the extra dictionary in the EC2 driver ;
       GITHUB-31
       [Juan Carlos Moreno]

     - Fix IP address assignment in the EC2 driver. Don't include "None" in the
       public_ip and private_ip Node list attribute.
       [Tomaz Muraus]

     - Make deploy_node functionality more robust and don't start deployment if
       node public_ip attribute is an empty list.
       [Tomaz Muraus]

     - Support SSH key authentication when using deploy_node.
       [Russell Haering, Tomaz Muraus]

     - Enable deploy_node functionality in the EC2 driver using SSH key
       authentication
       [Russell Haering, Tomaz Muraus]

     - Enable paramiko library debug log level if LIBCLOUD_DEBUG is used and
       paramiko is installed.
       [Tomaz Muraus]

     - Fix the request signature generation in the base EC2 compute driver.
       If the endpoint is using a non-standard port (Eucalyptus based
       installations), append it to the hostname used to generate the
       signature.
       [Simon Delamare]

     - Add new "unavailable" state to the BrightboxNodeDriver class.
       [Tim Fletcher]

     - Increase a PollingConnection timeout in the CloudStack connection
       and fix the context dictionary creation in the _async_request method.
       [gigimon]

     - Fix networks retrieval in the CloudStack driver create_node method.
       Also only pass 'networkids' field to the API if there are any networks
       available.
       [gigimon, Tomaz Muraus]

     - Fix list_nodes in the CloudStack driver. Private IPs aren't always
       available.
       [Tomaz Muraus]

  *) Load-baancer:

     - Add a missing argument to the method call inside
       LoadBalancer.attach_compute_node and Driver.balancer_attach_compute_node.
       [Tim Fletcher, Tomaz Muraus]

     - Add missing destroy() method to the LoadBalancer class.
       [Tomaz Muraus]

  *) DNS:

     - New drivers for Rackspace Cloud DNS (US and UK region)
       [Tomaz Muraus]

     - Add list_record_types() method. This method returns a list of record
       types supported by the provider.
       [Tomaz Muraus]

Changes with Apache Libcloud 0.6.0-beta1

  *) General:

    - All the driver classes now inherit from the BaseDriver class
      [Tomaz Muraus]

    - Prefer simplejson (if available) over json module; LIBCLOUD-112
      [Geoff Greer]

    - Update compute demo and change the syntax of test credentials stored in
      test/secrets.py-dist ; LIBCLOUD-111
      [Mike Nerone]

    - Enable SSL certificate verification by default and throw an exception
      if CA certificate files cannot be found. This can be overridden by
      setting libcloud.security.VERIFY_SSL_CERT_STRICT to False.
      [Tomaz Muraus]

  *) Compute:

     - Support for 1.1 API and many other improvements in the OpenStack driver ;
       LIBCLOUD-83
       [Mike Nerone, Paul Querna, Brad Morgan, Tomaz Muraus]

     - Add some extra methods to the Gandi.net driver ; LIBCLOUD-115
       [Aymeric Barantal]

     - Add ex_delete_image method to the Rackspace driver ; GITHUB-27
       [David Busby]

     - Linode driver now supports new 'Japan' location
       [Jed Smith]

     - Rackspace driver now inherits from the OpenStack one instead of doing
       it vice versa.; LIBCLOUD-110
       [Mike Nerone]

     - Properly populate NodeImage "details" dictionary in the Rackspace
       compute driver.; LIBCLOUD-107
       [Lucy Mendel]

     - Fix a bug in Eucalyptus driver ex_describe_addresses method.
       [Tomaz Muraus]

     - Add the following new extenstion methods to the Rackspace driver:
       ex_resize, ex_confirm_resize, ex_revert_resize.
       [Tomaz Muraus]

     - Also allow user to pass in Node object to some ex_ methods in
       the Rackspace compute driver.
       [Tomaz Muraus]

     - Throw an exception in deploy_node if paramiko library is not
       available
       [Tomaz Muraus]

     - Fix chmod argument value which is pased to the sftpclient.put
       method; GITHUB-17
       [John Carr]

     - New driver for Ninefold.com; LIBCLOUD-98
       [Benno Rice]

  *) Storage:

     - New driver for Google Storage based on the v1.0 / legacy API
       [Tomaz Muraus]

     - New driver for Ninefold.com; GITHUB-19
       [Benno Rice]

     - Fix a bug in uploading an object with some versions of Python 2.7
       where httplib library doesn't automatically call str() on the
       header values.
       [Tomaz Muraus]

     - Allow users to upload (create) 0-bytes large (empty) objects
       [Tomaz Muraus]

  *) Load-balancer:

     - New driver for Rackspace UK location
       [Tomaz Muraus]

     - New driver for Ninefold.com; LIBCLOUD-98
       [Benno Rice]

  *) DNS:

   - Drivers for Linode DNS and Zerigo DNS
     [Tomaz Muraus]

   - Brand new DNS API!
     [Tomaz Muraus]

Changes with Apache Libcloud 0.5.2

  *) Compute:
     - New driver for serverlove.com and skalicloud.com
       [Tomaz Muraus]

     - Fix node name and tag handling in the Amazon EC2 driver
       [Wiktor Kolodziej]

     - Fix pricing and response handling in the OpenStack driver
       [Andrey Zhuchkov]

     - Fix deploy_node() method and make it more robust
       [Tomaz Muraus]

     - Users can now pass file like objects to ScriptDeployment and
       SSHKeyDeployment constructor.
       [Tomaz Muraus]

     - Include node tags when calling list_nodes() in the Amazon EC2
       driver
       [Trevor Pounds]

     - Properly handle response errors in the Rackspace driver and
       only throw InvalidCredsError if the returned status code is 401
       [Brad Morgan]

     - Fix the create_node method in the Nimbus driver and make the
       "ex_create_tag" method a no-op, because Nimbus doesn't support creating
       tags.
       [Tomaz Muraus]

    *) Storage:

       - Fix handling of the containers with a lot of objects. Now a LazyList
         object is returned when user calls list_container_objects() method
         and this object transparently handles pagination.
       [Danny Clark, Wiktor Kolodziej]

Changes with Apache Libcloud 0.5.0

    *) Existing APIs directly on the libcloud.* module have been
       deprecated and will be removed in version 0.6.0.  Most methods
       were moved to the libcloud.compute.* module.

    *) Add new libcloud.loadbalancers API, with initial support for:
        - GoGrid Load Balancers
        - Rackspace Load Balancers
      [Roman Bogorodskiy]

    *) Add new libcloud.storage API, with initial support for:
        - Amazon S3
        - Rackspace CloudFiles
       [Tomaz Muraus]

    *) Add new libcloud.compute drivers for:
        - Bluebox [Christian Paredes]
        - Gandi.net [Aymeric Barantal]
        - Nimbus [David LaBissoniere]
        - OpenStack [Roman Bogorodskiy]
        - Opsource.net [Joe Miller]

    *) Added "pricing" module and improved pricing handling.
       [Tomaz Muraus]

    *) Updates to the GoGrid compute driver:
        - Use API version 1.0.
        - Remove sandbox flag.
        - Add ex_list_ips() to list IP addresses assigned to the account.
        - Implement ex_edit_image method which allows changing image attributes
          like name, description and make image public or private.
       [Roman Bogorodskiy]

    *) Updates to the Amazon EC2 compute driver:
        - When creating a Node, use the name argument to set a Tag with the
          value.  [Tomaz Muraus]
        - Add extension method for modifying node attributes and changing the
          node size. [Tomaz Muraus]
        - Add support for the new Amazon Region (Tokyo). [Tomaz Muraus]
        - Added ex_create_tags and ex_delete_tags. [Brandon Rhodes]
        - Include node Elastic IP addresses in the node public_ip attribute
          for the EC2 nodes. [Tomaz Muraus]
        - Use ipAddress and privateIpAddress attribute for the EC 2node public
          and private ip. [Tomaz Muraus]
        - Add ex_describe_addresses method to the EC2 driver. [Tomaz Muraus]

    *) Updates to the Rackspace CloudServers compute driver:
        - Add ex_rebuild() and ex_get_node_details() [Andrew Klochkov]
        - Expose URI of a Rackspace node to the node meta data. [Paul Querna]

    *) Minor fixes to get the library and tests working on Python 2.7 and PyPy.
       [Tomaz Muraus]

Changes with Apache Libcloud 0.4.2 (Released January 18, 2011)

    *) Fix EC2 create_node to become backward compatible for
       NodeLocation.
       [Tomaž Muraus]

    *) Update code for compatibility with CPython 2.5
       [Jerry Chen]

    *) Implement ex_edit_node method for GoGrid driver which allows
       changing node attributes like amount of RAM or description.
       [Roman Bogorodskiy]

    *) Add ex_set_password and ex_set_server_name to Rackspace driver.
       [Peter Herndon, Paul Querna]

    *) Add Hard and Soft reboot methods to Rackspace driver.
       [Peter Herndon]

    *) EC2 Driver availability zones, via ex_list_availability_zones;
       list_locations rewrite to include availablity zones
       [Tomaž Muraus]

    *) EC2 Driver Idempotency capability in create_node; LIBCLOUD-69
       [David LaBissoniere]

    *) SSL Certificate Name Verification:
       - libcloud.security module
       - LibcloudHTTPSConnection, LibcloudHTTPConnection (alias)
       - Emits warning when not verifying, or CA certs not found

    *) Append ORD1 to available Rackspace location, but keep in the
       same node as DFW1, because it's not readable or writeable from
       the API.
       [Per suggestion of Grig Gheorghiu]

    *) ex_create_ip_group, ex_list_ip_groups, ex_delete_ip_group,
       ex_share_ip, ex_unshare_ip, ex_list_ip_addresses additions
       to Rackspace driver
       [Andrew Klochkov]

    *) New driver for CloudSigma
       [Tomaž Muraus]

    *) New driver for Brightbox Cloud. LIBCLOUD-63
       [Tim Fletcher]

    *) Deployment capability to ElasticHosts
       [Tomaž Muraus]

    *) Allow deploy_node to use non-standard SSH username and port
       [Tomaž Muraus]

    *) Added Rackspace UK (London) support
       [Chmouel Boudjnah]

    *) GoGrid driver: add support for locations, i.e. listing
       of locations and creation of a node in specified
       location
       [Roman Bogorodskiy]

    *) GoGrid and Rackspace drivers: add ex_save_image() extra
       call to convert running node to an image
       [Roman Bogorodskiy]

    *) GoGrid driver: add support for creating 'sandbox' server
       and populate isSandbox flag in node's extra information.
       [Roman Bogorodskiy]

    *) Add ImportKeyPair and DescribeKeyPair to EC2. LIBCLOUD-62
       [Philip Schwartz]

    *) Update EC2 driver and test fixtures for new API.
       [Philip Schwartz]

Changes with Apache Libcloud 0.4.0 [Released October 6, 2010]

    *) Add create keypair functionality to EC2 Drivers. LIBCLOUD-57
       [Grig Gheorghiu]

    *) Improve handling of GoGrid accounts with limited access
       API keys. [Paul Querna]

    *) New Driver for ElasticHosts. LIBCLOUD-45
       [Tomaz Muraus]

    *) Use more consistent name for GoGrid driver and use http
       POST method for 'unsafe' operations
       [Russell Haering]

    *) Implement password handling and add deployment support
       for GoGrid nodes.
       [Roman Bogorodskiy]

    *) Fix behavior of GoGrid's create_node to wait for a Node ID.
       [Roman Bogorodskiy]

    *) Add ex_create_node_nowait to GoGrid driver if you don't need to
       wait for a Node ID when creating a node.
       [Roman Bogorodskiy]

    *) Removed libcloud.interfaces module.
       [Paul Querna]

    *) Removed dependency on zope.interfaces.
       [Paul Querna]

    *) RimuHosting moved API endpoint address.
       [Paul Querna]

    *) Fix regression and error in GoGrid driver for parsing node objects.
       [Roman Bogorodskiy]

    *) Added more test cases for GoGrid driver. LIBCLOUD-34
       [Roman Bogorodskiy, Jerry Chen]

    *) Fix parsing of Slicehost nodes with multiple Public IP addresses.
       [Paul Querna]

    *) Add exit_status to ScriptDeployment. LIBCLOUD-36
       [Paul Querna]

    *) Update prices for several drivers.
       [Brad Morgan, Paul Querna]

    *) Update Linode driver to reflect new plan sizes.
       [Jed Smith]

    *) Change default of 'location' in Linode create_node. LIBCLOUD-41
       [Jed Smith, Steve Steiner]

    *) Document the Linode driver.
       [Jed Smith]

    *) Request a private, LAN IP address at Linode creation.
       [Jed Smith]

Changes with Apache Libcloud 0.3.1 [Released May 11, 2010]

    *) Updates to Apache License blocks to correctly reflect status as an
       Apache Project.

    *) Fix NOTICE file to use 2010 copyright date.

    *) Improve error messages for when running the test cases without
       first setting up a secrets.py

Changes with Apache Libcloud 0.3.0 [Tagged May 6, 2010, not released]

    *) New Drivers for:
      - Dreamhost
      - Eucalyptus
      - Enomaly ECP
      - IBM Developer Cloud
      - OpenNebula
      - SoftLayer

    *) Added new deployment and bootstrap API.

    *) Improved Voxel driver.

    *) Added support for Amazon EC2 Asia Pacific (Singapore) Region.

    *) Improved test coverage for all drivers.

    *) Add support for multiple security groups in EC2.

    *) Fixed bug in Rackspace and RimuHosting when using multiple threads.

    *) Improved debugging and logging of HTTP requests.

    *) Improved documentation for all classes and methods.

Changes with Apache Libcloud 0.2.0 [Tagged February 2, 2010]

    *) First public release.
