                                   -*- coding: utf-8 -*-

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 ; LIBCLOUD-204
      - IBM SCE,
      - CloudStack
      - CloudSigma
      - OpenNebula
      - VpsNet
      - EC2
      - ElasticStack
      - vCloud
      - OpSource
      - Slicehost
      - Joyent
      [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 ; LIBCLOUD-204
      - Atmos
      - Google Storage
      - Amazon S3
      [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 ; LIBCLOUD-184
        - 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
      [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.
