                                   -*- coding: utf-8 -*-

Changes with Apache Libcloud 0.13.2

  *) General

    - Don't sent Content-Length: 0 header with POST and PUT request if "raw"
      mode is used. This fixes a regression which could cause broken behavior
      in some storage driver when uploading a file from disk.
      (LIBCLOUD-396)
      [Ivan Kusalic]

  *) Compute

    - Added Ubuntu Linux 12.04 image to ElasticHost driver image list.
      (LIBCLOUD-364)
      [Bob Thompson]

    - Update ElasticHosts driver to store drive UUID in the node 'extra' field.
      (LIBCLOUD-357)
      [Bob Thompson]

  *) Storage

    - Store last_modified timestamp in the Object extra dictionary in the S3
      driver. (LIBCLOUD-373)
      [Stefan Friesel]

  *) Load Balancer

   - Expose CloudStack driver directly through the Provider.CLOUDSTACK
     constant.
     [Tomaz Muraus]

 *) DNS

   - Modify Zerigo driver to include record TTL in the record 'extra' attribute
     if a record has a TTL set.
     [Tomaz Muraus]

   - Modify values in the Record 'extra' dictionary attribute in the Zerigo DNS
     driver to be set to None instead of an empty string ('') if a value for
     the provided key is not set.
     [Tomaz Muraus]

Changes with Apache Libcloud 0.13.1

 *) General

    - Fix a regression introduced in 0.13.0 and make sure to include
      Content-Length 0 with PUT and POST requests. (LIBCLOUD-362, LIBCLOUD-390)
      [Tomaz Muraus]

 *) Compute

    - Fix a bug in the ElasticHosts driver and check for right HTTP status
      code when determining drive imaging success. (LIBCLOUD-363)
      [Bob Thompson]

    - Update Opsource driver to include node public ip address (if available).
      (LIBCLOUD-384)
      [Michael Bennett]

  *) Storage

    - Fix a regression with calling encode_container_name instead of
      encode_object_name on object name in get_object method.
      Reported by Ben Meng (LIBCLOUD-366)
      [Tomaz Muraus]

    - Ensure that AWS S3 multipart upload works for small iterators.
      (LIBCLOUD-378)
      [Mahendra M]

Changes with Apache Libcloud 0.13.0:

 *) General

   - Add homebrew curl-ca-bundle path to CA_CERTS_PATH. This will make Libcloud
     use homebrew curl ca bundle file (if available) for server certificate
     validation. (LIBCLOUD-324)
     [Robert Chiniquy]

   - Modify OpenStackAuthConnection and change auth_token_expires attribute to
     be a datetime object instead of a string.
     [Tomaz Muraus]

   - Modify OpenStackAuthConnection to support re-using of the existing auth
     token if it's still valid instead of re-authenticating on every
     authenticate() call.
     [Tomaz Muraus]

   - Modify base Connection class to not send Content-Length header if body is
     not provided.
     [Tomaz Muraus]

   - Add the new error class ProviderError and modify InvalidCredsError to
     inherit from it. (LIBCLOUD-331)
     [Jayy Vis]

 *) Misc

   - Add unittest2 library dependency for tests and update some tests to use
     it.
     [Tomaz Muraus]

 *) Compute

    - Fix destroy_node method in the experimental libvirt driver.
      [Aymen Fitati]

    - Add ex_start_node method to the Joyent driver. (LIBCLOUD-319)
      [rszabo50]

    - Fix Python 3 compatibility issue in the ScriptFileDeployment class.
      (LIBCLOUD-321)
      [Arfrever Frehtes Taifersar Arahesis]

    - Add ex_set_metadata_entry and ex_get_metadata method to the VCloud driver.
      (LIBCLOUD-318)
      [Michel Samia]

    - Various improvements and bug-fixes in the VCloud driver. (LIBCLOUD-323)
      [Michel Samia]

    - Modify list_sizes method in the OpenStack driver to include
      OpenStackNodeSize object which includes 'vcpus' attribute which holds
      a number of virtual CPUs for this size. (LIBCLOUD-325)
      [Carlo]

    - For consistency rename "ex_describe_keypairs" method in the EC2 driver to
      "ex_describe_keypair".
      [Tomaz Muraus]

    - Modify "ex_describe_keypair" method to return key fingerprint in the
      return value. (LIBCLOUD-326)
      [Andre Merzky, Tomaz Muraus]

    - Populate private_ips attribute in the CloudStack drive when returning
      a Node object from the create_node method. (LIBCLOUD-329)
      [Sebastien Goasguen, Tomaz Muraus]

    - Allow user to pass extra arguments via "extra_args" argument which are
      then passed to the "deployVirtualMachine" call in the CloudStack driver
      create_node method. (LIBCLOUD-330)
      [Sebastien Goasguen, Tomaz Muraus]

    - Update Gandi driver to handle new billing model. (LIBCLOUD-317)
      [Aymeric Barantal]

    - Fix a bug in the Linode driver and remove extra newline which is added
      when generating a random root password in create_node. (LIBCLOUD-334)
      [Juan Carlos Moreno]

    - Add extension methods for managing keypairs to the CloudStack driver.
      (LIBCLOUD-333)
      [sebastien goasguen]

    - Add extension methods for managing security groups to the CloudStack
      driver. (LIBCLOUD-332)
      [sebastien goasguen]

    - Add extension methods for starting and stoping the node to the
      CloudStack driver. (LIBCLOUD-338)
      [sebastien goasguen]

    - Fix old _wait_until_running method. (LIBCLOUD-339)
      [Bob Thompson]

    - Fix a bug in the GoGrid driver get_uuid method. (LIBCLOUD-341)
      [Bob Thompson]

    - Various bug fixes and improvements in the HostVirtual driver.
      (LIBCLOUD-249)
      [Dinesh Bhoopathy]

    - Fix a bug with deploy_node not respecting 'timeout' kwarg.
      [Kevin Carter]

    - Modify create_node method in CloudStack driver to return an instance of
      CloudStackNode and add a new "expunging" node state. (LIBCLOUD-345)
      [sebastien goasguen]

    - Update API endpoint hostnames in the ElasticHost driver and use hostnames
      which return a valid SSL certificate. (LIBCLOUD-346)
      [Bob Thompson]

    - Add a driver for Rackspace's new datacenter in Sydney, Australia.
      [Alex Gaynor, Tomaz Muraus]

    - Add ex_list_networks method and missing tests for list_templates to the
      CloudStack driver. (LIBCLOUD-349)
      [Philipp Strube]

    - Correctly throw InvalidCredsError if user passes invalid credentials to
      the DigitalOcean driver.
      [Tomaz muraus]

 *) Storage

    - Fix an issue with double encoding the container name in the CloudFiles
      driver upload_object method.
      Also properly encode container and object name used in the HTTP request
      in the get_container and get_object method. (LIBCLOUD-328)
      [Tomaz Muraus]

 *) Load Balancer

    - Add ex_list_current_usage method to the Rackspace driver.

Changes with Apache Libcloud 0.12.4:

 *) Compute

    - Fix a regression in Softlayer driver caused by the xmlrpclib changes.
      (LIBCLOUD-310)
      [Jason Johnson]

    - Allow user to pass alternate ssh usernames to deploy_node
      (ssh_alternate_usernames kwarg) which are used for authentication if the
      default one doesn't work. (LIBCLOUD-309)
      [Chris Psaltis, Tomaz Muraus]

    - Fix a bug in EC2 list_locations method - 'name' attribute didn't contain a
      the right value.
      [Tomaz Muraus]

    - Add new ScriptFileDeployment deployment class which reads deploy script
      from a file.
      [Rudolf J Streif]

    - Add support for API version 5.1 to the vCloud driver and accept any value
      which is a multiple of four for ex_vm_memory kwarg in create_node method.
      (LIBCLOUD-314)
      [Trevor Powell]

 *) Storage

    - Fix a regression with removed ex_force_service_region constructor kwarg in
      the CloudFiles driver. (LIBCLOUD-260)

Changes with Apache Libcloud 0.12.3:

  *) General

    - Fix Python 3.x related regressions. (LIBCLOUD-245)
      Reported by Arfrever Frehtes Taifersar Arahesis.
      [Tomaz Muraus]

    - Fix a regression introduced with recent xmlrpiclib changes which broke all
      the Gandi.net drivers. (LIBCLOUD-288)

      Reported by Hutson Betts.
      [Tomaz Muraus]

    - Improve deploy code to work correctly if the ssh user doesn't have access
      to the /root directory.

      Previously the ScriptDeployment script was stored in /root folder by
      default. Now it's stored in users home directory under filename
      ~/libcloud_deploymeny_<random>.sh. (LIBCLOUD-302)

      Reported by rotem on #libcloud.
      [Tomaz Muraus]

  *) Compute

    - Improve public and private IP address handling in OpenStack 1.1 driver.
      Assume every IP address which doesn't have a label "public" or "internet"
      is private. (LIBCLOUD-297)
      [Grischa Meyer, Tomaz Muraus]

    - Add new driver for DigitalOcean provider - https://www.digitalocean.com/.
      (LIBCLOUD-304)
      [Tomaz Muraus]

    - Fix a regression in ParamikoSSHClient.run method which caused this methid
      to only work as expected if you passed an absolute or a relative path to
      the script to it. (LIBCLOUD-278)
      [Tomaz Muraus]

  *) DNS

    - Allow user to specify 'priority' extra argument when creating a MX or SRV
      record.
      [Brian Jinwright, Tomaz Muraus]

Changes with Apache Libcloud 0.12.1:

  *) General

    - Deprecate LazyList method of iteration over large paginated collections
      and use a new, more efficient generator based approach which doesn't
      require the iterator to be pre-exhausted and buffering all of the values
      in memory.

      Existing list_* methods which previously used LazyList class are
      preserving the old behavior and new iterate_* methods which use a new
      generator based approach have been added. (LIBCLOUD-254)
      [Mahendra M]

    - Replace old ENUM style provider constants and replace them with a string
      version.
      This change allows users to dynamically register new drivers using a new
      set_driver method. (LIBCLOUD-255)
      [Mahendra M]

    - Allow user to explicitly specify which CA file is used for verifying
      the server certificate by setting 'SSL_CERT_FILE' environment variable.

      Note: When this variable is specified, the specified path is the only
      CA file which is used to verifying the server certificate. (LIBCLOUD-283)
      [Tomaz Muraus, Erinn Looney-Triggs]

    - Add a common module (libcloud.common.xmlrpc) for handling XML-RPC
      requests using Libcloud http layer.

      Also refactor existing drivers which use xmlrpclib directly (VCL, Gandi,
      Softlayer) to use this module.

      This change allows drivers to support LIBCLOUD_DEBUG and SSL certificate
      validation functionality. Previously they have bypassed Libcloud http
      layer so this functionality was not available. (LIBCLOUD-288)
      [John Carr]

  *) Compute

    - Fix string interpolation bug in __repr__ methods in the IBM SCE driver.
      (LIBCLOUD-242)
      [Tomaz Muraus]

    - Fix test failures which happened in Python 3.3 due to:
      - hash randomization
      - changes in xml.etree module
      - changes in xmlrpc module
      (LIBCLOUD-245)
      [Tomaz Muraus]

    - Improvements and additions in vCloud driver:
      - Expose generic query method (ex_query)
      - Provide functionality to get and set control access for vApps. This way
        created vApps can be shared between users/groups or everyone.
     (LIBCLOUD-251)
     [Michal Galet]

   - Update EC2 pricing data to reflect new, lower prices -
     http://aws.typepad.com/aws/2012/10/new-ec2-second-generation-standard-instances-and-price-reductions-1.html
     [Tomaz Muraus]

   - Update EC2 instance size to reflect new m3 instance types. Also refactor
     the code to make it easier to maintain.
     [Tomaz Muraus]

   - Add a new driver for HostVirtual (http://www.vr.org) provider.
     (LIBCLOUD-249)
     [Dinesh Bhoopathy]

   - Fix a bug where a numeric instead of a string value was used for the
     content-length header in VCloud driver. (LIBCLOUD-256)
     [Brian DeGeeter, Tomaz Muraus]

   - Add a new driver for new Asia Pacific (Sydney) EC2 region.
     [Tomaz Muraus]

   - Add support for managing security groups to the OpenStack driver. This
     patch adds the following extension methods:
     - ex_list_security_groups, ex_get_node_security_groups methods
     - ex_create_security_group, ex_delete_security_group
     - ex_create_security_group_rule, ex_delete_security_group_rule
     (LIBCLOUD-253)
     [L. Schaub]

   - Modify ElasticStack driver class to pass 'vnc auto' instead of
     'vnc:ip auto' argument to the API when creating a server.
     It looks like 'vnc:ip' has been replaced with 'vnc'.
     [Rick Copeland, Tomaz Muraus]

   - Add new EC2 instance type - High Storage Eight Extra Large Instance
     (hs1.8xlarge).
     [Tomaz Muraus]

   - Map 'shutting-down' node state in EC2 driver to UNKNOWN. Previously
     it was mapped to TERMINATED. (LIBCLOUD-280)

     Note: This change is backward incompatible which means you need to update
     your code if you rely on the old behavior.
     [Tomaz Muraus, Marcin Kuzminski]

   - Change _wait_until_running method so it supports waiting on multiple nodes
     and make it public (wait_until_running). (LIBCLOUD-274)
     [Nick Bailey]

   - Add new EC2 instance type - High Memory Cluster Eight Extra Large.
     (cr1.8xlarge).
     [Tomaz Muraus]

   - Add new driver for Abiquo provider - http://www.abiquo.com (LIBCLOUD-250).
     [Jaume Devesa]

   - Allow user to pass 'ex_blockdevicemappings' kwarg to the EC2 driver
     'create_node' method. (LIBCLOUD-282)
     [Joe Miller, Tomaz Muraus]

   - Improve error handling in the Brightbox driver.
     [Tomaz Muraus]

   - Fix the ScriptDeployment step to work correctly if user provides a
     relative path for the script argument. (LIBCLOUD-278)
     [Jaume Devesa]

   - Fix Softlayer driver and make sure all the code is up to date and works
     with the latest version of the actual Softlayer deployment (v3).
     (LIBCLOUD-287)
     [Kevin McDonald]

   - Update EC2 driver, m3 instance types are now available in all the regions
     except Brazil.

     Also update pricing to reflect new (decreased) prices.
     [Tomaz Muraus]

   - Minor improvements in the HostVirtual driver and add new ex_get_node and
     ex_build_node extension method. (LIBCLOUD-249)
     [Dinesh Bhoopathy]

   - Add ex_destroy_image method to IBM SCE driver. (LIBCLOUD-291)
     [Perry Zou]

   - Add the following new regions to the ElasticHosts driver: sjc-c, syd-v,
     hkg-e. (LIBCLOUD-293)
     [Tomaz Muraus]

   - Fix create_node in OpenStack driver to work correctly if 'adminPass'
     attribute is not present in the response.
     [Gavin McCance, Tomaz Muraus]

   - Allow users to filter images returned by the list_images method in the EC2
     driver by providing ex_image_ids argument. (LIBCLOUD-294)
     [Chris Psaltis, Joseph Hall]

   - Add support for OpenNebula 3.8. (LIBCLOUD-295)
     [Guillaume ZITTA]

   - Add missing 'deletd' -> terminated mapping to OpenStack driver.
     (LIBCLOUD-276)
     [Jayyy V]

   - Fix create_node in OpenStack driver to work correctly if 'adminPass'
     attribute is not present in the response. (LIBCLOUD-292)
     [Gavin McCance, Tomaz Muraus]

  *) Storage

    - Add a new local storage driver.
      (LIBCLOUD-252, LIBCLOUD-258, LIBCLOUD-265, LIBCLOUD-273)
      [Mahendra M]

    - Fix a bug which caused the connection to not be closed when using Python
      2.6 and calling get_object on an object which doesn't exist in the S3
      driver. (LIBCLOUD-257)
      [John Carr]

    - Add a new generator based method for listing / iterating over the
      containers (iterate_containers). (LIBCLOUD-261)
      [Mahendra M]

    - Add ex_purge_object_from_cdn method to the CloudFiles driver.
      (LIBCLOUD-267)
      [Tomaz Muraus]

    - Support for multipart uploads and other improvements in the S3 driver
      so it can more easily be re-used with other implementations (e.g. Google
      Storage, etc.).

      Also default to a multipart upload when using upload_object_via_stream.
      This methods is more efficient compared to old approach because it only
      requires buffering a single multipart chunk (5 MB) in memory.
      (LIBCLOUD-269)
      [Mahendra M]

    - Add new driver for Windows Azure Storage with support for block and page
      blobs. (LIBCLOUD-80)
      [Mahendra M]

  *) DNS

    - Update 'if type' checks in the update_record methods to behave correctly
      if users passes in RecordType.A with a value of 0 - if type is not None.
      (LIBCLOUD-247)
      [Tomaz Muraus]

    - New driver for HostVirtual provider (www.vr.org). (LIBCLOUD-249)
      [Dinesh Bhoopathy]

    - Finish Amazon Route53 driver. (LIBCLOUD-132)
      [John Carr]

    - Add new driver for Gandi provider (https://www.gandi.net). (LIBCLOUD-281)
      [John Carr]

  *) Load-Balancer

    - Add new driver for AWS Elastic Load Balancing service. (LIBCLOUD-169)
      [John Carr]

Changes with Apache Libcloud 0.11.4:

  *) General

    - Fix some of tests failures which happened in Python 3.3 due to randomized
      dictionary ordering. (LIBCLOUD-245)
      [Tomaz Muraus]

  *) Compute

    - Fix a bug where a numeric instead of a string value was used for the
      content-length header in VCloud driver. (LIBCLOUD-256)
      [Brian DeGeeter, Tomaz Muraus]

  *) Storage

    - Don't ignore ex_force_service_region argument in the CloudFiles driver.
      (LIBCLOUD-260)
      [Dan Di Spaltro]

    - Fix a bug which caused the connection to not be closed when using Python
      2.6 and calling get_object on an object which doesn't exist in the S3
      driver. (LIBCLOUD-257)
      [John Carr]

  *) DNS

    - Update 'if type' checks in the update_record methods to behave correctly
      if users passes in RecordType.A with a value of 0 - if type is not None.
      (LIBCLOUD-247)
      [Tomaz Muraus]

Changes with Apache Libcloud 0.11.3:

  *) Storage

    - Include 'last_modified' and 'content_type' attribute in the Object
      'extra' dictionary when retrieving object using get_object in the S3
      driver. Also modify 'meta_data' dictionary to include all the headers
      prefixed with 'x-amz-meta-'.
      [Tomaz Muraus]

Changes with Apache Libcloud 0.11.2:

  *) General

    Fix a bug with the Libcloud SSL verification code. Code was too strict and
    didn't allow "-" character in the sub-domain when using a wildcard
    certificate.

    Note: This is NOT a security vulnerability. (LIBCLOUD-244)
    [Tomaz Muraus]

  *) Compute

    - Add new Rackspace Nova driver for Chicago (ORD) location (LIBCLOUD-234)
      [Brian McDaniel]

    - Add capacity information to Vdc objects and implement power operations.
      (LIBCLOUD-239)
      [Michal Galet]

    - Allow user to pass 'timeout' argument to the 'deploy_node' method.
      [Tomaz Muraus]

    - Add ex_list_security_groups, ex_authorize_security_group and
      ex_describe_all_keypairs methods to the EC2 driver. (LIBCLOUD-241,
      LIBCLOUD-243)
      [Nick Bailey]

    - Add new methods for managing storage volumes and other extenstion methods
      to the IBM SCE driver. (LIBCLOUD-242)
      [Sengor Kusturica]

  *) Storage

    - Add the following new methods to the CloudFiles driver:
      ex_set_account_metadata_temp_url_key, ex_get_object_temp_url. (GITHUB-72)
      [Shawn Smith]

  *) Load-balancer

    - Add 'balancer' attribute to the Member instance. This attribute refers to
      the LoadBalancer instance this member belongs to.
      [Tomaz Muraus]

Changes with Apache Libcloud 0.11.1:

  *) General

    - Fix hostname validation in the SSL verification code (CVE-2012-3446).

      Reported by researchers from the University of Texas at Austin (Martin
      Georgiev, Suman Jana and Vitaly Shmatikov).

Changes with Apache Libcloud 0.11.0:

  *) Compute

    - Add a timeout of 10 seconds to OpenStackAuthConnection class.
      (LIBCLOUD-199)
      [Chris Gilmer]

    - Add time.sleep(wait_period) to _ssh_client_connect to prevent busy loops
      when we immediately can't connect to a server. (LIBCLOUD-197)
      [Jay Doane]

    - Fix a bug with Python 3 support in the following drivers
      - IBM SCE,
      - CloudStack
      - CloudSigma
      - OpenNebula
      - VpsNet
      - EC2
      - ElasticStack
      - vCloud
      - OpSource
      - Slicehost
      - Joyent
      (LIBCLOUD-204)
      [Sengor Kusturica, Hutson Betts, Tomaz Muraus]

    - Make CloudStack driver more robust and make it work if list_images() call
      returns no images. (LIBCLOUD-202)
      [Gabriel Reid]

    - Add force_ipv4 argument to _wait_until_running and default it to True.
      This will make Libcloud ignore IPv6 addresses when using deploy_node.
      [Jay Doane, Tomaz muraus]

    - Include error text if a CloudStack async job returns an error code.
      (LIBCLOUD-207)
      [Gabriel Reid]

    - Add extenstion methods for block storage volume management to the
      CloudStack driver. (LIBCLOUD-208)
      [Gabriel Reid]

    - New driver for KT UCloud (http://home.ucloud.olleh.com/main.kt) based on
      the CloudStack driver.
      [DaeMyung Kang]

    - Add a standard API and methods for managing storage volumes to the
      EC2 and CloudStack drivers. Base API consistent of the following methods:
      create_volume, destroy_volume, attach_volume, detach_volume.
      (LIBCLOUD-213)
      [Gabriel Reid]

    - Change ex_describe_tags, ex_create_tags and ex_delete_tags methods
      signature in the EC2 driver. Argument is now called resource (previously
      it was called node). This methods work with both Node and StorageVolume
      objects. (LIBCLOUD-213)
      [Gabriel Reid, Tomaz Muraus]

    - Add Rackspace Nova London driver.
      [Chris Gilmer]

    - Fix a bug - If user doesn't pass in 'network_id' argument to the
      create_node method in the CloudStack driver, don't explicitly define it.
      (LIBCLOUD-219)
      [Bruno Mahé, Tomaz Muraus]

    - Modify EC2 driver to also return cc2.8xlarge cluster compute instance in
      the eu-west-1 region.
      [Tomaz Muraus]

    - Add 'auth_user_variable' to the  OpenStackAuthConnection class.
      [Mark Everett]

    - Fix a bug with repeated URLs in some requests the vCloud driver.
      (LIBCLOUD-222)
      [Michal Galet]

    - New Gridspot driver with basic list and destroy functionality.
      (LIBCLOUD-223)
      [Amir Elaguizy]

    - Add methods for managing storage volumes to the Gandi driver.
      (LIBCLOUD-225)
      [Aymeric Barantal]

  *) DNS

    - Add support for GEO RecordType to Zerigo driver. (LIBCLOUD-203)
      [Gary Wilson]

    - Fix a bug with Python 3 support in the following drivers (LIBCLOUD-204)
      - Zerigo
      [Tomaz Muraus]

    - Add support for URL RecordType to Zerigo driver. (LIBCLOUD-209)
      [Bojan Mihelac]

    - Properly handle record creation when user doesn't provider a record name
      and wants to create a record for the actual domain.
      Reported by Matt Perry (LIBCLOUD-224)
      [Tomaz Muraus]

  *) Storage

    - Fix a bug with Python 3 support in the following drivers
      - Atmos
      - Google Storage
      - Amazon S3
      (LIBCLOUD-204)
      [Tomaz Muraus]

    - Fix a bug in the CloudFiles driver which prevented it to work with
      accounts which use a non ORD endpoint. (LIBCLOUD-205)
      [Geoff Greer]

    - Fix a bug in the enable_container_cdn method. (LIBCLOUD-206)
      [Geoff Greer]

    - Allow user to specify container CDN TTL when calling container.enable_cd()
      using ex_ttl keyword argument in the CloudFiles driver.
      [Tomaz Muraus]

    - Add ex_enable_static_website and ex_set_error_page method to the
      CloudFiles driver.
      [Tomaz Muraus]

    - Propagate kwargs passed to container.download_object() to
      driver.download_object(). (LIBCLOUD-227)
      [Benno Rice]

    - Fix a bug with not escaping container and object name in the Atmos driver.
      [Russell Keith-Magee, Benno Rice]

    - Fix upload_object_via_stream method in the Atmos driver. (LIBCLOUD-228)
      [Benno Rice]

    - Fix a bug with uploading zero-sized files in the OpenStack Swift /
      CloudFiles driver.
      [Tomaz Muraus]

    - Fix a bug with content_type and and encoding of object and path names in
      the Atmos driver.
      [Russell Keith-Magee]

  *) Other:

    - Unify docstrings formatting in the compute drivers. (LIBCLOUD-229)
      [Ilgiz Islamgulov]

Changes with Apache Libcloud 0.10.1:

  *) General:

    - Add timeout attribute to base 'Connection' class and pass it to the
      connection class constructor if Python version is not 2.5.
      [Chris Gilmer]

  *) Compute:

    - Update IBM SBC driver so it works with IBM Smart Cloud Enterprise.
      (LIBCLOUD-195)
      [Sengor Kusturica]

    - Add ex_register_iso method to the CloudStack driver. (LIBCLOUD-196)
      [Daemian Mack]

    - Allow user to specify which IP to use when calling deploy_node.
      (defaults to 'public_ips'). Previously it only worked with public IP, now
      user can pass 'private_ips' as an argument and SSH client will try to
      connect to the node first private IP address.
      [Jay Doane]

    - Fix CloudSigmaLvsNodeDriver connectionCls bug.
      [Jerry Chen]

    - Add 'ex_keyname' argument to the create_node method in the OpenStack
      driver. (LIBCLOUD-177)
      [Jay Doane]

    - Fix a problem in deploy_node - make it work with providers which
      don't  instantly return created node in the list_node response.
      Also add __str__ and __repr__ method to DeploymentError so the
      error message is more useful. (LIBCLOUD-176)
      [Jouke Waleson, Tomaz Muraus]

    - Add 'ssh_key' feature to Brigthbox driver. This way it works with
      deploy_node. (LIBCLOUD-179)
      [Neil Wilson]

    - Add Joyent compute driver.
      [Tomaz Muraus]

    - Store auth token expire times on the connection class in the attribute
      called 'auth_token_expires'. (LIBCLOUD-178)
      [Chris Gilmer, Brad Morgan]

    - Add new driver for VCL cloud
      (http://www.educause.edu/blog/hes8/CloudComputingandtheVirtualCom/167931)
      (LIBCLOUD-180)
      [Jason Gionta, Tomaz Muraus]

    - Improve and add new features to Brightbox driver
        - Update fixtures to represent actual api output
        - Update compute tests to 100% coverage
        - Add userdata and server group extensions to create_node
        - Add ipv6 support to public ip list
        - Improve in line documentation
        - Add lots of api output information to Node and Image
          'extra' attributes
        - Allow variable API versions (api_version argument)
        - Allow reverse dns updates for cloud ip extensions
      (LIBCLOUD-184)
      [Neil Wilson, Tomaz Muraus]

    - Add ex_userdata argument to the OpenStack 1.1 driver. (LIBCLOUD-185)
      [Jay Doane]

    - Modify Vmware vCloud driver and implement new features
      for the vCloud version 1.5. (LIBCLOUD-183)
      [Michal Galet, Sengor Kusturica]

    - Allow user to pass mode argument to SSHClient.put method and default it to
      'w'. (LIBCLOUD-188)
      [Jay Doane]

    - Modify SSHKeyDeployment step to use append mode so it doesn't overwrite
      existing entries in .ssh/authorized_keys. (LIBCLOUD-187)
      [Jay Doane]

    - Modify ParamikoSSHClient to connect to the SSH agent and automatically
      look for private keys in ~/.ssh if the 'auth' and 'ssh_key' argument
      is not specified when calling deploy_node. (LIBCLOUD-182)
      [Tomaz Muraus]

    - Add ex_rescue and ex_unrescue method to OpenStack 1.1 driver.
      (LIBCLOUD-193)
      [Shawn Smith]

    - Include 'password' in the node extra dictionary when calling deploy_node
      if the password auth is used.
      [Juan Carlos Moreno]

    - Add FileDeployment class to libcloud.compute.deployment module. This can
      be used as a replacement for ex_files argument if the provider supports
      deployment functionality. (LIBCLOUD-190)
      [Jay Doane]

  *) Storage

    - Large object upload support for CloudFiles driver
    - Add CLOUDFILES_SWIFT driver to connect to OpenStack Swift
      [Dmitry Russkikh, Roman Bogorodskiy]

  *) Load-balancer

    - Don't include 'body_regex' attribute in the Rackspace driver body if
      body_regex is None or empty string. (LIBCLOUD-186)
      [Bill Woodward]

    - Don't split Load balancer IP addresses into public and private list.
      Include all the addresses in the 'virtualIps' variable in the extra
      dictionary (Rackspace driver). (LIBCLOUD-191)
      [Adam Pickeral]

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]

    - Fix a bug with handling compressed responses in the Linode driver.
      (LIBCLOUD-158)
      [Ben Agricola]

  *) 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. (LIBCLOUD-164)
      [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.
