                                   -*- coding: utf-8 -*-

Changes with Apache Libcloud in development

 *) General

    - By default read pricing data from ~/.libcloud/pricing.json if this file
      exists. If it doesn't it uses old behavior and falls back to pricing file
      bundled with a libcloud release.
      [Tomaz Muraus]

    - Add libcloud.pricing.download_pricing_file function for downloading and
      updating the pricing file.
      [Tomaz Muraus]

 *) Compute

    - Modify ElasticHosts drive to store drive UUID in 'extra' field.
      (LIBCLOUD-357)
      [Bob Thompson]

    - Add support for volume related functions to OpenNebula driver.
      (LIBCLOUD-354)
      [Emanuele Rocca]

    - Add methods for managing store volumes to the OpenStack driver.
      (LIBCLOUD-353)
      [Bernard Kerckenaere]

    - Add new driver for Google Compute Engine (LIBCLOUD-266)
      [Rick Wright]

    - Add Ubuntu Linux 12.04 image to ElasticHosts driver. (LIBCLOUD-364)
      [Bob Thompson]

    - Fix create_node "features" metadata and update affected drivers.
      (LIBCLOUD-367)
      [John Carr]

  *) 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]

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.
