﻿Changelog
=========

Changes in Apache Libcloud v2.8.2
---------------------------------

Compute
~~~~~~~

- Add support for Ed25519 private keys for ``deploy_node()`` functionality
  when using paramiko >= 2.2.0.
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- Fix ``deploy_node()`` so it correctly propagates an exception is a private key
  which is used is password protected, but no password is specified.

  Previously it incorrectly tried to retry on such exception. This means the
  exception would only bubble up after all the retry attempts have been
  exhausted.
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- Allow user to specify password for encrypted keys by passing
  ``ssh_key_password`` argument to the ``deploy_node()`` method.

  Previously they
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- Fix ``deploy_node()`` so it correctly propagates an exception if invalid
  or unsupported private key is used.

  Previously it incorrectly tried to retry on such exception. This means the
  exception would only bubble up after all the retry attempts have been
  exhausted.
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- Fix ``deploy_node()`` method so we don't retry on fatal
  ``SSHCommandTimeoutError`` exception (exception which is thrown when a
  command which is running on remote host times out).
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- Add new ``timeout`` argument to ``ScriptDeployment`` and
  ``ScriptFileDeployment`` class constructor.

  With this argument, user can specify an optional run timeout for that
  deployment step run.
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- Add new ``stdout`` and ``stderr`` attribute to ``SSHCommandTimeoutError``
  class.

  Those attributes contain value of stdout and stderr produced so far.
  (GITHUB-1445)
  [Tomaz Muraus - @Kami]

- [OpenStack] Fix auto assignment of volume device when using device name
  ``auto`` in the ``attach_volume`` method.
  (GITHUB-1444)
  [Joshua Hesketh - @jhesketh]

Changes in Apache Libcloud v2.8.1
---------------------------------

Common
~~~~~~

- Fix ``LIBCLOUD_DEBUG_PRETTY_PRINT_RESPONSE`` functionality and make sure it
  works correctly under Python 3 when ``response.read()`` function returns
  unicode and not bytes.

  (GITHUB-1430)
  [Tomaz Muraus]

Compute
~~~~~~~

- [GCE] Fix ``list_nodes()`` method so it correctly handles pagination
  and returns all the nodes if there are more than 500 nodes available
  in total.

  Previously, only first 500 nodes were returned.

  Reported by @TheSushiChef.
  (GITHUB-1409, GITHUB-1360)
  [Tomaz Muraus]

- Fix some incorrect type annotations in the base compute API.

  Reported by @dpeschman.
  (GITHUB-1413)
  [Tomaz Muraus]

- [OpenStack] Fix error with getting node id in ``_to_floating_ip`` method
  when region is not called ``nova``.
  (GITHUB-1411, GITHUB-1412)
  [Miguel Caballer - @micafer]

- [EC2] Fix ``ex_userdata`` keyword argument in the ``create_node()`` method
  being ignored / not working correctly.

  NOTE: This regression has been inadvertently introduced in v2.8.0.
  (GITHUB-1426)
  [Dan Chaffelson - @Chaffelson]

- [EC2] Update ``create_volume`` method to automatically select first available
  availability zone if one is not explicitly provided via ``location`` argument.
  [Tomaz Muraus]

Storage
~~~~~~~

- [AWS S3] Fix upload object code so uploaded data MD5 checksum check is not
  performed at the end of the upload when AWS KMS server side encryption is
  used.

  If AWS KMS server side object encryption is used, ETag header value in the
  response doesn't contain data MD5 digest so we can't perform a checksum
  check.

  Reported by Jonathan Harden - @jfharden.
  (GITHUB-1401, GITHUB-1406)
  [Tomaz Muraus - @Kami]

- [Google Storage] Fix a bug when uploading an object would fail and result
  in 401 "invalid signature" error when object mime type contained mixed
  casing and when S3 Interoperability authentication method was used.

  Reported by Will Abson - wabson.
  (GITHUB-1417, GITHUB-1418)
  [Tomaz Muraus]

- Fix ``upload_object_via_stream`` method so "Illegal seek" errors which
  can arise when calculating iterator content hash are ignored. Those errors
  likely indicate that the underlying file handle / iterator is a pipe which
  doesn't support seek and that the error is not fatal and we should still
  proceed.

  Reported by Per Buer - @perbu.

  (GITHUB-1424, GITHUB-1427)
  [Tomaz Muraus]

DNS
~~~

- [Gandi Live] Update the driver and make sure it matches the latest service /
  API updates.
  (GITHUB-1416)
  [Ryan Lee - @zepheiryan]

- [CloudFlare] Fix ``export_zone_to_bind_format`` method.

  Previously it threw an exception, because ``record.extra`` dictionary
  didn't contain ``priority`` key.

  Reported by James Montgomery - @gh-jamesmontgomery.
  (GITHUB-1428, GITHUB-1429)
  [Tomaz Muraus]

Changes in Apache Libcloud v2.8.0
---------------------------------

Common
------

- Fix a regression with ``get_driver()`` method not working if ``provider``
  argument value was a string (e.g. using ``get_driver('openstack')``
  instead of ``get_driver(Provider.OPENSTACK)``).

  Only officially supported and recommended approach still is to use
  ``Provider.FOO`` enum type constant, but since the string notation was
  unofficially supported in the past, we will still support it until the next
  major release.

  Reported by @dpeschman.
  (GITHUB-1391, GITHUB-1390)
  [Tomaz Muraus]

- Include ``py.typed`` data file to signal that this package contains type
  annotations / hints.

  NOTE: At the moment, type annotations are only available for the base
  compute API.
  [Tomaz Muraus]

- Fix universal wheel METADATA and ensure conditional dependencies
  (backports.ssl_match_hostname, typing, enum34) are handled correctly.

  Reported by Adam Terrey (@arterrey).
  (GITHUB-1392, GITHUB-1393)
  [Tomaz Muraus]

Compute
-------

- [DigitalOcean] Fix ``attach_volume`` and ``detach_volume`` methods.
  Previously those two methods incorrectly passed volume id instead of
  volume name to the API. (GITHUB-1380)
  [@mpempekos]

- [GCE] Add ``ex_disk_size`` argument to the ``create_node`` method.
  (GITHUB-1386, GITHUB-1388)
  [Peter Yu - @yukw777]

- [VMware vCloud] Various improvements, fixes and additions to the driver.
  (GITHUB-1373)
  [OpenText Corporation]

- Update ``deploy_node()`` method so it now only passes non-deploy node
  keyword arguments + ``auth`` argument to the underlying ``create_node()``
  method. Previously it also passed ``deploy_node()`` specific arguments
  such as ``deploy``, ``ssh_username``, ``max_tries``, etc. to it.

  Because of that, a lot of the compute drivers which support deploy
  functionality needed to use ``**kwargs`` in ``create_node()`` method
  signature which made code hard to read and error prone.

  Also update various affected drivers to explicitly declare supported
  arguments in the  ``create_node()`` method signature (Dummy, Abiquo,
  Joyent, Bluebox, OpenStack, Gandy, VCL, vCloud, CloudStack, GoGrid
  HostVirtual, CloudSigma, ElasticStack, RimuHosting, SoftLayer, Voxel,
  Vpsnet, KTUcloud, BrightBox, ECP, OpenNebula, UPcloud).

  As part of this change, also various issues with invalid argument names
  were identified and fixed.
  (GITHUB-1389)
  [Tomaz Muraus]

- Add MyPy type annotations for ``create_node()`` and ``deploy_node()``
  method.
  (GITHUB-1389)
  [Tomaz Muraus]

- [GCE] Update ``deploy_node()`` method so it complies with the base compute
  API and accepts ``deploy`` argument.

  This method now also takes all the same keyword arguments which original
  ``create_node()`` takes.
  (GITHUB-1387)
  [Peter Yu - @yukw777, Tomaz Muraus]

- [Common] To make debugging and troubleshooting easier, add ``__repr__``
  and ``__str__`` method to the ``ScriptDeployment`` class.
  [Tomaz Muraus]

- [Common] Add type annotations / hints for rest of the base compute API
  classes and methods.
  [Tomaz Muraus]

Storage
-------

- [AWS S3] Make sure ``host`` driver constructor argument has priority
  over ``region`` argument.

  This means if you specify ``host`` and ``region`` argument, host won't be
  inferred from the region, but ``host`` argument will be used for the actual
  connection host value.
  (GITHUB-1384, GITHUB-1383)
  [@gluap]

Changes in Apache Libcloud v2.7.0
---------------------------------

General
-------

- Test code with Python 3.8 and advertise that we also support Python 3.8.
  (GITHUB-1371, GITHUB-1374)
  [Tomaz Muraus]

Common
------

- [OpenStack] Fix OpenStack project scoped token authentication. The driver
  constructors now accept ``ex_tenant_domain_id`` argument which tells
  authentication service which domain id to use for the scoped authentication
  token. (GITHUB-1367)
  [kshtsk]

Compute
-------

- Introduce type annotations for the base compute API methods. This means you
  can now leverage mypy to type check (with some limitations) your code which
  utilizes Libcloud compute API standard API methods.

  Keep in mind that at this point, type annotations are only available for
  standard compute API methods.
  (GITHUB-1306)
  [Tomaz Muraus]

- [Azure ARM] Fix ``attach_volume`` method and allow maximum of 64 disks to be
  added when LUN is not specified. Previously there was a bug and only a
  maximum of 63 disks could be added.
  (GITHUB-1372)
  [Palash Gandhi - @palashgandhi]

- New ``start_node`` and ``stop_node`` methods have been added to the base
  Libcloud compute API NodeDriver class.

  A lot of the existing compute drivers already implemented that functionality
  via extension methods (``ex_start_node``, ``ex_stop_node``) so it was decided
  to promote those methods to be part of the standard Libcloud compute API and
  update all the affected drivers.

  For backward compatibility reasons, existing ``ex_start`` and ``ex_stop_node``
  methods will still work until a next major release.

  (GITHUB-1375, GITHUB-1364)
  [Tomaz Muraus, @emakarov]

 - [GCE] Add new ``ex_set_volume_labels`` method for managing volume labels to
   the driver.
   (GITHUB-1376)
   [Rob Zimmerman - @zimventures]

- [EC2] Add support for new ``inf1.*`` instance types.
  [Tomaz Muraus]

Storage
~~~~~~~

- [S3] Update S3 driver so a single driver class can be used for different
  regions.

  Region which is used is controled by the ``region`` driver constructor
  argument.

  Previously, that driver followed "driver class per region" approach. That
  approach will be deprecated and removed in a future release.

  For more information, please refer to the Upgrade Notes documentation section.
  (GITHUB-1371)
  [Tomaz Muras]

- [S3] Add missing ``eu-north-1`` region to the S3 driver. (GITHUB-1370)
  [michaelsembwever]

- [S3] Add missing regions (eu-west-3, ap-northeast-3, me-south-1) to the driver.
  (GITHUB-1371)
  [Tomaz Muras]

- [S3] Update the driver to throw more user-friendly error message if user is
  using driver for a region X, but trying to upload / download object to / from
  a region Y. (GITHUB-1371)
  [Tomaz Muras]

Changes in Apache Libcloud 2.6.1
--------------------------------

Compute
~~~~~~~

- [Packet] Update ``list_sizes`` method so it accepts ``ex_project_id`` argument
  and works with project API tokens. (GITHUB-1351) [Dimitris Moraitis - @d-mo]

- [GCE] Fix ``GCEProject.set_common_instance_metadata`` and
  ``GCEproject.set_usage_export_bucket`` method. (GITHUB-1354)
  [Aitor Zabala - @aitorzabala, Tomaz Muraus - @Kami]

- [GCE] Add ``sync`` / ``ex_sync`` argument to the ``ex_stop_node``,
  ``ex_start_node`` and ``destroy_node`` method. When this argument is set to
  ``False``, method will return immediately without waiting polling and waiting
  for a long running API operation to finish before returning. For backward
  compatibility reasons, it defaults to ``True``. (GITHUB-1357)
  [Rob Zimmerman - zimventures]

- [GCE] Update list of image projects and add new ``centos-8`` and
  ``debian-10`` based images. (GITHUB-1358)
  [Christopher Lambert - XN137]

- [OpenStack v2] Add new ``ex_image_ref`` argument to the ``create_volume``
  method. This way bootable volumes can be created from specific images.
  (GITHUB-1363)
  [Rick van de Loo]

- [OpenStack v2] Update ``create_node_method`` and allow users to create
  nodes from bootable volumes without specifying ``image`` argument.
  (GITHUB-1362)
  [Rick van de Loo]

- [AWS] Re-generate and update available EC2 instance sizes and pricing data.
  [Tomaz Muraus]

Storage
~~~~~~~

- [Common, S3, GCS] Reuse TCP connections when uploading files (GITHUB-1353)
  [Quentin Pradet]

Load Balancer
~~~~~~~~~~~~~

- [AWS] Implement various create methods in the driver. (GITHUB-1349)
  [Anton Kozyrev - @Irvan]

Changes in Apache Libcloud 2.6.0
--------------------------------

General
~~~~~~~

- [OpenStack] Update OpenStack identity driver so a custom project can be
  selected using ``domain_name`` keyword argument. Previously, that wasn't
  possible and the first project which was returned by the API was always
  selected. (GITHUB-1293)
  [Miguel Caballer - @micafer]

- Add new ``extra`` attribute to the base ``NodeLocation`` class. (GITHUB-1282)
  [Dimitris Moraitis - @d-mo]

- Remove various code patterns which were in place for supporting multiple
  Python versions, including 2.5 and 2.6. Libcloud hasn't supported Python <
  2.7 for a while now, so we can remove that code. (GITHUB-1307)
  [Tomaz Muraus]

- Also run pylint on ``libcloud/compute/`` directory and fix various pylint
  violations. (GITHUB-1308)
  [Tomaz Muraus]

- [OpenStack] Remove unused variable in parse_error (GITHUB-1260)
  [Rick van de Loo]

- Add support for HTTPS proxies and fix ``driver.set_http_proxy()`` method.

  HTTPS proxy can be set up by either setting ``https_proxy`` / ``http_proxy``
  environment variable or by using
  ``driver.connection.connection.set_http_proxy`` method.

  For more information, please refer to the documentation -
  https://libcloud.readthedocs.io/en/latest/other/using-http-proxy.html
  (GITHUB-1314, GITHUB-1324)
  [Jim Liu - @hldh214, Tomaz Muraus]

- Fix paramiko debug logging which didn't work when using ``LIBCLOUD_DEBUG``
  environment variable. (GITHUB-1315)
  [Tomaz Muraaus]

- Update paramiko SSH deployment client so it automatically tries to convert
  private keys in PEM format with a header which paramiko doesn't recognize
  into a format which paramiko recognizes.

  NOTE: Paramiko only supports keys in PEM format. This means keys which start
  with "----BEGIN <TYPE> PRIVATE KEY-----". Keys in PKCS#8 and newer OpenSSH
  format are not supported.

  For more information, see https://libcloud.readthedocs.io/en/latest/compute/deployment.html#supported-private-ssh-key-types
  (GITHUB-1314)

- Update Paramiko SSH client to throw a more user-friendly error if a private
  key file in an unsupported format is used. (GITHUB-1314)
  [Tomaz Muraus]

- Fix HTTP(s) proxy support in the OpenStack drivers. (GITHUB-1324)
  [Gabe Van Engel - @gvengel]

- Fix logging connection class so it also works when data type is ``bytearray``
  or ``bytes``. (GITHUB-1339)
  [Tomaz Muraus]

Compute
~~~~~~~

- [Google Compute Engine] Fix the driver so ``list_nodes()`` method doesn't
  throw if there is a node in a ``SUSPENDED`` state.

  Also update the code so it doesn't crash if an unknown node state which is
  not defined locally is returned by the API when listing nodes. Such states
  are now mapped to ``UNKNOWN``. (GITHUB-1296, LIBCLOUD-1045)

  Reported by rafa alistair.
  [Tomaz Muraus]

- [OpenStack] Fix a bug with retrieving floating IP address when a
  ``device_owner`` of a port is ``compute:None``. (GITHUB-1295)
  [Miguel Caballer - @micafer]
- [Packet] Add various new extension methods to Packet.net driver
  (``ex_reinstall_node``, ``ex_list_projects``,
  ``ex_get_bgp_config_for_project``, ``ex_get_bgp_config``,
  ``ex_list_nodes_for_project``, etc.). (GITHUB-1282)
  [Dimitris Moraitis - @d-mo]

- [Maxihost] Add new compute driver for Maxihost provider
  (https://www.maxihost.com/). (GITHUB-1298)
  [Spyros Tzavaras - @mpempekos]

- [Azure ARM] Add various improvements to the Azure ARM driver:
  - Add functionality to resize a volume in Azure
  - Add functionality to update the network profile of a node
  - Add functionality to update a network interface's properties
  - Add functionality to check IP address availability (GITHUB-1244)
  [Palash Gandhi - @palashgandhi]

- [EC2] Allow user to pass arbitrary filters to ``list_volumes`` method by
  passing a dictionary with filters as ``ex_filters`` method argument value.
  (GITHUB-1300)
  [Palash Gandhi - @palashgandhi]

- [GCE] Add new ``ex_instancegroupmanager_set_autohealingpolicies`` method to
  the GCE driver.

  This method allows user to set the auto healing policies (health check to
  use and initial delay) on GCE instance group. (GITHUB-1286)
  [Kenta Morris - @kentamorris]

- [GCE] Update GCE driver to include new operating system images such as
  Ubuntu 18.04, RHEL 8, etc. (GITHUB-1304)
  [Christopher Lambert - @XN137]

- [GCE] Add new ``ex_resize_volume`` method to the driver. (GITHUB-1301)
  [Palash Gandhi - @palashgandhi]

- [OpenStack] Add various router management methods to the OpenStack
  driver. (GITHUB-1281)
  [Miguel Caballer - @micafer]

- [OpenStack] Fix ``ex_resize`` method. (GITHUB-1311)
  [Miguel Caballer - @micafer]

- [OpenStack] For consistency, rename ``ex_resize`` method to
  ``ex_resize_node``. For backward compatibility reasons, leave ``ex_resize``
  alias in place.
  [Tomaz Muraus]

- [Gridscale] Add new driver for Gridscale provider (https://gridscale.io).
  (GITHUB-1305, GITHUB-1315)
  [Sydney Weber - @PrinceSydney]

- [Oneandone] Update Oneandone driver to accomodate latest changes to the API.
  This means removing deprecated ``ex_remove_server_firewall_policy`` method
  and replacing ``port_from`` and ``port_to`` argument on the firewall policy
  with a single ``port`` attribute.
  (GITHUB-1230)
  [Amel Ajdinovic - @aajdinov]

- [DigitalOcean] Update ``list_locations`` method in the DigitalOcean driver
  to only returns regions which are available by default. If you want to list
  all the regions, you need to pass ``ex_available=False`` argument to the
  method. (GITHUB-1001)
  [Markos Gogoulos]

- [EC2] Add new ``ex_modify_subnet_attribute`` method to the EC2 driver.
  (GITHUB-1205)
  [Dan Hunsaker - @danhunsaker]

- [Azure ARM] Add ``ex_delete_public_ip`` method to the Azure ARM driver.
  (GITHUB-1318)
  [Reza Shahriari - redha1419]

- [EC2] Update EC2 driver to throw a more user-friendly exception if a user /
  developer tries to provide an invalid value type for an item value in the
  request ``params`` dictionary.

  Request parameters are sent via query parameters and not via request body,
  as such, only string values are supported. (GITHUB-1329, GITHUB-1321)

  Reported by James Bednell.
  [Tomaz Muraus]

- [OpenStack] Add new ``ex_remove_security_group_from_node`` method.
  (GITHUB-1331)
  [Miguel Caballer - @micafer]

- [OpenStack] Fix broken ``ex_update_port`` method.
  (GITHUB-1320)
  [Miguel Caballer - @micafer]

- [Softlayer] Fix a bug with driver incorrectly handling the value of
  ``ex_hourly`` argument in the ``create_node()`` method which caused nodes
  to always be created with hourly billing, even if this argument was set to
  ``False``. (GITHUB-1334, GITHUB-1335)
  [@r2ronoha]

- [GCE] Add optional ``cpuPlatform`` and ``minCpuPlatform`` attributes to the
  ``node.extra`` dictionary. (GITHUB-1342, GITHUB-1343)
  [@yairshemla]

Storage
~~~~~~~

- [Azure Blobs] Enable the Azure storage driver to be used with the Azurite
  Storage Emulator and Azure Blob Storage on IoT Edge.
  (LIBCLOUD-1037, GITHUB-1278)
  [Clemens Wolff - @c-w]

- [Azure Blobs] Fix a bug with Azure storage driver works when used against a
  storage account that was created using ``kind=BlobStrage``. This includes
  updating the minimum API version used / supported by the storage driver from
  ``2012-02-12`` to ``2014-02-14``. (LIBCLOUD-851, GITHUB-1202, GITHUB-1294)
  [Clemens Wolff - @c-w, Davis Kirkendall - @daviskirk]

- [Azure Blobs] Increase the maximum size of block blobs that can be created
  to 100 MB. This includes updating the minimum API version used / supported
  by the storage driver from ``2014-02-14`` to ``2016-05-31``. (GITHUB-1340)
  [Clemens Wolff - @c-w]

- [Azure Blobs] Set the minimum required version of requests to ``2.5.0`` since
  requests ``2.4.0`` and earlier exhibit XML parsing errors of Azure Storage
  responses. (GITHUB-1325, GITHUB-1322)
  [Clemens Wolff - @c-w]

- [Azure Blobs] Detect bad version of requests that leads to errors in parsing
  Azure Storage responses. This scenario is known to happen on RHEL 7.6 when
  requests was installed via yum. (GITHUB-1332, GITHUB-1322)
  [Clemens Wolff - @c-w]

- [Common, CloudFiles] Fix ``upload_object_via_stream`` and ensure we start
  from the beginning when calculating hash for the provided iterator. This way
  we avoid hash mismatch errors in scenario where provided iterator is already
  iterated / seeked upon before calculating the hash. (GITHUB-1326)
  [Gabe Van Engel - @gvengel, Tomaz Muraus]

- [Backblaze B2] Fix a bug with driver not working correctly due to a
  regression which was inadvertently introduced in one of the previous
  releases. (GITHUB-1338, GITHUB-1339)

  Reported by Shawn Nock - @nocko.
  [Tomaz Muraus]

- [Backblaze B2] Fix ``upload_object_via_stream`` method. (GITHUB-1339)
  [Tomaz Muraus]

DNS
~~~

- [Cloudflare] Re-write the Cloudflare DNS driver to use Cloudflare API v4.
  (LIBCLOUD-1001, LIBCLOUD-994, GITHUB-1292)
  [Clemens Wolff - @c-w]

- [Gandi LiveDNS] Add new driver for Gandi LiveDNS service. (GITHUB-1323)
  [Ryan Lee - @zepheiryan]

- [PowerDNS] Update driver so it works with API v3 and v4. #1328
  [@biggosh]

Changes in Apache Libcloud 2.5.0
--------------------------------

General
~~~~~~~

- [NTT CIS] Add loadbalancer and compute drivers for NTT-CIS, rename
  dimensiondata modules to NTT-CIS. (GITHUB-1250)
  [Mitch Raful]

- [NTT CIS] Fix loadbalancer docs. (GITHUB-1270)
  [Mitch Raful]

- Use assertIsNone instead of assertEqual with None in tests (GITHUB-1264)
  [Ken Dreyer]

- Updating command line arguments to current version in Azure examples.
  (GITHUB-1273)
  [mitar]

- [GCE, SoftLayer] Update GCE and Softlayer drivers to utilize crypto
  primitives from the ``cryptography`` library instead of deprecated and
  unmaintained ``PyCrypto`` library.

  (GITHUB-1280)
  [Ryan Petrello]

- Fix ``libcloud.enable_debug`` function so it doesn't leak open file handle
  and closes the open file when the program exits when a debug mode is used.
  [Tomaz Muraus]

* Update various drivers (CloudFiles, NTT CIS etc.) so they don't leak open
  file handles in some situations.
  [Tomaz Muraus]

Common
~~~~~~

- [OpenStack] Handle missing user enabled attribute (GITHUB-1261)
  [Ken Dreyer]

- [Google Cloud Storage] Handle Interoperability access keys of more than 20
  characters. (GITHUB-1272)
  [Yoan Tournade]

Compute
~~~~~~~

- [OpenStack] Implement OpenStack_1_1_NodeDriver ex_get_snapshot (GITHUB-1257)
  [Rick van de Loo]

- [OpenStack] Pagination in various OpenStack_2_NodeDriver methods (GITHUB-1263)
  [Rick van de Loo]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_create_subnet (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_delete_subnet (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver list_volumes (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_get_volume (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver create_volume (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver destroy_volume (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_list_snapshots (LIBCLOUD-874,
  GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver create_volume_snapshot
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver destroy_volume_snapshot
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_list_security_groups
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_create_security_group
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_delete_security_group
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_create_security_group_rule
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_delete_security_group_rule
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Implement OpenStack_2_NodeDriver ex_list_floating_ip_pools
  (LIBCLOUD-874, GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Fix parse_error if 'code' not in API response message
  (GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Adapt _to_port function to work with old OpenStack versions
  (GITHUB-1242)
  [Miguel Caballer]

- [OpenStack] Use SUSPENDED NodeState in OpenStack driver (GITHUB-1269)
  [Miguel Caballer]

- [UpCloud] Update documentation for UpCloud driver (LIBCLOUD-1026,
  GITHUB-1259)
  [Ilari Mäkelä]

- [NTT CIS] Fix indenting in ex_initiate_drs_failover docstring (GITHUB-1271)
  [Rick van de Loo]

- [NTT CIS] Change endpoint 'canada' to 'ca' in libcloud/common/nttcis.py
  (GITHUB-1270)
  [Mitch Raful]

- [OpenStack] Fix ``detach_volume`` method so it works with v2 volumes.
  (GITHUB-1267)
  [Rick van de Loo]

- [CloudSigma] Fix CloudSigma driver so it correctly handles subscription
  objects without the ``start_time`` and / or ``end_time`` attribute.
  (GITHUB-1284, LIBCLOUD-1040)
  [aki-k, Tomaz Muraus]

Storage
~~~~~~~

- [Azure] Fix ``upload_object_via_stream`` method so it also works with
  iterators which don't implement ``seek()`` method. If the iterator doesn't
  support seek, entire iterator content will be buffered in memory.
  (LIBCLOUD-1043, GITHUB-1287)
  [Clemens Wolff]
- [CloudFiles] Fix ``download_object_as_stream`` method in the CloudFiles
  driver. This regression / bug was inadvertently introduced when migrating
  code to ``requests``.
  (LIBCLOUD-1039, GITHUB-1283)
  [Matt Seymour]
- [CloudFiles] Fix a bug with ``ChunkStreamReader`` class and make sure file
  descriptor is also closed if the iterator isn't fully exhausted or if the
  iterator is never read from.

  NOTE: This potential open file descriptor leakage only affected code which
  utilized ``ex_multipart_upload_object`` method.
  [Tomaz Muraus]

Container
~~~~~~~~~

- [Docker] Improve docstring for RegistryClient (GITHUB-1254)
  [Ken Dreyer]

DNS
~~~

- Add new driver for RcodeZero DNS (GITHUB-1256, LIBCLOUD-1025)
  [MikeAT]
- [DigitalOcean] Update DigitalOcean driver so it supports ``ttl`` attribute for
  ``Record`` objects. This includes support for specifying a record ttl via
  ``extra['ttl']`` attribute when creating and updating a record. (GITHUB-1252
  LIBCLOUD-1022) [Kevin Roy]

Storage
~~~~~~~

- Adds missing docs for param ex_prefix & adds to DummyStore. Add ex_prefix
  kwarg to the `list_container_objects` methods in the base and dummy classes.
  (GITHUB-1275)
  [RichardARPANET]

Changes in Apache Libcloud 2.4.0
--------------------------------

- Refuse installation with Python 2.6 and Python 3.3 (support was
  already dropped in Libcloud 2.3.0)

- Support Python 3.7 (GITHUB-1227, GITHUB-1236)
  [Andreas Hasenack, Andrew Starr-Bochicchio, Quentin Pradet]

- Cleanup various Python files
  (GITHUB-1182, GITHUB-1183, GITHUB-1185, GITHUB-1186, GITHUB-1187, GITHUB-1188)
  [Rémy Léone]

- Allow running tests with http_proxy set (GITHUB-1236)
  [Andreas Hasenack]

Common
~~~~~~

- [OpenStack] Document openstack_connection_kwargs method (GITHUB-1219)
  [Ken Dreyer]

- [OpenStack] Handle missing user email in OpenStackIdentityUser (GITHUB-1249)
  [Ken Dreyer]

Compute
~~~~~~~

- [ARM] Support OS disk size definition on node creation (GITHUB-1196)
  [Vojta Bartoš]

- [Digital Ocean] Support floating IPs (GITHUB-1177)
  [Rick van de Loo]

- [Digital Ocean] Support attach/detach for floating IPs (GITHUB-1191)
  [Rick van de Loo]

- [Digital Ocean] Add ex_get_node_details (GITHUB-1221)
  [Rick van de Loo]

- [Digital Ocean] Add tags extra attribute to create_node (GITHUB-1212)
  [Nikita Chebykin]

- [Dimension Data] Fix IndexError in list_images (GITHUB-1171)
  [Adam Friedman]

- [EC2] Add AWS eu-west-3 (Paris) region (GITHUB-1175)
  [Anthony Monthe]

- [EC2] Add description to ex_authorize_security_group_ingress (GITHUB-1122)
  [Arturo Noha]

- [EC2] Added script to automatically get EC2 instance sizes (GITHUB-1211)
  [Anthony Monthe, Quentin Pradet]

- [EC2] Update instance sizes (GITHUB-1238)
  [Ward Vandewege]

- [EC2] Accept tags when create a snapshot (LIBCLOUD-1014, GITHUB-1240)
  [Rafael Gonçalves]

- [GCE] Expand Firewall options coverage (LIBCLOUD-960, GITHUB-1144)
  [maxlip]

- [GCE] Expand network and subnetwork options coverage (LIBCLOUD-985,
  GITHUB-1181)
  [maxlip]

- [GCE] Extend ex_create_address to allow internal ip creation (GITHUB-1174)
  [Jeremy Solarz]

- [GCE] Allow shared VPC in managed instance group creation (GITHUB-1179)
  [Boris Chazalet]

- [GCE] Support disk_size parameter for boot disk when creating instance
  (LIBCLOUD-973, GITHUB-1162)
  [Rahul Paigavan]

- [GCE] Update public image projects list (LIBCLOUD-961, GITHUB-1143)
  [Sean Marlow]

- [GCE] Fix _find_zone_or_region for >500 instances (GITHUB-1203)
  [Léo Ferlin-Sutton]

- [GCE] Allow routing_mode=None in ex_create_network (GITHUB-1217)
  [Daniel Hunsaker]

- [OpenStack] Implement Glance Image API v2 (GITHUB-1151)
  [Rick van de Loo]

- [OpenStack] Fix spelling in ex_files description (GITHUB-1197)
  [Ken Dreyer]

- [OpenStack v2] Allow listing image members (GITHUB-1172)
  [Rick van de Loo]

- [OpenStack v2] Allow creating and accepting image members (GITHUB-1176)
  [Rick van de Loo]

- [OpenStack v2] Fix image members methods (GITHUB-1190)
  [Rick van de Loo]

- [OpenStack] Fix API doc for delete_floating_ip (GITHUB-1218)
  [Ken Dreyer]

- [OpenStack] Implement port attaching/detaching (GITHUB-1225)
  [Rick van de Loo]

- [OpenStack] Add methods for getting and creating ports (GITHUB-1226)
  [Alexander Grooff]

- [OpenStack] Add get_user method (GITHUB-1216)
  [Ken Dreyer]

- [OpenStack] Add ex_list_subnets to OpenStack_2_NodeDriver (GITHUB-1215,
  LIBCLOUD-604)
  [Miguel Caballer]

- [OpenStack] The OpenStack_2_NodeDriver uses two connections (GITHUB-1215,
  LIBCLOUD-997)
  [Miguel Caballer]

- [OpenStack] The OpenStack_2_NodeDriver /v2.0/networks instead of /os-networks
  (GITHUB-1215, LIBCLOUD-998)
  [Miguel Caballer]

- [Scaleway] New Scaleway driver (GITHUB-1121, GITHUB-1220)
  [Daniel Hunsaker, Nándor István Krácser, Rémy Léone]

- [Scaleway] Update Scaleway default API host (GITHUB-1239)
  [Rémy Léone]

DNS
~~~

- [Google Cloud DNS] Document driver instantiation (GITHUB-1198)
  [Gareth McFarlane]

Storage
~~~~~~~

- Update docstring for storage provider class (GITHUB-1201)
  [Clemens Wolff]

- [Azure Blob Storage] Allow filtering lists by prefix (LIBCLOUD-986,
  GITHUB-1193)
  [Joshua Hawkinson]

- [Azure Blob Storage] Update driver documentation (GITHUB-1208)
  [Clemens Wolff]

- [Azure Blob Storage] Fix upload/download streams (GITHUB-1231)
  [Michael Perel]

- [Azure Blob Storage] Fix PageBlob headers (GITHUB-1237)
  [Andreas Hasenack]

- [S3] Guess s3 upload content type (LIBCLOUD-958, GITHUB-1195)
  [Iuri de Silvio]

- [S3] Add Amazon S3 (cn-northwest-1) Storage Driver (GITHUB-1241)
  [@yangkang55]

Other
~~~~~

- Fixed spelling in 2.0 changes documentation (GITHUB-1228)
  [Jimmy Casey]

Changes in Apache Libcloud 2.3.0
--------------------------------

- Drop support for Python 2.6 and Python 3.3
  They're no longer supported, and the Python ecosystem is starting to
  drop support: two of our test dependencies no longer support them.
  [Quentin Pradet]

- Made pytest-runner optional (GITHUB-1167)
  [Vlad Glagolev]

Common
~~~~~~

- Improve warning when CA_CERTS_PATH is incorrectly passed as a list
  (GITHUB-1118)
  [Quentin Pradet]

- Cleaned up and corrected third-party drivers documentation (GITHUB-1148)
  [Daniel Hunsaker]

- Modernized a few Python examples (GITHUB-1164)
  [Batuhan Osman Taşkaya]

- [OpenStack] Authentify with updated Identity API
  (LIBCLOUD-965, GITHUB-1145)
  [Miguel Caballer]

Compute
~~~~~~~

- Fix "wait_until_running() method so it also works correctly and doesn't
  append "None" to the addresses list if node has no IP address.
  (GITHUB-1156, LIBCLOUD-971)
  [Tobias Paepke]

- [ARM] Fix checking for "location is None" in several functions (LIBCLOUD-926,
  GITHUB-1098)
  [Sameh Elsharkawy]

- [ARM] Fix error when using SSH key auth with Python 3 (GITHUB-1098)
  [Sameh Elsharkawy]

- [ARM] Fix API call on powerOff, understand PAUSED state (GITHUB-1003)
  [Markos Gogoulos]

- [ARM] Delete VHDs more reliably in destroy_node(), raise exception on
  unhandled errors (GITHUB-1120)
  [Lucas Di Pentima]

- [ARM] Fix api version used to list and delete NICs (GITHUB-1128)
  [Peter Amstutz]

- [ARM] Allow faster list_nodes() with ex_fetch_power_state=False
  (GITHUB-1126)
  [Peter Amstutz, Lucas Di Pentima]

- [ARM] Fix delete_old_vhd (GITHUB-1137)
  [Peter Amstutz, Lucas Di Pentima]

- [ARM] Limit number of retries in destroy_node (GITHUB-1134)
  [Peter Amstutz, Lucas Di Pentima]

- [ARM] Fix Retry-After header handling (GITHUB-1139)
  [Lucas Di Pentima]

- [CloudStack] Handle NICs without addresses (GITHUB-1141)
  [Pierre-Yves Ritschard]

- [CloudStack] Add change size and restore (LIBCLOUD-975, GITHUB-1166)
  [Mauro Murari]

- [Digital Ocean] Add ex_enable_ipv6 in DigitalOcean_v2 driver
  (GITHUB-1130)
  [Rick van de Loo]

- [Digital Ocean] Add support for tags in list_nodes()
  (LIBCLOUD-967, GITHUB-1149)
  [Mike Fischer]

- [Digital Ocean] Add rebuild and resize commands
  (LIBCLOUD-977, GITHUB-1169)
  [Adam Wight]

- [EC2] Add new x1.16xlarge and x1e.32xlarge instance type. (GITHUB-1101)
  [Anthony Monthe]

- [EC2] Add AWS EC2 c5 series (GITHUB-1147)
  [Anthony Monthe]

- [EC2] Add AWS EC2 M5 sizes (GITHUB-1159)
  [Anthony Monthe]

- [EC2] Update pricing information for EC2 instances.
  [Tomaz Muraus]

- [EC2] Allow cn-north-1 even without pricing information
  (LIBCLOUD-954, GITHUB-1127)
  [Quentin Pradet]

- [EC2] Fix EBS volume encryption (GITHUB-1008)
  [Sergey Babak]

- [ECS Aliyun] Support modify_security_group_attributes (GITHUB-1157)
  [Zhang Yiming]

- [GCE] Allow adding labels to images (GITHUB-1138)
  [Katriel Traum, Eric Johnson]

- [GCE] Allow adding license strings to images (GITHUB-1136)
  [Katriel Traum, Eric Johnson]

- [GCE] Support GCE node labels. (LIBCLOUD-934, GITHUB-1115)
  [@maxlip]

- [GCE] Fix `GCEList` pagination. (GITHUB-1095)
  [Yap Sok Ann]

- [GCE] Allow setting service account in instance templates (LIBCLOUD-947,
  GITHUB-1108)
  [Evan Carter]

- [GCE] Add support for private IP addresses in GCE instance creation
  (LIBCLOUD-944, GITHUB-1107)
  [Gareth Mcfarlane]

- [GCE] Allow for use of shared network (VPC) and subnetwork (GITHUB-1165)
  [Boris Chazalet]

- [GCE] Add support for accelerators (LIBCLOUD-963, GITHUB-1163)
  [Michael Johnson]

- [ProfitBricks] Update driver and add support for the new API v4. (GITHUB-1103)
  [Nurfet Becirevic]

- [ProfitBricks] Fix list_snapshots() method (GITHUB-1153)
  [Chad Phillips]

- [UpCloud] New driver for UpCloud (LIBCLOUD-938, GITHUB-1102)
  [Mika Lackman, Ilari Mäkelä]

- [UpCloud] Use disk size and storage tier also when creating node from template
  (LIBCLOUD-952, GITHUB-1124)
  [Mika Lackman]

- [UpCloud] Allow to define hostname and username
  (LIBCLOUD-951, LIBCLOUD-953, GITHUB-1123, GITHUB-1125)
  [Mika Lackman]

- [UpCloud] Add pricing information to list_sizes (LIBCLOUD-969, GITHUB-1152)
  [Mika Lackman]

Storage
~~~~~~~

- Added Digital Ocean Spaces driver (LIBCLOUD-955, GITHUB-1129)
  [Andrew Starr-Bochicchio]

- [Digital Ocean Spaces] Add support for AMS3 region (GITHUB-1142)
  [Andrew Starr-Bochicchio]

- [Digital Ocean Spaces] Add support for SGP1 region (GITHUB-1168)
  [Andrew Starr-Bochicchio]

- Fix a bug / regression which resulted in increased memory consumption when
  using ``download_object`` method. This method would store whole object
  content in memory even though there was no need for that.

  This regression was introduced in 2.0.0 when we moved to using ``requests``
  library.
  (GITHUB-1132)
  [Quentin Pradet]

- Fix a regression with hash computation performance and memory usage on object
  upload inadvertently introduced in 2.0.0 and make it more efficient.
  (GITHUB-1135)
  [Quentin Pradet]

Changes in Apache Libcloud 2.2.1
--------------------------------

Common
~~~~~~

- Fix an issue with installation failing on some operating system and file
  systems combinations (e.g. ecryptfs layered on top of ext4) which don't
  support file names longer than 143 characters. (LIBCLOUD-946, GITHUB-1112)

  Reported by Cyrille Verrier.
  [Tomaz Muraus]

Compute
~~~~~~~

- [EC2] add g3 instance types
  [GITHUB-1101]
  (@zulupro)

- [EC2] add 'end' to ec2 reserved_node
  [GITHUB-1099]
  (@xofer)

- Decrease sleep delay (from 1.5 to 0.2 seconds) inside paramiko client which
  is used to prevent busy waiting while waiting for data on the channel.

  This should cause deploy scripts which produce a lot of output in incremental
  manner to finish faster.
  [Tomaz Muraus]

- Fix a regression in the Azure ARM driver which didn't allow custom storage
  URI suffix to be used with create_node. (GITHUB-1110)
  [Lucas Di Pentima]

Tests
~~~~~

- Make sure we normalize header values and cast all the numbers to strings in
  base connection classes used by tests. (LIBCLOUD-945, GITHUB-1111)

  Reported by Erich Eckner.
  [Tomaz Muraus]

Changes in Apache Libcloud 2.2.0
--------------------------------

Compute
~~~~~~~

- [EC2] add g3 instance types
  [GITHUB-1101]
  (@zulupro)

- [EC2] add 'end' to ec2 reserved_node
  [GITHUB-1099]
  (@xofer)

Changes in Apache Libcloud 2.2.0
--------------------------------

Common
~~~~~~

- [GCE] Scrape prices for GCE Australia Region
  [GITHUB-1085]
  (Francisco Ros)

Compute
~~~~~~~

- [ARM] Add option to create static public IP
  [GITHUB-1091, LIBCLOUD-918]
  (Aki Ketolainen)

- [SOFTLAYER] Add `get_image` method to class
  [GITHUB-1066]
  (Francois Regnoult)

- [ARM] Add Storage support, volumes, snapshots
  [GITHUB-1087]
  (Sergey Babak)

Container
~~~~~~~~~

- [DOCKER] Fixes to support TLS connection
  [GITHUB-1067]
  (johnnyWalnut)

DNS
~~~

- [ROUTE53] Fix for TXT and SPF records, when user didn't escapsulate data in
  quotes, the API would fire error. As reported by @glyph
  [LIBCLOUD-875, GITHUB-1093]
  (Anthony Shaw)

- [LINODE] Add priority to the extra dictionary in record instances
  [GITHUB-1088]
  (@mete0r)

Load Balancer
~~~~~~~~~~~~~

- Fixed AWS ALB/ELB driver init method to instantiate nested connection object
  properly
  [LIBCLOUD-936, GITHUB-1089]
  (Anton Kozyrev)

Storage
~~~~~~~

- [CLOUDFILES] Update OpenStackSwiftConnection to work with auth version 3.0
  [GITHUB-1068]
  (Hakan Carlsson)

- [CLOUDFILES] Add SSL URI support
  [GITHUB-1076, LIBCLOUD-458]
  (@ayleph)

Changes in Apache Libcloud 2.1.0
--------------------------------

Common
~~~~~~

- [AWS] Update prices and fix some region names
  [GITHUB-1056]
  (Francisco Ros)

- Fix bug in utils.decorators wrap exception method, used by vsphere driver
  [GITHUB-1054]
  (Anthony Shaw)

- Use PyTest as the unit testing runner
  (Anthony Shaw)

- Use of LXML is now disabled by defalt, use
  ``libcloud.utils.py3.DEFAULT_LXML = True`` to reenable. LXML has
  compatibility issues with a number of drivers and etree is a standard
  package.
  [GITHUB-1038]
  (Anthony Shaw)

- Switch RawResponse class to use content body instead of text body, up to 10x
  performance improvement for methods like StorageDriver.download_object
  [GITHUB-1053]
  (Quentin Pradet)

Compute
~~~~~~~

- [OPENSTACK] Add support for Nova 2.x and Keystone 3
  [GITHUB-1052]
  (Anthony Shaw)

- [GCE] Add loadBalancingScheme parameter for
  ex_create_forwarding_rule method in GCE driver.
  [GITHUB-1079]
  (@sT331h0rs3)

- [GCE] Fix error codes not being parsed in certain scenarios
  [GITHUB-1074, LIBCLOUD-925]
  (micafer)

- [EC2] Fix node's Block Device Mapping was parsed from incorrect mapping.
  EbsInstanceBlockDevice is different from EbsBlockDevice.
  [GITHUB-1075]
  (Gennadiy Stas)

- [GANDI] Fixes the location name in image and instance type classes
  [GITHUB-1065]
  (Sayoun)

- [GCE] Fix method for create instance properties, it previously ignored the
  disk type parameter and defaulted to pd-standard.
  [GITHUB-1064]
  (Evan Carter)

- Fix missing return data from EC2 billing product methods
  [GITHUB-1062]
  (Alex Misstear)

- Handle [VULTR] API rate limiting
  [GITHUB-1058]
  (Francisco Ros)

- Fix Kili driver not correctly fixing the auth version for openstack to
  2.0_password
  [GITHUB-1054]
  (Anthony Shaw)

- [EC2] Add i3 instance types for AWS
  [GITHUB-1038]
  (Stephen Mullins)

- [VULTR] Extend extra dict of Vultr sizes to include additional fields
  (plan_type and available_locations)
  [GITHUB-1044]
  (Francisco Ros)

Container
~~~~~~~~~

- New driver for Google Container Engine
  [GITHUB-1059]
  (Andy Maheshwari)

- [KUBERNETES] Fix get_container method responding with None
  [GITHUB-1054]
  (Anthony Shaw)

- [DOCKER] Fix for start_container method
  [GITHUB-1049]
  (@johnnyWalnut)

- [DOCKER] fix add an extra check otherwise list_containers breaks with
  AttributeError when fromImages is specified
  [GITHUB-1043]
  (@johnnyWalnut)

Storage
~~~~~~~

- [S3] Fix raise in s3.upload_object_via_stream
  [LIBCLOUD-914, GITHUB-1055]
  (Quentin Pradet)

Changes in Apache Libcloud 2.0.0
--------------------------------

Common
~~~~~~

- Fix OpenStack drivers not correctly setting URLs when used with identity API,
  would default to 127.0.0.1 and service catalog URLs were not adhered to.
  [GITHUB-1037, LIBCLOUD-912, LIBCLOUD-904]
  (Anthony Shaw)

- Fix Aliyun ECS, Load balancer and storage adapters when using unicode UTF-8
  characters in the names of resources in 2.0.0rc2 < it would fail as a
  MalformedResponseError, Python 2.7 element tree was raising a unicode error
  [GITHUB-1032] [GITHUB-994]
  (Anthony Shaw)

- Refactor the test classes to use the full libcloud.http and
  libcloud.common.base modules, with Connection, Response all used with
  requests_mock. This increases our test coverages and catches bugs in
  drivers' custom parse_body and auth modules
  [GITHUB-1031]
  (Anthony Shaw)

- Rename libcloud.httplib_ssl to libcloud.http now that we don't use httplib
  [GITHUB-1028]
  (Anthony Shaw)

Compute
~~~~~~~

- [GOOGLE] Add test to check that can create a GCE volume at a given location
  [GITHUB-1048]
  (Francisco Ros)

- [GOOGLE] Fix GCENodeDriver.ex_get_volume() when zone param is of class
  GCEZone or NodeLocation
  [GITHUB-1047]
  (Francisco Ros)

- [GOOGLE] Fix call to GCENodeDriver._ex_populate_volume_dict
  [GITHUB-1046]
  (Francisco Ros)

- [ARM] Add support for Azure Cloud Environments as well as Locations
  [GITHUB-969]
  (Peter Amstutz)

- [EC2] Add support for ModifyVolume and DescribeVolumesModifications
  [GITHUB-1036]
  (Hennadii Stas)

- [ARM] Fix string representation of the VhdImage type and fix listing of
  Public IP addresses
  [GITHUB-1035]
  (Anthony Shaw)

- [GOOGLE] Remove validation checks for guestOsFeatures
  [GITHUB-1034]
  (Max Illfelder)

- [VSPHERE] Fix issue with authentication methods crashing
  [GITHUB-1031]
  (Anthony Shaw)

- [ARM] Add network security groups to azure ARM
  [GITHUB-1033]
  (Joseph Hall)

- [ARM] Add the ability to list resource groups
  [GITHUB-1032]
  (Joseph Hall)

- Add 1&1 compute driver
  [LIBCLOUD-911] [GITHUB-1029]
  (Jasmin Gacic)

- Fix Azure ARM driver condition for ex_list_publishers where location is
  specified
  [GITHUB-1030]
  (Joseph Hall)

- Added Import Snapshot and Describe Import Snapshot to EC2 compute driver
  [GITHUB-1023]
  (Nirzari Iyer)

- Add price_monthly extra param to digitalocean sizes
  [GITHUB-1021]
  (Francisco Ros)

- Add aliyun ecs instance join leave security group
  [GITHUB-992]
  (Jie Ren)

- Add keypair management to OnApp driver
  [GITHUB-1018]
  (Tinu Cleatus)

- Add missing regions in AWS storage and compute drivers
  [GITHUB-1019]
  (Alex Misstear)

- Add SR-IOV net support to images in EC2 compute driver
  [GITHUB-1020]
  (Alex Misstear)

- Fix - update t2.small image size from 11 CPU to 1
  [GITHUB-1022]
  (Francisco Ros)

- Added Billing Product for image in EC2 compute driver
  [GITHUB-1024]
  (Nirzari Iyer)

DNS
~~~

- Add OnApp driver
  [GITHUB-1017] [LIBCLOUD-907]
  (Tinu Cleatus)

Changes in Apache Libcloud 2.0.0rc2
-----------------------------------

Common
~~~~~~

- Fix LIBCLOUD_DEBUG trying to decompress already decompressed responses
  [LIBCLOUD-910]
  (Anthony Shaw)

- Added an integration test API and a test suite for validating functionality
  without mocking any libcloud subsystems
  [GITHUB-970]
  (Anthony Shaw)

- Fix for Linode classes since 2.0x
  [GITHUB-1026]
  (Anthony Shaw)

- Fix CertificateConnection not correctly signing requests in 2.0rc1, impacted
  Azure classic driver, OpenStack and Docker driver
  [GITHUB-1015]
  (Anthony Shaw)

- Change Cloudscale to cloudscale.ch.
  [GITHUB-993]
  (David Halter)

- Explicitly check if response is None in RawResponse class
  [GITHUB-1006] [LIBCLOUD-901]
  (Richard Xia)

Compute
~~~~~~~

- Outscale SAS doc improvements and logo update
  [GITHUB-950]
  (Javier M Mellid)

- [GCE] Allow preemptible instances to be created
  [GITHUB-954]
  (John Baublitz)

- Add support for forcing detachment of EBS volumes to EC2 driver
  [GITHUB-1007]
  (Sergey Babak)

- Fix Public IP not assigned when creating NIC on Azure ARM
  [GITHUB-1013] [LIBCLOUD-906]
  (Simone Ripamonti)

- [ONAPP] Add list images support for OnApp driver
  [GITHUB-1011]
  (Tinu Cleatus)

- [EC2] Add r4 instance types for AWS
  [GITHUB-997]
  (Jens Deppe)

- [EC2] support for AWS eu-west-2 and ca-central-1 regions
  [GITHUB-1009]
  (Marat Komarov)

- [EC2] Add P2 GPU instance types
  [GITHUB-996]
  (MJK)

- [EC2] Add method to modify snapshot attribute for EC2
  [GITHUB-990]
  (Sayan Chowdhury)

- [Linode] Add start, stop instance methods and fix incorrect state TERMINATED
  to STOPPED
  [GITHUB-986]
  (Markos Gogoulos)

- [EC2] Add ENA support for EC2 compute images
  [GITHUB-983]
  (Alex Misstear)

- [Azure ARM] fix typeerror on ex_list_nics
  [GITHUB-979]
  (Choi Jongu)

- [GCE] allow delete instances from managed group
  [GITHUB-975]
  (@zacharya19)

Storage
~~~~~~~

- Reintroduce S3 multipart upload support with signature v4
  [GITHUB-1005] [LIBCLOUD-834]
  (Alex Misstear)


Changes Apache Libcloud 2.0.0rc1
--------------------------------

Common
~~~~~~

- Fix DEBUG mode, also add support for using io.StringIO as the file handle
  when calling libcloud.enable_debug.
  (GITHUB-978, LIBCLOUD-887)
  [Anthony Shaw]

- Introduction of the requests package as the mechanism for making HTTP
  requests for all drivers.
  (GITHUB-928)
  [Anthony Shaw]

- Fix bug where custom port and secure flag would not get propagated to
  connection class.
  (GITHUB-972)
  [Anthony Shaw]

- Fix bug where custom port would not get propagated to connection.
  (GITHUB-971)
  [Anthony Shaw]

- Fix bug where instantiating a connection from URL and then requesting an
  action with a leading / would lead to a malformed URL.
  (GITHUB-976)
  [Anthony Shaw]

Compute
~~~~~~~

- Fix a bug in profitbricks driver where listing snapshots would request a
  malformed URL.
  [GITHUB-976]
  (Anthony Shaw)

- Fix LIBCLOUD-806 bug where vsphere driver cannot be instantiated.
  (GITHUB-967)
  [Anthony Shaw]

- [google compute] Improve performance of list nodes by caching volume
  information.
  (GITHUB-813, LIBCLOUD-826)
  [Tom Melendez]

Changes in Apache Libcloud 1.5.0
--------------------------------

Common
~~~~~~

- Set Dimension Data compute, backup and load balancer to default to 2.4 API.
  (GITHUB-961)
  [Samuel Chong]

Compute
~~~~~~~

- [azure] New method for accessing rate cards.
  (GITHUB-957)
  [Soren L. Hansen]

- [gce] Allow multiple preemptible instances to be created.
  (GITHUB-954)
  [John Baublitz]

- [openstack] Add new Connection class to support VOMS proxys to keystone
  servers.
  (GITHUB-959)
  [micafer]

- [outscale] Added support for changed API for describing quotas.
  (GITHUB-960)
  [Javier M. Mellid]

- [ec2] Added m4 instances to us-gov and brazil, added m4.16xlarge to all.
  (GITHUB-964)
  [Matthew Tyas]

- Add new CloudScale.ch driver
  (GITHUB-951)
  [Dave Halter]

- [google compute] Bug fix for ex_create_multiple_nodes Google Cloud disk auto
  delete.
  (GITHUB-955)
  [John Baublitz]

- [google compute] Add "MULTI_IP_SUBNET" guestOsFeatures option.
  (GITHUB-956)
  [Max Illfelder]

- [dimensiondata] Added support for 2.4 API, added support for image import,
  cloning. Add feature for changing NIC VLANs, add feature for changing NIC
  order for a server.
  (GITHUB-953)
  [Samuel Chong]

- [ec2] Add US-EAST2 (Ohio).
  (GITHUB-946)
  [Matthew Harris]

- [google compute] Fix to allow multiple node creation with subnets.
  (GITHUB-949)
  [John Baublitz]

Container
~~~~~~~~~

- [rancher] The scheme (secure) and port no longer need to be explicitly
  specified, allowing a user to simply copy in the string provided to them
  from Rancher.
  (GITHUB-958)
  [Matthew Ellison]

Changes in Apache Libcloud 1.4.0
--------------------------------

Compute
~~~~~~~

- Introduce new Azure ARM driver.
  [Peter Amstulz]

- [ec2] Fix the bug that created the node at ecs driver and implement the
  method for creating public ip.
  (GITHUB-943)
  [watermelo]

- [profitbricks] changes to the ProfitBricks compute driver to drop support
  for the old SOAP api (now end of life) and provide support for v3 of the
  REST api.
  (GITHUB-938)
  [Matt Finucane]

- [cloudsigma] Added Warsaw (waw) region.
  (GITHUB-942)
  [Kamil Chmielewski]

- [google compute] List images fix for projects > 500 images.
  (GITHUB-939)
  [Scott Crunkleton]

- [ec2] Add st1 and sc1 volume types to valid types.
  (GITHUB-925)
  [Sean Goller]

- [digital ocean] add ex_change_kernel in DigitalOcean_v2 driver.
  (GITHUB-922)
  [Rick van de Loo]

- [digital ocean] add ex_hard_reboot in DigitalOcean_v2 driver.
  (GITHUB-920)
  [Rick van de Loo]

- [openstack] add ex_start_node for the openstack driver.
  (GITHUB-919)
  [Rick van de Loo]

- [vultr] Extra Attributes for Node Creation on Vultr.
  (GITHUB-917)
  [Fahri Cihan Demirci]

- [vultr] Implement SSH Key Create/Delete Methods for Vultr.
  (GITHUB-914)
  [Fahri Cihan Demirci]

- [dimension data] No longer throw error when powering off a node that is
  already stopped.
  (GITHUB-912)
  [Samuel Chong]

- [dimension data] Refactor create_node for MCP2 to support CaaS API 2.3 feature.
  Can now specify Network Adapter Name for primary and additional NIC.
  Parameters in create_node function is tailored for MCP2.
  (GITHUB-902)
  [Samuel Chong]

- Volume snapshot operations, i.e. creating, listing and deleting volume
  snapshots, for the Digital Ocean driver.
  (LIBCLOUD-861, GITHUB-909)
  [Fahri Cihan Demirci]

- Added snapshot management to OVH compute.
  (GITHUB-897)
  [Anthony Monthe]

- [GCE] Support for HTTP(S) proxies with BackendServices.
  (GITHUB-856)
  [Tom Melendez]

Container
~~~~~~~~~

- [docker] As reported in the corresponding bug, the docker daemon will respond
  in an install_image call with all the messages produced during the procedure
  parsed as json docs. In that case the response headers also contain the value
  'transfer-encoding':'chunked'. That kind of response can now be parsed
  properly by the DockerResponse parse_body method. Also, another small change
  is that previously the id of the new image was marked in the json document as
  id, but now it's marked as sha256, so the regex used to discover the id has
  been updated.
  (GITHUB-918)
  [Pavlos Tzianos]

Load Balancing
~~~~~~~~~~~~~~

- Introduce AWS Application Load Balancer (ALB) driver.
  (LIBCLOUD-869, GITHUB-936)
  [Anton Kozyrev]

- Fix bug where GCE Load balancer supposes that all VMs have public ips.
  (LIBCLOUD-879, GITHUB-952)
  [Chris Walker]

Storage
~~~~~~~

- [s3] Add AP-Southeast2 as region.

- [google] Prevent GCE auth to hide S3 auth.
  (GITHUB-921)
  [Quentin Pradet]

- [GCS] Fixed some google_storage.py URL cleaning.
  (GITHUB-901)
  [Scott Crunkleton]

Changes in Apache Libcloud 1.3.0
--------------------------------

General
~~~~~~~

- Introduced new base API for instantiating drivers.
  (GITHUB-822)
  [Anthony Shaw]

- Added certificate path for SLES12/OpenSUSE12.
  (GITHUB-884)
  [Michael Calmer]

- Deprecate DigitalOcean v1 API support in favour of v2 API.
  (GITHUB-889, GITHUB-892)
  [Andrew Starr-Bochicchio]

- Deprecate RunAbove cloud drivers in favour of new OVH cloud driver.
  (GITHUB-891)
  [Anthony Monthe]


Compute
~~~~~~~

- Fix reporting function for detailed admin logs in Dimension Data Driver.
  (GITHUB-898)
  [Anthony Shaw]

- Added edit firewall functionality to Dimension Data driver.
  (GITHUB-893)
  [Samuel Chong]

- Bugfix - Fixed listing nodes issue in Python 3.
  (LIBCLOUD-858, GITHUB-894)
  [Fahri Cihan Demirci]

- Added FCU (Flexible Compute Unit) support to the Outscale driver.
  (GITHUB-890)
  [Javier M. Mellid]

- [google compute] Add "WINDOWS" guestOsFeatures option.
  (GITHUB-861)
  [Max Illfelder]

- When creating volumes on OpenStack with defaults for `location` or
  `volume_type`, newer OpenStack versions would throw errors. The OpenStack
  driver will now only post those arguments if non-`NoneType`.
  (GITHUB-857)
  [Allard Hoeve]

- When fetching the node details of a non-existing node, OpenStack would raise
  a `BaseHTTPError` instead of returning `None`, as was intended. Fixed tests
  and code.
  (GITHUB-864)

- Added `ex_stop_node` to the OpenStack driver.
  (GITHUB-865)
  [Allard Hoeve]

- When creating volume snapshot, the arguments `name` and `description` are
  truely optional when working with newer OpenStack versions. The OpenStack
  driver will now only post thost arguments if they are non-`NoneType`.
  (GITHUB-866)
  [Allard Hoeve]

- StorageVolumeSnapshot now has an attribute `name` that has the name of the
  snapshot if the provider supports it. This used to be `.extra['name']`, but
  that is inconsistent with `Node` and `StorageVolume`. The `extra` dict still
  holds `name` for backwards compatibility.
  (GITHUB-867)
  [Allard Hoeve]

Container
~~~~~~~~~

- Introduced new Rancher driver
  (GITHUB-876)
  [Mario Loria]

- Fixed bug in Docker util library for fetching images from the docker hub API.
  API was returning 301 and redirects were not being followed.
  (GITHUB-862)
  [Anthony Shaw]

Load Balancer
~~~~~~~~~~~~~

- Added fetch tags support in elb driver.
  (GITHUB-848)
  [Anton Kozyrev]

Storage
~~~~~~~

- Added storage permissions for Google Cloud Storage.
  (GITHUB-860)
  [Scott Crunkleton]

Changes in Apache Libcloud 1.2.1
--------------------------------

Backup
~~~~~~

- Fix issue enabling backups on Dimension Data driver.
  (GITHUB-858)
  [Mark Maglana, Jeff Dunham, Anthony Shaw]

Changes in Apache Libcloud 1.2.0
--------------------------------

General
~~~~~~~

- Fix caching of auth tokens in the Google Compute Engine drivers. Now we make
  sure that the file is truncated before writing a new token. Not truncating
  the file would cause issues if the new token is shorted then the existing one
  which is cached in the file.
  (GITHUB-844, LIBCLOUD-835)
  [Paul Tiplady]

Compute
~~~~~~~

- [gce] Fix image undeprecation in GCE.
  (GITHUB-852)
  [Max Illfelder]

- [gce] Added Managed Instance Groups.
  (GITHUB-842)
  [Tom Melendez]

- [gce] Allow undeprecation of an image.
  (GITHUB-851)
  [Max Illfelder]

- [cloudstack] BUGFIX Values with wildcards failed signature validation.
  (GITHUB-846)
  [Ronald van Zantvoot]

- [cloudstack] Added StorageState-Migrating to the cloudstack driver.
  (GITHUB-847)
  [Marc-Aurèle Brothier]

- [google compute] Update copy image logic to match create image.
  (GITHUB-828)
  [Max Illfelder]

- Removed HD attribute from the Abiquo compute driver to support the 3.4 API.
  (GITHUB-840)
  [David Freedman]

- Add image and size details to `list_nodes` response in Dimension Data driver.
  (GITHUB-832)
  [Anthony Shaw]

- Add support for changing VM admin password in VMware driver.
  (GITHUB-833)
  [Juan Font Alonso]

- Add Barcelona (Spain) region to the Aurora Compute driver.
  (GITHUB-835)
  [Wido den Hollander]

- Various improvements in the libvirt driver.
  (GITHUB-838)
  [Rene Kjellerup]

Load balancer
~~~~~~~~~~~~~

- Add support for temporary IAM role credentials (token) to the AWS ELB driver.
  (GITHUB-843)
  [Anton Kozyrev]

DNS
~~~

- Updated the 'extra' parameter in `update_record()` to be optional in aurora
  driver.
  (GITHUB-830)
  [Wido den Hollander]

- Support for iterating over records and zones in the Aurora DNS driver.
  (GITHUB-829)
  [Wido den Hollander]

- Add support for DS, PTR, SSFHFP and TLSA record type to the Aurora DNS
  driver.
  (GITHUB-834)
  [Wido den Hollander]

Container
~~~~~~~~~

- Add network mode and labels when creating containers within docker driver.
  (GITHUB-831)
  [Jamie Cressey]

Storage
~~~~~~~

- Fix authentication issue in S3/China region, disabled multipart uploads as
  not supported by region.
  (GITHUB-839)
  [Luke Morfitt]

Changes with Apache Libcloud 1.1.0
----------------------------------

General
~~~~~~~

- Add support for automatic SNI (SSL extension) using the hostname
  supplied to connect to.

  Note: This functionality is only available in Python 2.7.9 and
  Python >= 3.2.
  (LIBCLOUD-827, GITHUB-808)
  [David Freedman]

Compute
~~~~~~~

- Add support image guest OS features in GCE driver.
  (GITHUB-825)
  [Max Illfelder]

- Added forceCustimization option for vcloud director driver.
  (GITHUB-824)
  [Juan Font]

- Add node lookup by UUID for libvirt driver.
  (GITHUB-823)
  [Frank Wu]

- Add block storage support to DigitalOcean node driver.
  (GITHUB-807)
  [Adam Wolfe Gordon]

- Add SASL auth support to libvirt driver.
  (GITHUB-809)
  [Katana-Steel]

- Allow VIPs in Dimension Data driver to bind to any port.
  (GITHUB-818)
  [Mark Maglana]

- Add support for deleting a security group to the Aliyun ECS driver.
  (GITHUB-816)
  [Heng Wu]

- Add ``ex_force_customization`` argument to the ``ex_deploy_node`` in vCloud
  driver.
  (GITHUB-824)
  [Juan Font]

- Add support for listing  attributes for a particular security group
  (``ex_list_security_group_attributes``) to the Aliyun ECS driver.
  (GITHUB-826)
  [Heng Wu]

- Add new Mumbai, India region to the EC2 driver.
  [Tomaz Muraus]

- Add driver for the new AWS cn-north-1 region.
  (GITHUB-827, LIBCLOUD-820)
  [Jamie Cressey]

- Fix authentication with temporary IAM role credentials (token) in the EC2
  driver.
  (GITHUB-820)
  [Alejandro González]

Container
~~~~~~~~~

- Fixed API compatibility for Docker Container driver with API 1.24, set driver
  to use versioned URL for all communication. Backported changes to 1.21 API
  (GITHUB-821)
  [Anthony Shaw]

Load Balancer
~~~~~~~~~~~~~

- Added additional parameters to the Rackspace driver in `list_balancers` for
  filtering and searching.
  (GITHUB-803)
  [João Paulo Raittes]

Changes with Apache Libcloud 1.0.0
----------------------------------

General
~~~~~~~

- Fix a regression with ``timeout`` argument provided via
  ``_ex_connection_class_kwargs`` method being overriden with ``None`` inside
  the ``BaseDriver`` constructor method.

  Reported by Jay Rolette.
  (GITHUB-755)
  [Tomaz Muraus, Jay Rolette]

- Fix OpenStack v3 authentication and allow user to provide a custom value for
  the OpenStack ``domain`` parameter. Previously only possible value as a
  default value of ``Default``.
  (GITHUB-744)
  [Lionel Schaub]

- Add support for authenticating against Keystone and OpenStack based clouds
  using OpenID Connect tokens.
  (GITHUB-789)
  [Miguel Caballer]

Compute
~~~~~~~

- GCE nodes can be launched in a subnetwork
  (GITHUB-783)
  [Lars Larsson]

- Add Subnetworks to GCE driver
  (GITHUB-780)
  [Eric Johnson]

- Fix missing pricing data for GCE
  (LIBCLOUD-713, GITHUB-779)
  [Eric Johnson]

- Add Image Family support for GCE
  (GITHUB-778)
  [Rick Wright]

- Fix a race condition on GCE driver `list_nodes()`- Invoking GCE’s
  `list_nodes()` while some VMs are being shutdown can result in the following
  `libcloud.common.google.ResourceNotFoundError` exception to be raised.
  (GITHUB-727)
  [Lénaïc Huard]

- Allow user to filter nodes by location by adding optional `location`
  argument to the `list_nodes()` method in the CloudStack driver.
  (GITHUB-737)
  [Lionel Schaub]

- Fix OpenStack IP type resolution - make sure IP addresses are correctly
  categorized and assigned on `private_ips` and `public_ips` Node attribute.
  (GITHUB-738)
  [Lionel Schaub]

- Add new `Perth, Australia` and `Manila, Philippines` region to the CloudSigma
  v2 driver.
  [Tomaz Muraus]

- Update libvirt driver so it returns false if a non-local libvirt URL is used
  (right now only local instances are supported).
  (LIBCLOUD-820, GITHUB-788)
  [René Kjellerup]

- Update libvirt driver to use `ip neight` command instead of `arp` to retrieve
  node MAC address if `arp` command is not available or the current user
  doesn't have permission to use it.
  (LIBCLOUD-820, GITHUB-788)
  [René Kjellerup]

- Update ``create_volume`` method in the CloudStack driver and add
  ``ex_volume_type`` argument to it. If this argument is provided, a volume
  which names matches this argument value will be searched and selected among
  the available disk offerings.
  (GITHUB-785)
  [Greg Bishop]

Storage
~~~~~~~

- Add support for AWS signature v4 to the Outscale storage driver.
  (GITHUB-736)
  [Javier M. Mellid]

- Add new S3 RGW storage driver.
  (GITHUB-786, GITHUB-792)
  [Javier M. Mellid]

Loadbalancer
~~~~~~~~~~~~

- Update AWS ELB driver to use signature version 4 for authentication. This
  way, the driver also work with the `eu-central-1` region.
  (GITHUB-796)
  [Tobias Paepke]

DNS
~~~

- Add BuddyNS driver.
  (GITHUB-742)
  [Oltjano Terpollari]

- Added DNSPod driver (https://www.dnspod.com).
  (GITHUB-787)
  [Oltjano Terpollari]

Changes with Apache Libcloud 1.0.0-rc2
--------------------------------------

General
~~~~~~~

- Fix a bug with consuming stdout and stderr in the paramiko SSH client which
  would manifest itself under very rare condition when a consumed chunk only
  contained a single byte or part of a multi byte UTF-8 character.
  [Lakshmi Kannan, Tomaz Muraus]

- Increase default chunk size from ``1024`` to ``4096`` bytes in the paramiko
  SSH client. This results in smaller number of receive calls on the average.
  [Tomaz Muraus]

- Fix to Dimension Data API address for Middle-East and Africa
  (GITHUB-700)
  [Anthony Shaw]

- Addition of Dimension Data Australia federal government region to dimension data
  drivers.
  (GITHUB-700)
  [Anthony Shaw]

- Throw a more user-friendly exception on "No address associated with hostname".
  (GITHUB-711, GITHUB-714, LIBCLOUD-803)
  [Tomaz Muraus, Scott Crunkleton]

* Remove deprecated provider constants with the region in the name and related
  driver classes (e.g. ``EC2_US_EAST``, etc.).

  Those drivers have moved to single provider constant + ``region`` constructor
  argument model.
  [Tomaz Muraus]

* Introduce new `list_regions`` class method on the base driver class. This
  method is to be used with provider drivers which support multiple regions and
  ``region`` constructor argument. It allows users to enumerate available /
  supported regions.
  [Tomaz Muraus]

Compute
~~~~~~~

- [dimension data] added support for VMWare tools VM information inside list_nodes responses
  (GITHUB-734)
  [Jeff Dunham]

- [ec2] added ex_encrypted and ex_kms_key_id optional parameters to the create volume method
  (GITHUB-729)
  [Viktor Ognev]

- [dimension data] added support for managing host anti-affinity rules, added paging support to
  all supported calls and added support for requesting priority ordering when creating ACL rules
  (GITHUB-726)
  [Jeff Dunham]

- [openstack] when creating floating IPs, added pool_id as an optional argument
  (GITHUB-725)
  [marko-p]

- [google compute] Added setMachineType method to allow for changing sizes of instances
  (GITHUB-721)
  [Eric Johnson]

- [google compute] allow bypassing image search in standard project list
  (GITHUB-713)
  [Max Illfelder]

- Add support for requesting a MKS token for accessing the remote console in VMware
  vCloud driver
  (GITHUB-706)
  [Juan Font Alonso]

- Add support in VMware vCloud driver for v5.5 API, with snapshot support
  (GITHUB-658)
  [Juan Font Alonso]

- Added support for adding a family to an image on Google Compute Driver
  (GITHUB-704)
  [Max Illfelder]

- Deprecated IBM SCE, HP Helion, OpSource, Ninefold and CloudFrames drivers, removed
  driver code and tests.
  (GITHUB-701, LIBCLOUD-801)
  [Anthony Shaw]

- Introduced error messages (`libcloud.compute.deprecated`) for deprecated drivers
  (GITHUB-701, LIBCLOUD-801)
  [Anthony Shaw]

- New Compute drivers- BSNL, Indosat, Med-1, NTT-America, Internet Solutions
  (GITHUB-700)
  [Anthony Shaw]

- Fix to set default signature version for AWS Seoul region to v4, removed
  non-supported size (hs1.xlarge)
  (GITHUB-684)
  [Geunwoo Shin]

- Support filtering by location in list_nodes for dimension data compute driver
  fix lack of paging support
  (GITHUB-691)
  [Jeff Dunham]

- Support for filtering by IPv4, IPv6, network, network domain, VLAN in Dimension
  data driver.
  (GITHUB-694)
  [Jeff Dunham]

- Added `Node.created_at` which, on supported drivers, contains the datetime the
  node was first started.
  (GITHUB-698)
  [Allard Hoeve] [Rick van de Loo]

- New driver for Aliyun Elastic Compute Service.
  (LIBCLOUD-802, GITHUB-712)
  [Sam Song, Heng Wu]

Storage
~~~~~~~

- Added Outscale storage driver
  (GITHUB-730)
  [Javier M. Mellid]

- Improvements to Google Auth for Storage and Compute and MIME bug fix
  (LIBCLOUD-800, GITHUB-689)
  [Scott Crunkleton]

- Implement ``get_container``, ``get_object`` and ``upload_object_via_stream``
  methods in the Backblaze B2 storage driver.

  Note: Backblaze API doesn't upload streaming uploads so when using
  ``upload_object_via_stream`` whole file is read and buffered in memory.
  (GITHUB-696)
  [Jay jshridha]

- New driver for Aliyun OSS Storage Service.
  (LIBCLOUD-802, GITHUB-712)
  [Sam Song]

Loadbalancer
~~~~~~~~~~~~

- New driver for Aliyun SLB Loadbalancer Service.
  (LIBCLOUD-802, GITHUB-712)
  [Sam Song]

DNS
~~~~

- Added NearlyFreeSpeech.net (NSFN) driver
  [Ken Drayer]
  (GITHUB-733)

- Added Lua DNS driver
  [Oltjano Terpollari]
  (GITHUB-732)

- Added NSOne driver
  [Oltjano Terpollari]
  (GITHUB-710)

- Fix a bug in the GoDaddy driver - make sure ``host`` attribute on the
  connection class is correctly set to the hostname.
  [Tomaz Muraus]

- Fix handling of ``MX`` records in the Gandi driver.
  (GITHUB-718)
  [Ryan Lee]

Backup
~~~~~~

- Dimension Data - added additional testing, fixed bug on client response naming,
  added support for adding backup clients to a backup enabled node.
  (GITHUB-692, GITHUB-693, GITHUB-695)
  [Jeff Dunham]

Changes with Apache Libcloud 1.0.0-pre1
---------------------------------------

General
~~~~~~~

- Introduction of container based drivers for Docker, Rkt and Container-as-a-service
  providers
  (LIBCLOUD-781, GITHUB-666)
  [Anthony Shaw]

- Introduce a new ``libcloud.backup`` API for Backup as a Service projects and
  products.
  (GITHUB-621)
  [Anthony Shaw]

- Also retry failed HTTP(s) requests upon transient "read operation timed out"
  SSL error.
  (GITHUB-556, LIBCLOUD-728)
  [Scott Kruger]

- Throw a more user-friendly exception if a client fails to establish SSL / TLS
  connection with a server because of an unsupported SSL / TLS version.
  (GITHUB-682)
  [Tomaz Muraus]

Compute
~~~~~~~

- Add ap-northeast-2 region to EC2 driver (South Korea)
  (GITHUB-681)
  [Anthony Shaw]

- Added Added volume type to EC2 volume extra to EC2 driver.
  (GITHUB-680)
  [Gennadiy Stas]

- Add LazyObject class that provides lazy-loading, see `GCELicense` for usage
  (LIBCLOUD-786, GITHUB-665)
  [Scott Crunkleton]

- Added t2.nano instance type to EC2 Compute driver
  (GITHUB-663)
  [Anthony Shaw]

- Support for passing the image ID as a string instead of an instance of image when
  creating nodes in Dimension Data driver.
  (GITHUB-664)
  [Anthony Shaw]

DNS
~~~

- Add support for 'health checks' in Aurora DNS driver
  (GITHUB-672)
  [Wido den Hollander]

- Make sure ``ttl`` attribute is correctly parsed and added to the ``Record``
  ``extra`` dictionary.
  (GITHUB-675)
  [Wido den Hollander]

- Improve unit tests of Aurora DNS driver
  (GITHUB-679)
  [Wido den Hollander]

Changes with Apache Libcloud 0.20.1
-----------------------------------

Compute
~~~~~~~

- [google] Allow for old and new style service account client email address
  (LIBCLOUD-785)
  [Hoang Phan]

Changes with Apache Libcloud 0.20.0
-----------------------------------

General
~~~~~~~

- Added .editorconfig file for easier editing
  (GITHUB-625)
  [Misha Brukman]

- Fix a bug with Libcloud accidentally setting paramiko root logger level to
  DEBUG (this should only happen if ``LIBCLOUD_DEBUG`` environment variable is
  provided).

  Reported by John Bresnahan.
  (LIBCLOUD-765)
  [Tomaz Muraus, John Bresnahan]

- Simply travis and tox config (.travis.yml, tox.ini).
  (GITHUB-608)
  [Anthony Monthe]

- Fixed Python2.6 unit testing (and Google Cloud Storage tests)
  (GITHUB-648)
  [Scott Crunkleton]

Compute
~~~~~~~

- [google] Allow for old and new style service account client email address
  (LIBCLOUD-785)
  [Hoang Phan]

- Minor security improvement for storing cached GCE credentials
  (LIBCLOUD-718)
  [Siim Põder]

- Removed DreamHosts Compute Driver, DreamHosts users will now use the OpenStack Node driver since DreamHosts are OpenStack
  API compliant
  (GITHUB-655)
  [Stephano Maffulli]

- Added additional kwargs to the create_node method for Dimension Data driver, allowing the user to specify the RAM and
  CPU upfront. Added a ex_reconfigure_node method and ex_list_customer_images as well as updating the API to 2.1.
  (LIBCLOUD-783, GITHUB-656)
  [Anthony Shaw]

- The EC2 Instance Type updated with correct disk sizes (especially the disk size for the m3 instances),
  conversion errors between GiB an M[i]B, disk count were the cause.
  Added instance types - g2.8xlarge and t2.large.
  (GITHUB-646)
  [Philipp Hahn]

- Add update node, update VMware tools, add storage, change storage size or speed, remove storage to Dimension Data Driver.
  (LIBCLOUD-775, GITHUB-644)
  [Anthony Shaw]

- Include 'service_name' support in _parse_service_catalog_auth_v3 for Openstack Drivers
  (GITHUB-647)
  [Steve Gregory]

- Outscale inc & sas driver update
  (GITHUB-645)
  [@LordShion]

- Add new `eu-west-2` & `us-east-2` regions to the OUTSCALE_INC & OUTSCALE_SAS drivers.
  [Filipe Silva /lordshion]

- [google compute] add pricing data update script
  (GITHUB-464)
  [Misha Brukman]

- Fix a bug in the ``list_volumes`` method in the CloudStack driver so it
  returns an empty list if no volumes are found.
  (GITHUB-617)
  [Wido den Hollander]

- Return proper volume state for CloudStack volumes.
  (GITHUB-615, LIBCLOUD-764)
  [Wido den Hollander]

- Add support for multiple regions in Aurora compute driver
  (GITHUB-623)
  [Wido den Hollander]

- Fix value of ``node.extra['ip_addresses']`` node attribute in the CloudStack
  driver.
  (LIBCLOUD-767, GITHUB-627)
  [Atsushi Sasaki]

- Make sure that ``node.public_ips`` attribute in the CloudStack driver doesn't
  contain duplicated values..
  (LIBCLOUD-766, GITHUB-626)
  [Atsushi Sasaki]

- Allow user to wait for a resource to reach a desired state in the
  Dimension Data driver by using new ``ex_wait_for_state`` method.
  (LIBCLOUD-707, GITHUB-631)
  [Anthony Shaw]

- Added M4 pricing and instance information to EC2 driver
  (GITHUB-634)
  [Benjamin Zaitlen]

- Added C4 instance information to EC2 driver
  (GITHUB-638)
  [amitofs]

- Allow location of the datacenter to be supplied in ProfitBricks driver
  (LIBCLOUD-771, GITHUB-635)
  [Joel Reymont]

- Reduce redundant API calls in CloudStack driver
  (LIBCLOUD-590, GITHUB-641)
  [Atsushi Sasaki]

- Add an additional argument to libcloud.compute.drivers.GCENodeDriver.create_node
  to allow for creation of preemptible GCE instances
  (GITHUB-643)
  [@blawney]

- GoogleStorageDriver can now use either our S3 authentication or other Google Cloud Platform OAuth2 authentication methods.
  (GITHUB-633)
  [Scott Crunkleton]

- All NodeState, StorageVolumeState, VolumeSnapshotState and Provider attributes
  are now strings instead of integers.
  (GITHUB-624)
  [Allard Hoeve]

Storage
~~~~~~~

Loadbalancer
~~~~~~~~~~~~

DNS
~~~

- RackSpace driver - New DNS driver methods:
   - ex_iterate_ptr_records
   - ex_get_ptr_record
   - ex_create_ptr_record
   - ex_update_ptr_record
   - ex_delete_ptr_record

  This should cover all of the functionality offered by the Rackspace DNS API
  in regards to RDNS.
  (LIBCLOUD-780, GITHUB-652)
  [Greg Hill]

- Update ``create_record`` in the WorldWideDNS driver so it automatically
  selects a slot if one is not provided by the user via ``extra['entry']``
  argument.
  (GITHUB-621)
  [Alejandro Pereira]

- Introduce GoDaddy DNS Driver with examples and documentation.
  (LIBCLOUD-772, GITHUB-640, LIBCLOUD-778)
  [Anthony Shaw]

- Add new driver for CloudFlare DNS (https://www.cloudflare.com/dns/).
  (GITHUB-637)
  [Tomaz Muraus]

Changes with Apache Libcloud 0.19.0
-----------------------------------

General
~~~~~~~

- Update Rackspace AUTH_URL
  (LIBCLOUD-738)
  [Brian Curtin]

- Fix ``LIBCLOUD_DEBUG`` mode so it works on Python 3.x.
  [Tomaz Muraus]

- Fix Libcloud code so it doesn't throw an exception if simplejson < 2.1.0 is
  installed.
  (LIBCLOUD-714, GITHUB-577)
  [Erik Johnson]

- Fix endpoint URL for DimensionData Asia Pacific region.
  (GITHUB-585)
  [Anthony Shaw]

- Document potential time drift issue which could cause authentication in the
  GCE drivers to fail.
  (GITHUB-571)
  [Michal Tekel]

- Update documentation for EC2 - make sure they reflect region changes from
  0.14 release.
  (GITHUB-606)
  [James Guthrie]

Compute
~~~~~~~

- Fixed malformed XML requests with Dimension Data driver.
  (LIBCLOUD-760, GITHUB-610)
  [Anthony Shaw]

- Update list of scopes for Google Compute Engine driver.
  (GITHUB-607)
  [Otto Bretz]

- Allow user to filter VPC by project in the CloudStack driver by passing
  ``project`` argument to the ``ex_list_vps`` method.
  (GITHUB-516)
  [Syed Mushtaq Ahmed]

- Add volume management methods and other various improvements and fixes in the
  RunAbove driver.
  (GITHUB-561)
  [Anthony Monthe]

- Add support and update Dimension Data driver to use API v2.0 by default.
  (LIBCLOUD-736, GITHUB-564)
  [Anthony Shaw]

- Add new ``ex_virtual_network_name`` and ``ex_network_config`` argument to the
  `create_node`` method in the Azure driver. With those arguments user can now
  specify which virtual network to use.
  (GITHUB-569)
  [Jesaja Everling]

- Fix ``create_node`` method in the GCE driver calling inexistent method
  (ex_get_disk instead of ex_get_volume).
  (GITHUB-574)
  [Alex Poms]

- Allow user to pass ``proxy_url`` keyword argument to the VCloud driver
  constructor.
  (GITHUB-578)
  [Daniel Pool]

- Various fixes and improvements in the DimensionData driver (support for
  creating servers in MCP 1 and 2 data center, performance improvements in the
  location fetching, etc.).
  (GITHUB-587, GITHUB-593, LIBCLOUD-750, LIBCLOUD-753)
  [Anthony Shaw]

- Added ``ex_assign_public_ip`` argument to ``create_node`` in the EC2 driver.
  (GITHUB-590)
  [Kyle Long]

- Added ``ex_terminate_on_shutdown`` argument to ``create_node`` in the EC2
  driver.
  (GITHUB-595)
  [Kyle Long]

- Various fixes and improvements in the ``ex_authorize_security_group_ingress``
  in the CloudStack driver.
  (LIBCLOUD-749, GITHUB-580)
  [Lionel Schaub]

- Add pricing information for Softlayer.
  (LIBCLOUD-759, GITHUB-603)
  [David Wilson]

- Standardize VolumeSnapshot states into the ``state`` attribute.
  (LIBCLOUD-758, GITHUB-602)
  [Allard Hoeve]

Storage
~~~~~~~

- Add support for ``sa-east-1`` region to the Amazon S3 driver.
  (GITHUB-562)
  [Iuri de Silvio]

- Fix handling of binary data in Local storage driver on Python 3. Now the file
  which is to be written or read from is opened in the binary mode (``b`` flag).
  (LIBCLOUD-725, GITHUB-568)
  [Torf]

Loadbalancer
~~~~~~~~~~~~

- Add a new driver for DimensionData load-balancing service
  (http://cloud.dimensiondata.com/).
  (LIBCLOUD-737, GITHUB-567)
  [Anthony Shaw]

DNS
~~~

- Update Google Cloud DNS API from 'v1beta1' to 'v1'
  (GITHUB-583)
  [Misha Brukman]

- Add new driver for AuroraDNS service.
  (GITHUB-562, LIBCLOUD-735)
  [Wido den Hollander]

- Fix "_to_record" in the Route53 driver - make sure it doesn't throw if the
  record TTL is not available.
  [Tomaz Muraus]

- Add new driver for WorldWideDNS service
  (http://www.worldwidedns.net/home.asp).
  (GITHUB-566, LIBCLOUD-732)
  [Alejandro Pereira]

- Add new driver for DNSimple service (https://dnsimple.com/).
  (GITHUB-575, GITHUB-604, LIBCLOUD-739)
  [Alejandro Pereira, Patrick Humpal]

- Add new driver for PointDNS service (https://pointhq.com).
  (GITHUB-576, GITHUB-591, LIBCLOUD-740)
  [Alejandro Pereira]

- Add new driver for Vultr DNS service (https://www.vultr.com).
  (GITHUB-579, GITHUB-596, LIBCLOUD-745)
  [Alejandro Pereira, Janez Troha]

- Add new driver for Liquidweb DNS service (http://www.liquidweb.com/).
  (GITHUB-581, LIBCLOUD-746)
  [Oltjano Terpollari, Alejandro Pereira]

- Add new driver for Zonomi DNS hosting service (http://zonomi.com/).
  (GITHUB-582, LIBCLOUD-747)
  [Oltjano Terpollari, Alejandro Pereira]

- Add new driver for Durable DNS service (https://durabledns.com/).
  (GITHUB-588, LIBCLOUD-748)
  [Oltjano Terpollari, Alejandro Pereira]

Changes with Apache Libcloud 0.18.0
-----------------------------------

General
~~~~~~~

- Use native ``ssl.match_hostname`` functionality when running on Python >=
  3.2 and only require ``backports.ssl_match_hostname`` dependency on Python
  versions < 3.2.
  [Tomaz Muraus]

- Add support for AWS Signature version 4.

  Note: Currently only GET HTTP method is supported.
  (GITHUB-444)
  [Gertjan Oude Lohuis]

- Fix a bug in the debug mode logging (LIBCLOUD_DEBUG). Logging to the debug
  file would throw an exception if the text contained non-ascii characters.
  [Tomaz Muraus]

- Fix a bug with connection code throwing an exception if a port was a unicode
  type and not a str or int.
  (GITHUB-533, LIBCLOUD-716)
  [Avi Weit]

- Update ``is_valid_ip_address`` function so it also works on Windows.
  (GITHUB-343, GITHUB-498, LIBCLOUD-601, LIBCLOUD-686)
  [Nicolas Fraison, Samuel Marks]

- Add support for retrying failed HTTP requests.

  Retrying is off by default and can be enabled by setting
  ``LIBCLOUD_RETRY_FAILED_HTTP_REQUESTS`` environment variable.
  (GITHUB-515, LIBCLOUD-360, LIBCLOUD-709)

- Fix a bug in consuming stdout and stderr strams in Paramiko SSH client.
  In some cases (like connecting to localhost via SSH), exit_status_ready
  gets set immediately even before the while loop to consume the streams
  kicks in. In those cases, we will not have consumed the streams at all.
  (GITHUB-558)
  [Lakshmi Kannan]

Compute
~~~~~~~

- Google Compute now supports paginated lists including filtering.
  (GITHUB-491)
  [Lee Verberne]

- OpenStackNodeSize objects now support optional, additional fields that are
  supported in OpenStack 2.1: `ephemeral_disk`, `swap`, `extra`.
  (GITHUB-488, LIBCLOUD-682)
  [Greg Hill]

- StorageVolume objects now have an attribute `state` that holds a
  state variable that is standardized state across drivers. Drivers that
  currently support the `state` attribute are OpenStack and EC2.
  StorageVolume objects returned by drivers that do not support the
  attribute will have a `state` of `None`. When a provider returns a state
  that is unknown to the driver, the state will be `UNKNOWN`. Please report
  such states. A couple of drivers already put state fields in the `extra`
  fields of StorageVolumes. These fields were kept for
  backwards-compatibility and for reference.
  (GITHUB-476)
  [Allard Hoeve]

- StorageVolume objects on EC2 and OpenStack now have a key called snapshot_id
  in their extra dicts containing the snapshot ID the volume was based on.
  (GITHUB-479)
  [Allard Hoeve]

- OpenStack driver: deprecated ex_create_snapshot and ex_delete_snapshot in
  favor of create_volume_snapshot and destroy_volume_snapshot. Updated base
  driver method create_storage_volume argument name to be optional.
  (GITHUB-478)
  [Allard Hoeve]

- Add support for creating volumes based on snapshots to EC2 and OS drivers.
  Also modify signature of base NodeDriver.create_volume to reflect the fact
  that all drivers expect a StorageSnapshot object as the snapshot argument.
  (GITHUB-467, LIBCLOUD-672)
  [Allard Hoeve]

- VolumeSnapshots now have a `created` attribute that is a `datetime`
  field showing the creation datetime of the snapshot. The field in
  VolumeSnapshot.extra containing the original string is maintained, so
  this is a backwards-compatible change.
  (GITHUB-473)
  [Allard Hoeve]

- Improve GCE create_node, make sure ex_get_disktype function
  (GITHUB-448)
  [Markos Gogoulos]

- GCE driver fix to handle unknown image projects
  (GITHUB-447)
  [Markos Gogoulos]

- Allow user to pass ``ex_blockdevicemappings`` argument to the create_node
  method in the OpenStack driver.
  (GITHUB-398, LIBCLOUD-637)
  [Allard Hoeve]

- Fix ``list_volume_snapshots`` method in the EC2 driver so it comforms to the
  base API.
  (LIBCLOUD-664, GITHUB-451)
  [Allard Hoeve]

- Add ``volumes_attached`` attibute to ``node.extra`` in the OpenStack driver.
  (LIBCLOUD-668, GITHUB-462)
  [Allard Hoeve]

- Add the following new methods to the Linode driver: ``ex_list_volumes``,
  ``ex_create_volume``, ``ex_destroy_volume``.
  (LIBCLOUD-649, GITHUB-430)
  [Wojciech Wirkijowski]

- Add ``list_volume_snapshots`` method to the OpenStack driver.
  (LIBCLOUD-663, GITHUB-450)
  [Allard Hoeve]

- Add Site to Site VPN functionality to CloudStack driver.
  (GITHUB-465)
  [Avi Nanhkoesingh]

- Add affinity group support to CloudStack driver
  (LIBCLOUD-671, GITHUB-468)
  [Mateusz Korszun]

- Add a support for a new AWS Frankfurt, Germany region (``eu-central-1``) to
  the EC2 driver using AWS Signature v4.
  (GITHUB-444)
  [Gertjan Oude Lohuis, Tomaz Muraus]

- Allow Filtering in EC2 list_images() driver
  (GITHUB-456, LIBCLOUD-667)
  [Katriel Traum]

- Add ex_list_ip_forwarding_rules() to CloudStack driver
  (GITHUB-483)
  [Atsushi Sasaki]

- Add AURORA compute driver
  (LIBCLOUD-641, GITHUB-477)
  [Wido den Hollander]

- Update ``ex_describe_tags`` method in the EC2 driver and allow user to list
  tags for any supported resource. Previously you could only list tags for a
  node or a storage volume.
  (LIBCLOUD-676, GITHUB-482)
  [John Kinsella]

- Various improvements in the HostVirual driver (code refactoring, support for
  managing "packages").
  (LIBCLOUD-670, GITHUB-472)
  [Dinesh Bhoopathy]

- Add support for DigitalOcean API v2.0 while maintaining support for the old
  API v2.0.

  Note: API v2.0 is now used by default. To use the old API v1.0, pass
  ``api_version='1.0'`` argument to the driver constructor.
  (GITHUB-442)
  [Andrew Starr-Bochicchio]

- Add new ``d4.`` instance types to the EC2 driver. Also update EC2 pricing data.
  (GITHUB-490)
  [Tomaz Muraus]

- Add new driver for Microsft Azure Virtual Machines service.
  (LIBCLOUD-556, GITHUB-305, GITHUB-499, GITHUB-538)
  [Michael Bennett, davidcrossland, Richard Conway, Matt Baldwin, Tomaz Muraus]

- Fix VPC lookup method in CloudStack driver
  (GITHUB-506)
  [Avi Nanhkoesingh]

- Add new driver for the Dimension Data provider based on the OpSource driver.
  (LIBCLOUD-698, GITHUB-507, LIBCLOUD-700, GITHUB-513)
  [Anthony Shaw]

- Add "virtualmachine_id" attribute to the ``CloudStackAddress`` class in the
  CloudStack driver.
  (LIBCLOUD-679, GITHUB-485)
  [Atsushi Sasaki]

- Allow user to pass filters via arguments to the
  ``ex_list_port_forwarding_rules`` in the CloudStack driver.
  (LIBCLOUD-678, GITHUB-484)
  [Atsushi Sasaki]

- Fix an issue with ``list_nodes`` in the CloudSigma driver throwing an
  exception if a node in the list had a static IP.
  (LIBCLOUD-707, GITHUB-514)
  [Chris O'Brien]

- Don't throw an exception if a limit for a particular CloudStack resource is
  "Unlimited" and not a number.
  (GITHUB-512)
  [Syed Mushtaq Ahmed]

- Allow user to pass ``ex_config_drive`` argument to the ``create_node`` method
  in the OpenStack driver.
  (LIBCLOUD-356, GITHUB-330)
  [Ryan Parrish]

- Add new driver for Cloudwatt (https://www.cloudwatt.com/en/) provider.
  (GITHUB-338)
  [Anthony Monthe]

- Add new driver for Packet (https://www.packet.com/) provider.
  (LIBCLOUD-703, GITHUB-527)
  [Aaron Welch]

- Update Azure VM pricing information and add information for new D instance
  types.
  (GITHUB-528)
  [Michael Bennett]

- Add ``ex_get_node`` and ``ex_get_volume`` methods to CloudStack driver.
  (GITHUB-532)
  [Anthony Monthe]

- Update CloudSigma driver so the "unavailable" and "paused" node state is
  correctly mapped to "error" and "paused" respectively.
  (GITHUB-517)
  [Chris O'Brien]

- Add SSH key pair management methods to the Gandi driver.
  (GITHUB-534)
  [Anthony Monthe]

- Add ``ex_get_node`` and ``ex_get_volume`` methods to Gandi driver.
  (GITHUB-534)
  [Anthony Monthe]

- Add ``fault`` attribute to the ``extra`` dictionary of the ``Node`` instance
  returned by the OpenStack driver.
  (LIBCLOUD-730, GITHUB-557)
  [Nick Fox]

- Add new driver for Onapp IaaS platform.
  (LIBCLOUD-691, GITHUB-502)
  [Matthias Wiesner]

- Allow user to inject custom data / script into the Azure node by passing
  ``ex_custom_data`` argument to the ``create_node`` method.
  (LIBCLOUD-726, GITHUB-554)
  [David Wilson]

- Add ``ex_create_cloud_service`` and ``ex_destroy_cloud_service`` method to the
  Azure driver.
  (LIBCLOUD-724, GITHUB-551)
  [David Wilson]

- Add support for passing user data when creating a DigitalOcean node
  (``ex_user_data`` argument).
  (LIBCLOUD-731, GITHUB-559)
  [David Wilson]

- Allow user to specify which arguments are passed to ``list_nodes`` method
  which is called inside ``wait_until_running`` by passing
  ``ex_list_nodes_kwargs`` argument to the ``wait_until_running`` method.
  (``ex_user_data`` argument).
  (LIBCLOUD-723, GITHUB-548)
  [David Wilson]

- Allow user to pass ``ex_volume_type`` argument to the ``create_volume`` method
  in the OpennStack driver.
  (GITHUB-553)
  [Rico Echwald-Tijsen]

- Add new driver for RunAbove (https://www.runabove.com) provider.
  (GITHUB-550)
  [Anthony Monthe]

- Fix a bug with exception being throw inside the CloudStack driver when the
  provider returned no error message in the body.
  (GITHUB-555)
  [Konstantin Skaburskas]

- Various improvements in the DigitalOcean driver:
   - Increase page size to API maximum.
   - Add ``ex_create_attr`` kwarg to ``create_node`` method.
   - Update all the ``list_*`` methods to use paginated requests
   - Allow user to specify page size by passing ``ex_per_page`` argument to the
     constructor.

  (LIBCLOUD-717, GITHUB-537)
  [Javier Castillo II]

Storage
~~~~~~~

- Fix a bug with authentication in the OpenStack Swift driver.
  (GITHUB-492, LIBCLOUD-635)
  [Tom Fifield]

- Add AuroraObjects Storage Driver.
  (GITHUB-540, LIBCLOUD-719)
  [Wido den Hollander]

Loadbalancer
~~~~~~~~~~~~

- Add a new driver for Softlayer load-balancing service
  (https://www.softlayer.com/load-balancing).
  (GITHUB-500, LIBCLOUD-688)
  [Avi Weit]

DNS
~~~

- Fix a bug when a ZoneDoesntExist exception was thrown when listing records
  for a zone which has no records in the HostVirtual driver.
  (GITHUB-460)
  [Vanč Levstik]

- Correctly handle MX records priority in the Route53 driver.
  (GITHUB-469)
  [Vanč Levstik]

- Allow user to create an A record which points directly to the domain zone
  name in the Route53 driver.
  (GITHUB-469)
  [Vanč Levstik]

- Fix delete_zone method in the HostVirtual driver.
  (GITHUB-461)
  [Vanč Levstik]

- Fix parsing of the record name in the HostVirtual driver.
  (GITHUB-461)
  [Vanč Levstik]

- Add new driver for DigitalOcean DNS service.
  (GITHUB-505)
  [Javier Castillo II]

Changes with Apache Libcloud 0.17.0
-----------------------------------

General
~~~~~~~

- Use ``match_hostname`` function from ``backports.ssl_match_hostname``
  package to verify the SSL certificate hostname instead of relying on
  our own logic.
  (GITHUB-374)
  [Alex Gaynor]

Compute
~~~~~~~

- Add new `eu-west-2` & `us-east-2` regions to the OUTSCALE_INC & OUTSCALE_SAS drivers.
  [Filipe Silva /lordshion]

- GCE driver updated to include ex_stop_node() and ex_start_node() methods.
  (GITHUB-442)
  [Eric Johnson]

- GCE driver now raises ResourceNotFoundError when the specified image is
  not found in any image project. Previously, this would return None but now
  raises the not-found exception instead. This fixes a bug where returning
  None caused ex_delete_image to raise an AttributeError.
  (GITHUB-441)
  [Eric Johnson]

- GCE driver update to support JSON format Service Account files and a PY3
  fix from Siim Põder for LIBCLOUD-627.
  (LIBCLOUD-627, LIBCLOUD-657, GITHUB-438)
  [Eric Johnson]

- GCE driver fixed for missing param on ex_add_access_config.
  (GITHUB-435)
  [Peter Mooshammer]

- GCE driver support for HTTP load-balancer resources.
  (LIBCLOUD-605, GITHUB-429)
  [Lee Verberne]

- GCE driver updated to make better use of GCEDiskTypes.
  (GITHUB-428)
  [Eric Johnson]

- GCE driver list_images() now returns all non-deprecated images by default.
  (LIBCLOUD-602, GITHUB-423)
  [Eric Johnson]

- Improve GCE API coverage for create_node().
  (GITHUB-419)
  [Eric Johnson]

- GCE Licenses added to the GCE driver.
  (GITHUB-420)
  [Eric Johnson]

- GCE Projects support common instance metadata and usage export buckets.
  (GITHUB-409)
  [Eric Johnson]

- Improvements to TargetPool resource in GCE driver.
  (GITHUB-414)
  [Eric Johnson]

- Adding TargetInstances resource to GCE driver.
  (GITHUB-393)
  [Eric Johnson]

- Adding DiskTypes resource to GCE driver.
  (GITHUB-391)
  [Eric Johnson]

- Fix boot disk auto_delete in GCE driver.
  (GITHUB-412)
  [Igor Bogomazov]

- Add Routes to GCE driver.
  (GITHUB-410)
  [Eric Johnson]

- Add missing ``ubuntu-os-cloud`` images to the GCE driver.
  (LIBCLOUD-632, GITHUB-385)
  [Borja Martin]

- Add new `us-east-2` and `us-east-3` region to the Joyent driver.
  (GITHUB-386)
  [Anthony Monthe]

- Add missing t2. instance types to the us-west-1 region in the EC2 driver.
  (GITHUB-388)
  [Matt Lehman]

- Add option to expunge VM on destroy in CloudStack driver.
  (GITHUB-382)
  [Roeland Kuipers]

- Add extra attribute in list_images for CloudStack driver.
  (GITHUB-389)
  [Loic Lambiel]

- Add ``ex_security_group_ids`` argument to the create_node method in the
  EC2 driver. This way users can launch VPC nodes with security groups.
  (GITHUB-373)
  [Itxaka Serrano]

- Add description argument to GCE Network.
  (GITHUB-397)
  [Eric Johnson]

- GCE: Improve MachineType (size) coverage of GCE API.
  (GITHUB-396)
  [Eric Johnson]

- GCE: Improved Images coverage.
  (GITHUB-395)
  [Eric Johnson]

- GCE: Support for global IP addresses.
  (GITHUB-390, GITHUB-394)
  [Eric Johnson]

- GCE: Add missing snapshot attributes.
  (GITHUB-401)
  [Eric Johnson]

- AWS: Set proper disk size in c3.X instance types.
  (GITHUB-405)
  [Itxaka Serrano]

- Fix a bug with handling of the ``ex_keyname`` argument in the Softlayer
  driver.
  (GITHUB-416, LIBCLOUD-647)
  [Dustin Oberloh]

- Update CloudSigma region list (remove Las Vegas, NV region and add new San
  Jose, CA and Miami, FL region).
  (GITHUB-417)
  [Viktor Petersson]

- Add ``ex_get_node`` method to the Joyent driver.
  (GITHUB-421)
  [Anthony Monthe]

- Add support for placement group management to the EC2 driver.
  (GITHUB-418)
  [Mikhail Ovsyannikov]

- Add new tok02 region to the Softlayer driver.
  (GITHUB-436, LIBCLOUD-656)
  [Dustin Oberloh]

- Add new Honolulu, HI endpoint to the CloudSigma driver.
  (GITHUB-439)
  [Stephen D. Spencer]

- Fix a bug with config_drive attribute in the OpenStack driver. New versions
  of OpenStack now return a boolean and not a string.
  (GITHUB-433)
  [quilombo]

- Add support for Abiquo API v3.x, remove support for now obsolete API v2.x.
  (GITHUB-433, LIBCLOUD-652)
  [David Freedman]

- Allow rootdisksize parameter in create_node CloudStack driver
  (GITHUB-440, LIBCLOUD-658)
  [Loic Lambiel]

Storage
~~~~~~~

- Allow user to pass ``headers`` argument to the ``upload_object`` and
  ``upload_object_via_stream`` method.

  This way user can specify CORS headers with the drivers which support that.
  (GITHUB-403, GITHUB-404)
  [Peter Schmidt]

- Fix upload_object_via_stream so it works correctly under Python 3.x if user
  manually passes an iterator to the method.

  Also improve how reading a file in chunks works with drivers which support
  chunked encoding - always try to fill a chunk with CHUNK_SIZE bytes instead
  of directly streaming the chunk which iterator returns.

  Previously, if iterator returned 1 byte in one iteration, we would directly
  send this as a single chunk to the API.
  (GITHUB-408, LIBCLOUD-639)
  [Peter Schmidt]

Loadbalancer
~~~~~~~~~~~~

- Updates to CloudStack driver.
  (GITHUB-434)
  [Jeroen de Korte]

DNS
~~~

- New driver for Softlayer DNS service.
  (GITHUB-413, LIBCLOUD-640)
  [Vanč Levstik]

- Fix a bug with ``ex_create_multi_value_record`` method in the Route53 driver
  only returning a single record.
  (GITHUB-431, LIBCLOUD-650)
  [Itxaka Serrano]

Changes with Apache Libcloud 0.16.0
-----------------------------------

General
~~~~~~~

- Add new ``OpenStackIdentity_3_0_Connection`` class for working with
  OpenStack Identity (Keystone) service API v3.
  [Tomaz Muraus]

- Add support for prettifying JSON or XML response body which is printed to a
  file like object when using ``LIBCLOUD_DEBUG`` environment variable.
  This option can be enabled by setting
  ``LIBCLOUD_DEBUG_PRETTY_PRINT_RESPONSE`` environment variable.
  [Tomaz Muraus]

- Add support for using an HTTP proxy for outgoing HTTP and HTTPS requests.
  [Tomaz Muraus, Philip Kershaw]

Compute
~~~~~~~

- Fix an issue with ``LIBCLOUD_DEBUG`` not working correctly with the
  Linode driver.
  [Tomaz Muraus, Juan Carlos Moreno]
  (LIBCLOUD-598, GITHUB-342)

- Add new driver for VMware vSphere (http://www.vmware.com/products/vsphere/)
  based clouds.
  [Tomaz Muraus]

- Add two new default node states - ``NodeState.SUSPENDED`` and
  ``NodeState.ERROR``.
  [Tomaz Muraus]

- Fix to join networks properly in ``deploy_node`` in the CloudStack
  driver.
  (LIBCLOUD-593, GITUHB-336)
  [Atsushi Sasaki]

- Create ``CloudStackFirewallRule`` class and corresponding methods.
  (LIBCLOUD-594, GITHUB-337)
  [Atsushi Sasaki]

- Add support for SSD disks to Google Compute driver.
  (GITHUB-339)
  [Eric Johnson]

- Add utility ``get_regions`` and ``get_service_names`` methods to the
  ``OpenStackServiceCatalog`` class.
  [Andrew Mann, Tomaz Muraus]

- Fix a bug in ``ex_get_console_output`` in the EC2 driver which would cause
  an exception to be thrown if there was no console output for a particular
  node.

  Reported by Chris DeRamus.
  [Tomaz Muraus]

- Add ip_address parameter in CloudStack driver ``create_node`` method.
  (GITHUB-346)
  [Roeland Kuipers]

- Fix ``ParamikoSSHClient.run`` and ``deploy_node`` method to work correctly
  under Python 3.
  (GITHUB-347)
  [Eddy Reyes]

- Update OpenStack driver to map more node states to states recognized by
  Libcloud.
  [Chris DeRamus]

- Fix a bug with ``ex_metadata`` argument handling in the Google Compute Engine
  driver ``create_node`` method.
  (LIBCLOUD-544, GITHUB-349, GITHUB-353)
  [Raphael Theberge]

- Add SSH key pair management methods to the Softlayer driver.
  (GITHUB-321, GITHUB-354)
  [Itxaka Serrano]

- Correctly categorize node IP addresses into public and private when dealing
  with OpenStack floating IPs.
  [Andrew Mann]

- Add new t2 instance types to the EC2 driver.
  [Tomaz Muraus]

- Add support for Amazon GovCloud to the EC2 driver (us-gov-west-1 region).
  [Chris DeRamus]

- Allow user to pass "gp2" for "ex_volume_type" argument to the create_volume
  method in the EC2 driver.

  Reported by Xavier Barbosa.
  [Tomaz Muraus, Xavier Barbosa]

- Add new driver for ProfitBricks provider.
  (LIBCLOUD-589, GITHUB-352)
  [Matt Baldwin]

- Various improvements and bugs fixes in the GCE driver. For a list, see
  https://github.com/apache/libcloud/pull/360/commits
  (GITHUB-360)
  [Evgeny Egorochkin]

- Allow user to specify virtualization type when registering an EC2 image by
  passing ``virtualization_type`` argument to the ``ex_register_image`` method.
  (GITHUB-361)
  [Andy Grimm]

- Add ``ex_create_image`` method to the GCE driver.
  (GITHUB-358, LIBCLOUD-611)
  [Katriel Traum]

- Add some methods to CloudStack driver:
  create_volume_snapshot, list_snapshots, destroy_volume_snapshot
  create_snapshot_template, ex_list_os_types)
  (GITHUB-363, LIBCLOUD-616)
  [Oleg Suharev]

- Added VPC support and Egress Firewall rule support fo CloudStack
  (GITHUB-363)
  [Jeroen de Korte]

- Add additional attributes to the ``extra`` dictionary of OpenStack
  StorageVolume object.
  (GITHUB-366)
  [Gertjan Oude Lohuis]

- Fix ``create_volume`` method in the OpenStack driver to return a created
  volume object (instance of StorageVolume) on success, instead of a boolean
  indicating operation success.
  (GITHUB-365)
  [Gertjan Oude Lohuis]

- Add optional project parameters for ex_list_networks() to CloudStack driver
  (GITHUB-367, LIBCLOUD-615)
  [Rene Moser]

- CLOUDSTACK: option to start VM in a STOPPED state
  (GITHUB-368)
  [Roeland Kuipers]

- Support "config_drive" in the OpenStack driver. Allow users to pass
  ``ex_config_drive`` argument to the ``create_node`` and ``ex_rebuild_node``
  method.
  (GITHUB-370)
  [Nirmal Ranganathan]

- Add support for service scopes to the ``create_node`` method in the GCE
  driver.
  (LIBCLOUD-578, GITHUB-373)
  [Eric Johnson]

- Update GCE driver to allow for authentication with internal metadata service.
  (LIBCLOUD-625, LIBCLOUD-276, GITHUB-276)
  [Eric Johnson]

- Fix a bug in Elasticstack node creation method where it would raise
  exceptions because of missing data in a response, and also fix pulling the
  IP from the proper data item.
  (GITHUB-325)
  [Michael Bennett]

- Fix a bug which prevented user to connect and instantiate multiple EC2 driver
  instances for different regions at the same time.
  (GITHUB-325)
  [Michael Bennett]

- Add methods in CloudStack driver to manage mutiple nics per vm.
  (GITHUB-369)
  [Roeland Kuipers]

- Implements VPC network ACLs for CloudStack driver.
  (GITHUB-371)
  [Jeroen de Korte]

Storage
~~~~~~~

- Fix a bug with CDN requests in the CloudFiles driver.
  [Tomaz Muraus]

- Fix a bug with not being able to specify meta_data / tags when uploading an
  object using Google Storage driver.
  (LIBCLOUD-612, GITHUB-356)
  [Stefan Friesel]

Loadbalancer
~~~~~~~~~~~~

- Allow user to specify session affinity algorithm in the GCE driver by passing
  ``ex_session_affinity`` argument to the ``create_balancer`` method.
  (LIBCLOUD-595, GITHUB-341)
  [Lee Verberne, Eric Johnson]

DNS
~~~

- Various fixes in the Google DNS driver.
  (GITHUB-378)
  [Franck Cuny]

Changes with Apache Libcloud 0.15.1
-----------------------------------

Compute
~~~~~~~

- Allow user to limit a list of subnets which are returned by passing
  ``subnet_ids`` and ``filters`` argument to the ``ex_list_subnets``
  method in the EC2 driver.
  (LIBCLOUD-571, GITHUB-306)
  [Lior Goikhburg]

- Allow user to limit a list of internet gateways which are returned by
  passing ``gateway_ids`` and ``filters`` argument to the
  ``ex_list_internet_gateways`` method in the EC2 driver.
  (LIBCLOUD-572, GITHUB-307)
  [Lior Goikhburg]

- Allow user to filter which nodes are returned by passing ``ex_filters``
  argument to the ``list_nodes`` method in the EC2 driver.
  (LIBCLOUD-580, GITHUB-320)
  [Lior Goikhburg]

- Add network_association_id to ex_list_public_ips and CloudstackAddress object
  (GITHUB-327)
  [Roeland Kuipers]

- Allow user to specify admin password by passing ``ex_admin_pass`` argument
  to the ``create_node`` method in the Openstack driver.
  (GITHUB-315)
  [Marcus Devich]

- Fix a possible race condition in deploy_node which would occur if node
  is online and can be accessed via SSH, but the SSH key we want to use hasn't
  been installed yet.

  Previously, we would immediately throw if we can connect, but the SSH key
  hasn't been installed yet.
  (GITHUB-331)
  [David Gay]

- Propagate an exception in ``deploy_node`` method if user specified an invalid
  path to the private key file. Previously this exception was silently swallowed
  and ignored.
  [Tomaz Muraus]

DNS
~~~

- Include a better message in the exception which is thrown when a request
  in the Rackspace driver ends up in an ``ERROR`` state.
  [Tomaz Muraus]

Changes with Apache Libcloud 0.15.0
-----------------------------------

General
~~~~~~~

- Use lxml library (if available) for parsing XML. This should substantially
  reduce parsing time and memory usage for large XML responses (e.g. retrieving
  all the available images in the EC2 driver).
  [Andrew Mann]

- Use --head flag instead of -X HEAD when logging curl lines for HEAD requests
  in debug mode.

  Reported by Brian Metzler.
  (LIBCLOUD-552)
  [Tomaz Muraus]

- Fix Python 3 compatibility bugs in the following functions:

  * import_key_pair_from_string in the EC2 driver
  * publickey._to_md5_fingerprint
  * publickey.get_pubkey_ssh2_fingerprint

  (GITHUB-301)
  [Csaba Hoch]

- Update CA_CERTS_PATH to also look for CA cert bundle which comes with
  openssl Homebrew formula on OS x (/usr/local/etc/openssl/cert.pem).
  (GITHUB-309)
  [Pedro Romano]

- Update Google drivers to allow simultaneous authornization for all the
  supported Google Services.
  (GITHUB-302)
  [Eric Johnson]

Compute
~~~~~~~

- Fix create_key_pair method which was not returning private key.
  (LIBCLOUD-566)
  [Sebastien Goasguen]

- Map "Stopped" node state in the CloudStack driver to NodeState.STOPPED
  instead of NodeState.TERMINATED, "Stopping" to NodeState.PENDING instead of
  NodeState.TERMINATED and "Expunging" to NodeState.PENDING instead of
  NodeState.TERMINATED.
  (GITHUB-246)
  [Chris DeRamus, Tomaz Muraus]

- Add ex_create_tags and ex_delete_tags method to the CloudStack driver.
  (LIBCLOUD-514, GITHUB-248)
  [Chris DeRamus]

- Add new G2 instances to the EC2 driver.
  [Tomaz Muraus]

- Add support for multiple API versions to the Eucalyptus driver and allows
  user to pass "api_version" argument to the driver constructor.
  (LIBCLOUD-516, GITHUB-249)
  [Chris DeRamus]

- Map "Powered Off" state in the vCloud driver from "TERMINATED" to "STOPPED".
  (GITHUB-251)
  [Ash Berlin]

- Add ex_rename_node method to the DigitalOcean driver.
  (GITHUB-252)
  [Rahul Ranjan]

- Improve error parsing in the DigitalOcean driver.

  Reported by Deni Bertovic.
  [Tomaz Muraus]

- Add extension methods for the VPC internet gateway management to the EC2
  driver.
  (LIBCLOUD-525, GITHUB-255)
  [Chris DeRamus]

- Add CloudStackProject class to the CloudStack driver and add option to select
  project and disk offering on node creation.
  (LIBCLOUD-526, GITHUB-257)
  [Jim Divine]

- Fix IP address handling in the OpenStack driver.
  (LIBCLOUD-503, GITHUB-235)
  [Markos Gogoulos]

- Ad new ex_delete_image and ex_deprecate_image method to the GCE driver.
  (GITHUB-260)
  [Franck Cuny]

- Ad new ex_copy_image method to the GCE driver.
  (GITHUB-258)
  [Franck Cuny]

- Ad new ex_set_volume_auto_delete method to the GCE driver.
  (GITHUB-264)
  [Franck Cuny]

- Add ex_revoke_security_group_ingress method to the CloudStack driver.
  [Chris DeRamus, Tomaz Muraus]

- Allow user to pass ex_ebs_optimized argument to the create_node method
  in the EC2 driver.
  (GITHUB-272)
  [zerthimon]

- Add "deprecated" attribute to the Node object in the Google Compute Engine
  driver.
  (GITHUB-276)
  [Chris / bassdread]

- Update Softlayer driver to use "fullyQualifiedDomainName" instead of
  "hostname" attribute for the node name.
  (GITHUB-280)
  [RoelVanNyen]

- Allow user to specify target tags using target_tags attribute when creating
  a firewall rule in the GCE driver.
  (GITHUB-278)
  [zerthimon]

- Add new standard API for image management and initial implementation for the
  EC2 and Rackspace driver.
  (GITHUB-277)
  [Matt Lehman]

- Allow user to specify "displayname" attribute when creating a CloudStack node
  by passing "ex_displayname" argument to the method.

  Also allow "name" argument to be empty (None). This way CloudStack
  automatically uses Node's UUID for the name.
  (GITHUB-289)
  [Jeff Moody]

- Deprecate "key" argument in the SSHClient class in favor of new "key_files"
  argument.

  Also add a new "key_material" argument. This argument can contain raw string
  version of a private key.

  Note 1: "key_files" and "key_material" arguments are mutually exclusive.
  Note 2: "key_material" argument is not supported in the ShellOutSSHClient.

- Use node id attribute instead of the name for the "lconfig" label in the
  Linode driver. This way the label is never longer than 48 characters.
  (GITHUB-287)
  [earthgecko]

- Add a new driver for Outscale SAS and Outscale INC cloud
  (http://www.outscale.com).
  (GITHUB-285, GITHUB-293, LIBCLOUD-536, LIBCLOUD-553)
  [Benoit Canet]

- Add new driver for HP Public Cloud (Helion) available via Provider.HPCLOUD
  constant.
  [Tomaz Muraus]

- Allow user to specify availability zone when creating an OpenStack node by
  passing "ex_availability_zone" argument to the create_node method.
  Note: This will only work if the OpenStack installation is running
  availability zones extension.
  (GITHUB-295, LIBCLOUD-555)
  [syndicut]

- Allow user to pass filters to ex_list_networks method in the EC2 driver.
  (GITHUB-294)
  [zerthimon]

- Allow user to retrieve container images using ex_get_image method in the
  Google Compute Engine driver.
  (GITHUB-299, LIBCLOUD-562)
  [Magnus Andersson]

- Add new driver for Kili public cloud (http://kili.io/)
  [Tomaz Muraus]

- Add "timeout" argument to the ParamikoSSHClient.run method. If this argument
  is specified and the command passed to run method doesn't finish in the
  defined timeout, `SSHCommandTimeoutError` is throw and the connection to the
  remote server is closed.

  Note #1: If timed out happens, this functionality doesn't guarantee that the
  underlying command will be stopped / killed. The way it works it simply
  closes a connect to the remote server.
  [Tomaz Muraus]

  Note #2: "timeout" argument is only available in the Paramiko SSH client.

- Make "cidrs_ips" argument in the ex_authorize_security_group_egress method in
  the EC2 driver mandatory.
  (GITHUB-301)
  [Csaba Hoch]

- Add extension methods for managing floating IPs (ex_get_floating_ip,
  ex_create_floating_ip, ex_delete_floating_ip) to the Openstack 1.1 driver.
  (GITHUB-301)
  [Csaba Hoch]

- Fix bug in RimuHosting driver which caused driver not to work when the
  provider returned compressed (gzip'ed) response.
  (LIBCLOUD-569, GITHUB-303)
  [amastracci]

- Fix issue with overwriting the server memory values in the RimuHosting
  driver.
  (GUTHUB-308)
  [Dustin Oberloh]

- Add ex_all_tenants argument to the list_nodes method in the OpenStack driver.
  (GITHUB-312)
  [LIBCLOUD-575, Zak Estrada]

- Add support for network management for advanced zones
  (ex_list_network_offerings, ex_create_network, ex_delete_network) in the
  CloudStack driver.
  (GITHUB-316)
  [Roeland Kuipers]

- Add extension methods for routes and route table management to the EC2
  driver (ex_list_route_tables, ex_create_route_table, ex_delete_route_table,
  ex_associate_route_table, ex_dissociate_route_table,
  ex_replace_route_table_association, ex_create_route, ex_delete_route,
  ex_replace_route)
  (LIBCLOUD-574, GITHUB-313)
  [Lior Goikhburg]

- Fix ex_list_snapshots for HP Helion OpenStack based driver.
  [Tomaz Muraus]

- Allow user to specify volume type and number of IOPS when creating a new
  volume in the EC2 driver by passing ``ex_volume_type`` and ``ex_iops``
  argument to the ``create_volume`` method.
  [Tomaz Muraus]

- Fix ex_unpause_node method in the OpenStack driver.
  (GITHUB-317)
  [Pablo Orduña]

- Allow user to launch EC2 node in a specific VPC subnet by passing
  ``ex_subnet`` argument to the create_node method.
  (GITHUB-318)
  [Lior Goikhburg]

Storage
~~~~~~~

- Fix container name encoding in the iterate_container_objects and
  get_container_cdn_url method in the CloudFiles driver. Previously, those
  methods would throw an exception if user passed in a container name which
  contained a whitespace.

  Reported by Brian Metzler.
  (LIBCLOUD-552)
  [Tomaz MUraus]

- Fix a bug in the OpenStack Swift driver which prevented the driver to work
  with installations where region names in the service catalog weren't upper
  case.
  (LIBCLOUD-576, GITHUB-311)
  [Zak Estrada]

Load Balancer
~~~~~~~~~~~~~

- Add extension methods for policy managagement to the ELB driver.
  (LIBCLOUD-522, GITHUB-253)
  [Rahul Ranjan]

DNS
~~~

- Fix update_record method in the Route56 driver so it works correctly for
  records with multiple values.
  [Tomaz Muraus]

- Add ex_create_multi_value_record method to the Route53 driver which allows
  user to create a record with multiple values with a single call.
  [Tomaz Muraus]

- Add new driver for Google DNS.
  (GITHUB-269)
  [Franck Cuny]

Changes with Apache Libcloud 0.14.1
-----------------------------------

Compute
~~~~~~~

- Add new m3.medium and m3.large instance information to the EC2 driver.
  [Tomaz Muraus]

- Add a new driver for CloudSigma API v2.0.
  [Tomaz Muraus]

- Add "volume_id" attribute to the Node "extra" dictionary in the EC2 driver.
  Also fix the value of the "device" extra attribute in the StorageVolume
  object. (LIBCLOUD-501)
  [Oleg Suharev]

- Add the following extension methods to the OpenStack driver: ex_pause_node,
  ex_unpause_node, ex_suspend_node, ex_resume_node.
  (LIBCLOUD-505, GITHUB-238)
  [Chris DeRamus]

- Add ex_limits method to the CloudStack driver.
  (LIBCLOUD-507, GITHUB-240)
  [Chris DeRamus]

- Add "extra" dictionary to the CloudStackNode object and include more
  attributes in the "extra" dictionary of the network and volume object.
  (LIBCLOUD-506, GITHUB-239)
  [Chris DeRamus]

- Add ex_register_image method to the EC2 driver.
  (LIBCLOUD-508, GITHUB-241)
  [Chris DeRamus]

- Add methods for managing volume snapshots to the OpenStack driver.
  (LIBCLOUD-512, GITHUB-245)
  [Chris DeRamus]

Load Balancer
~~~~~~~~~~~~~

- Fix a bug in the ex_targetpool_add_node and ex_targetpool_remove_node method
  in the GCE driver.
  [Rick Wright]

Storage
~~~~~~~

- Allow user to use an internal endpoint in the CloudFiles driver by passing
  "use_internal_url" argument to the driver constructor.
  (GITHUB-229, GITHUB-231)
  [John Obelenus]

DNS
~~~

- Add PTR to the supported record types in the Rackspace driver.
  [Tomaz Muraus]

- Fix Zerigo driver to set Record.name attribute for records which refer
  to the bare domain to "None" instead of an empty string.
  [Tomaz Muraus]

- For consistency with other drivers, update Rackspace driver to set
  Record.name attribute for the records which refer to the bare domain
  to "None" instead of setting them to FQDN.
  [Tomaz Muraus]

- Update Rackspace driver to support paginating through zones and records.
  (GITHUB-230)
  [Roy Wellington]

- Update Route53 driver so it supports handling records with multiple values
  (e.g. MX).
  (LIBCLOUD-504, GITHUB-237)
  [Chris DeRamus]

- Update Route53 driver to better handle SRV records.
  [Tomaz Muraus]

- Update Route53 driver, make sure "ttl" attribute in the Record extra
  dictionary is always an int.
  [Tomaz Muraus]

Changes with Apache Libcloud 0.14.0
-----------------------------------

General
~~~~~~~

- Update API endpoints which are used in the HostVirtual drivers.
  (LIBCLOUD-489)
  [Dinesh Bhoopathy]

- Add support for Amazon security token to the Amazon drivers.
  (LIBCLOUD-498, GITHUB-223)
  [Noah Kantrowitz]

Compute
~~~~~~~

- Remove Slicehost driver.

  SliceHost API has been shut down in 2012 so it makes no sense to keep
  this driver.
  [Tomaz Muraus]

- Modify drivers for public cloud providers which use HTTP Basic
  authentication to not allow insecure connections (secure constructor
  kwarg being set to False) by default.

  This way credentials can't accidentally be sent in plain text over the
  write.

  Affected drivers: Bluebox, Joyent, NephoScale, OpSource, VPSNet
  [Tomaz Muraus]

- Remove "public_ip" and "private_ip" property which has been deprecated in
  0.7.0 from the Node object.
  [Tomaz Muraus]

- Move "is_private_ip" and "is_valid_ip_address" function from
  libcloud.compute.base into libcloud.utils.networking module.
  [Tomaz Muraus]

- Allow user to pass "url" argument to the CloudStack driver constructor.
  This argument can be provided instead of "host" and "path" arguments and
  can contain a full URL to the API endpoint. (LIBCLOUD-430)
  [Tomaz Muraus]

- Allow user to pass None as a "location" argument to the create_node
  method. (LIBCLOUD-431)
  [Tomaz Muraus]

- Refactor CloudStack Connection class so it looks more like other
  connection classes and user can specify which attributes to send as part
  of query parameters in the GET request and which inside the body of a POST
  request.
  [Tomaz Muraus, Philipp Strube]

- Add a new driver for Exoscale (https://www.exoscale.ch/) provider.
  [Tomaz Muraus]

- Fix a bug in Abiquo driver which caused the driver to fail if the endpoint
  URL didn't start with "/api". (LIBCLOUD-447)

  Reported by Igor Ajdisek.
  [Tomaz Muraus]

- Modify CloudStack driver to correctly throw InvalidCredsError exception if
  invalid credentials are provided.
  [Tomaz Muraus]

- Don't throw an exception if a node object is missing an "image" attribute
  in the list nodes / get node response.

  This could happen if node is in an error state. (LIBCLOUD-455)
  [Dustin Spicuzza, Tomaz Muraus]

- Update CloudStack driver to better handle errors and throw ProviderError
  instead of a generic Exception.
  [Tomaz Muraus]

- Modify ex_list_networks methods in CloudStack driver to not thrown if there
  are no networks available.
  [Tomaz Muraus]

- Bump API version used in the EC2 driver from 2010-08-21 to 2013-10-15.
  (LIBCLOUD-454)
  [Tomaz Muraus]

- Add ex_get_limits method for retrieving account resource limits to the
  EC2 driver.
  [Tomaz Muraus]

- Update us-west-1 region in the EC2 driver to include c3 instance types.
  Also include pricing information.
  [Tomaz Muraus]

- For consistency, rename "ex_add_ip_forwarding_rule" method to
  "ex_create_ip_forwarding_rule".
  (GITHUB-196)
  [Oleg Suharev]

- Add support for new "i2" instance types to Amazon EC2 driver. Also
  update pricing file. (LIBCLOUD-465)
  [Chris DeRamus]

- Allow user to specify VPC id when creating a security group in the EC2
  driver by passing "vpc_id" argument to ex_create_security_group method.
  (LIBCLOUD-463, GITHUB-201)
  [Chris DeRamus]

- Add extension methods for managing security group rules
  (ex_authorize_security_group_ingress, ex_authorize_security_group_egress,
  ex_revoke_security_group_ingress, ex_revoke_security_group_egress) to the
  EC2 driver. (LIBCLOUD-466, GITHUB-202)
  [Chris DeRamus]

- Add extension methods for deleting security groups
  (ex_delete_security_group, ex_delete_security_group_by_id,
  ex_delete_security_group_by_name) to the EC2 driver.
  (LIBCLOUD-464, GITHUB-199)
  [Chris DeRamus]

- Add extension method for listing reserved instances
  (ex_list_reserved_nodes) to the EC2 driver. (LIBCLOUD-469, GITHUB-205)
  [Chris DeRamus]

- Add extension methods for VPC management (ex_list_networks,
  ex_create_network, ex_delete_network) to the EC2 driver.
  (LIBCLOUD-467, GITHUB-203)
  [Chris DeRamus]

- Add extension methods for VPC subnet management (ex_list_subnets,
  ex_create_subnet, ex_delete_subnet) to the EC2 driver.
  (LIBCLOUD-468, GITHUB-207)
  [Chris DeRamus]

- Add ex_get_console_output extension method to the EC2 driver.
  (LIBCLOUD-471, GITHUB-209)
  [Chris DeRamus]

- Include additional provider-specific attributes in the 'extra' dictionary
  of the StorageVolume class in the EC2 driver. (LIBCLOUD-473, GITHUB-210)
  [Chris DeRamus]

- Change attribute name in the 'extra' dictionary of EC2 and CloudStack
  Node object from "keyname" to "key_name". (LIBCLOUD-475)
  [Oleg Suharev]

- Fix a deployment issue which would some times cause a process to hang if
  the executed deployment script printed a lot of output to stdout or stderr.
  [Tomaz Muraus]

- Add additional attributes to the "extra" dictionary of the VolumeSnapshot
  object in the EC2 driver.

  Also modify create_volume_snapshot method to correctly handle "name"
  argument. Previous, "name" argument was used as a snapshot description,
  now it's used as a Tag with a key "Name". (LIBCLOUD-480, GITHUB-214)
  [Chris DeRamus]

- Store additional attributes (iops, tags, block_device_mapping) in the
  "extra" dictionary of the NodeImage object in the EC2 driver.

  Also fix ex_image_ids filtering in the list_images method.
  (LIBCLOUD-481, GITHUB-215)
  [Chris DeRamus]

- Add extension methods for network interface management
  (ex_list_network_interfaces, ex_create_network_interface,
  ex_attach_network_interface_to_node, ex_detach_network_interface,
  ex_delete_network_interface) to the EC2 driver. (LIBCLOUD-474)
  [Chris DeRamus]

- Update Google Compute Engine driver to use and work with API v1.
  (LIBCLOUD-450)
  [Rick Wright]

- Modify ParamikoSSHClient so that "password" and "key" arguments are not
  mutually exclusive and both can be provided. (LIBCLOUD-461, GITHUB-194)
  [Markos Gogoulos]

- Add extension methods for the Elastic IP management to the EC2 driver.
  Also modify "ex_allocate_address" and "ex_release_address" method to
  take "domain" argument so it also works with VPC.
  (LIBCLOUD-470, GITHUB-208, GITHUB-220)
  [Chris DeRamus]

- Add additional provider specific attributes to the "extra" dictionary of
  the Node object in the EC2 driver. (LIBCLOUD-493, GITHUB-221)
  [Chris DeRamus]

- Add ex_copy_image and ex_create_image_from_node method to the EC2 driver.
  (LIBCLOUD-494, GITHUB-222)
  [Chris DeRamus]

Storage
~~~~~~~

- Allow user to specify 'Content-Disposition' header in the CloudFiles
  driver by passing 'content_disposition' key in the extra dictionary of
  the upload object methods. (LIBCLOUD-430)
  [Michael Farrell]

- Fix CloudFiles driver so it references a correct service catalog entry for
  the CDN endpoint.

  This was broken in the 0.14.0-beta3 release when we migrated all the
  Rackspace drivers to use auth 2.0 by default. (GITHUB-186)
  [John Obelenus]

- Update storage drivers to default to "application/octet-stream"
  Content-Type if none is provided and none can be guessed.
  (LIBCLOUD-433)
  [Michael Farrell]

- Fix a bug so you can now upload 0 bytes sized objects using multipart
  upload in the S3 driver. (LIBCLOUD-490)

  Reported by Noah Kantrowitz.
  [Tomaz Muraus]

- Update OpenStack Swift driver constructor so it accepts "region",
  "ex_force_service_type" and "ex_force_service_name" argument.
  [Tomaz Muraus]

- Deprecate "CLOUDFILES_SWIFT" provider constant in favor of new
  "OPENSTACK_SWIFT" one.
  [Tomaz Muraus]

- Add support for setting an ACL when uploading and object.
  (LIBCLOUD-497, GITHUB-223)
  [Noah Kantrowitz]

- Modify get_container method to use a more efficient "HEAD"
  approach instead of calling list_containers + doing late
  filterting.
  (LIBCLOUD-498, GITHUB-223)
  [Noah Kantrowitz]

DNS
~~~

- Implement iterate_* methods in the Route53 driver and makes it work
  correctly if there are more results which can fit on a single page.
  Previously, only first 100 results were returned. (LIBCLOUD-434)
  [Chris Clarke]

- Update HostVirtual driver constructor to only take "key" and other valid
  arguments. Previously it also took "secret" argument which it silently
  ignored. (LIBCLOUD-483)

  Reported by  Andrew Udvare.
  [Tomaz Muraus]

- Fix list_records method in the HostVirtual driver.
  (LIBCLOUD-484, GITHUB-218)

  Reported by Andrew Udvare.
  [Dinesh Bhoopathy]

Changes with Apache Libcloud 0.14.0-beta3
-----------------------------------------

General
~~~~~~~

- If the file exists, read pricing data from ~/.libcloud/pricing.json
  by default. If the file doesn't exist, fall back to the old behavior
  and use pricing data which is bundled with the release.
  [Tomaz Muraus]

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

- Fix libcloud.utils.py3.urlquote so it works with unicode strings under
  Python 2. (LIBCLOUD-429)
  [Michael Farrell]

Compute
~~~~~~~

- Refactor Rackspace driver classes and make them easier to use. Now there
  are two Rackspace provider constants - Provider.RACKSPACE which
  represents new next-gen OpenStack servers and
  Provider.RACKSPACE_FIRST_GEN which represents old first-gen cloud
  servers.

  Note: This change is backward incompatible. For more information on those
  changes and how to update your code, please visit "Upgrade Notes"
  documentation page - http://s.apache.org/lc0140un
  [Tomaz Muraus]

- Deprecate the following EC2 provider constants: EC2_US_EAST,
  EC2_EU, EC2_EU_WEST, EC2_AP_SOUTHEAST, EC2_AP_NORTHEAST,
  EC2_US_WEST_OREGON, EC2_SA_EAST, EC2_SA_EAST and replace it with a new
  EC2 constant.
  Driver referenced by this new constant now takes a "region" argument which
  dictates to which region to connect.

  Note: Deprecated constants will continue to work until the next major
  release. For more information on those changes and how to update your
  code, please visit "Upgrade Notes" documentation page -
  http://s.apache.org/lc0140un
  [Tomaz Muraus]

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

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

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

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

- Update EC2 driver to accept the auth kwarg (it will accept NodeAuthSSH
  objects and automatically import a public key that is not already
  uploaded to the EC2 keyring). (Follow on from LIBCLOUD-367).
  [John Carr]

- Unify extension argument names for assigning a node to security groups
  in EC2 and OpenStack driver.
  Argument in the EC2 driver has been renamed from ex_securitygroup to
  ex_security_groups. For backward compatibility reasons, old argument
  will continue to work until the next major release. (LIBCLOUD-375)
  [Tomaz Muraus]

- Add ex_import_keypair_from_string and ex_import_keypair method to the
  CloudStack driver. (LIBCLOUD-380)
  [Sebastien Goasguen]

- Add support for managing floating IP addresses to the OpenStack driver.
  (LIBCLOUD-382)
  [Ivan Kusalic]

- Add extension methods for handling port forwarding to the CloudStack
  driver, rename CloudStackForwardingRule class to
  CloudStackIPForwardingRule. (LIBCLOUD-348, LIBCLOUD-381)
  [sebastien goasguen]

- Hook up deploy_node functionality in the CloudStack driver and unify
  extension arguments for handling security groups. (LIBCLOUD-388)
  [sebastien goasguen]

- Allow user to pass "args" argument to the ScriptDeployment and
  ScriptFileDeployment class. This argument tells which command line
  arguments get passed to the ScriptDeployment script. (LIBCLOUD-394)

  Note: This change is backward incompatible. For more information on how
  this affects your code and how to update it, visit "Upgrade Notes"
  documentation page - http://s.apache.org/lc0140un
  [Tomaz Muraus]

- Allow user to specify IAM profile to use when creating an EC2 node.
  (LIBCLOUD-403)
  [Xavier Barbosa]

- Add support for keypair management to the OpenStack driver.
  (LIBCLOUD-392)
  [L. Schaub]

- Allow user to specify disk partitioning mode using ex_disk_config argument
  in the OpenStack based drivers. (LIBCLOUD-402)
  [Brian Curtin]

- Add new driver for NephoScale provider (http://nephoscale.com/).
  (LIBCLOUD-404)
  [Markos Gogoulos]

- Update network related extension methods so they work correctly with
  both, OpenStack and Rackspace driver. (LIBCLOUD-368)
  [Tomaz Muraus]

- Add tests for networking functionality in the OpenStack and Rackspace
  driver.
  [Tomaz Muraus]

- Allow user to pass all supported extension arguments to ex_rebuild_server
  method in the OpenStack driver. (LIBCLOUD-408)
  [Dave King]

- Add pricing information for Rackspace Cloud Sydney region.
  [Tomaz Muraus]

- Update EC2 instance type map and pricing data. High Storage instances are
  now also available in Sydney and Singapore region.
  [Tomaz Muraus]

- Add new methods for managing storage volumes and snapshots to the EC2
  driver (list_volumes, list_snapshots, destroy_volume_snapshot,
  create_volume_snapshot) (LIBCLOUD-409)
  [Oleg Suharev]

- Add the following new extension methods to EC2 driver: ex_destroy_image,
  ex_modify_instance_attributes, ex_delete_keypair. (LIBCLOUD-409)
  [Oleg Suharev]

- Allow user to specify a port range when creating a port forwarding rule.
  (LIBCLOUD-409)
  [Oleg Suharev]

- Align Joyent driver with other drivers and deprecate "location" argument
  in the driver constructor in favor of "region" argument.

  Note: Deprecated argument will continue to work until the next major
  release.
  [Tomaz Muraus]

- Deprecate the following ElasticHosts provider constants: ELASTICHOSTS_UK1,
  ELASTICHOSTS_UK2, ELASTICHOSTS_US1, ELASTICHOSTS_US2, ELASTICHOSTS_US3,
  ELASTICHOSTS_CA1, ELASTICHOSTS_AU1, ELASTICHOSTS_CN1 and replace it with a
  new ELASTICHOSTS constant.
  Driver referenced by this new constant now takes a "region" argument which
  dictates to which region to connect.

  Note: Deprecated constants will continue to work until the next major
  release. For more information on those changes and how to update your
  code, please visit "Upgrade Notes" documentation page -
  http://s.apache.org/lc0140un (LIBCLOUD-383)
  [Michael Bennett, Tomaz Muraus]

- Add log statements to our ParamikoSSHClient wrapper. This should make
  debugging deployment issues easier. (LIBCLOUD-414)
  [Tomaz Muraus]

- Add new "NodeState.STOPPED" node state. Update HostVirual and EC2 driver to
  also recognize this new state. (LIBCLOUD-296)
  [Jayy Vis]

- Add new Hong Kong endpoint to Rackspace driver.
  [Brian Curtin]

- Fix ex_delete_keypair method in the EC2 driver. (LIBCLOUD-415)
  [Oleg Suharev]

- Add the following new extension methods for elastic IP management to the
  EC2 driver: ex_allocate_address, ex_disassociate_address,
  ex_release_address. (LIBCLOUD-417)
  [Patrick Armstrong]

- For consistency and accuracy, rename "ex_associate_addresses" method in the
  EC2 driver to "ex_associate_address_with_node".

  Note: Old method will continue to work until the next major release.
  [Tomaz Muraus]

- Add new driver for CloudFrames (http://www.cloudfounders.com/CloudFrames)
  provider. (LIBCLOUD-358)
  [Bernard Kerckenaere]

- Update default kernel versions which are used when creating a Linode
  server.

  Old default kernel versions:

  - x86 - 2.6.18.8-x86_64-linode1
  - x86_64 - 2.6.39.1-linode34

  New default kernel versions:

  - x86 - 3.9.3-x86-linode52
  - x86_64 - 3.9.3-x86_64-linode33

  (LIBCLOUD-424)
  [Tomaz Muraus, Jon Chen]

- Disable cache busting functionality in the OpenStack and Rackspace next-gen
  driver and enable it only for Rackspace first-gen driver.
  [Tomaz Muraus]

- Update Google Compute Engine driver to v1beta16.
  [Rick Wright]

- Modify auth_url variable in the OpenStack drivers so it works more like
  users would expect it to.

  Previously path specified in the auth_url was ignored and only protocol,
  hostname and port were used. Now user can provide a full url for the
  auth_url variable and the path provided in the url is also used.
  [DaeMyung Kang, Tomaz Muraus]

- Allow user to associate arbitrary key/value pairs with a node by passing
  "ex_metadata" argument (dictionary) to create_node method in the EC2
  driver.
  Those values are associated with a node using tags functionality.
  (LIBCLOUD-395)
  [Ivan Kusalic]

- Add "ex_get_metadata" method to EC2 and OpenStack driver. This method reads
  metadata dictionary from the Node object. (LIBCLOUD-395)
  [Ivan Kusalic]

- Multiple improvements in the Softlayer driver:
    - Map "INITIATING" node state to NodeState.PENDING
    - If node is launching remap "halted" state to "pending"
    - Add more node sizes
    - Add ex_stop_node and ex_start_node method
    - Update tests response fixtures

  (LIBCLOUD-416)
  [Markos Gogoulos]

- Modify list_sizes method in the KT UCloud driver to work, even if the item
  doesn't have 'diskofferingid' attribute. (LIBCLOUD-435)
  [DaeMyung Kang]

- Add new c3 instance types to the EC2 driver.
  [Tomaz Muraus]

- Fix an issue with the ex_list_keypairs and ex_list_security_groups method
  in the CloudStack driver which caused an exception to be thrown if the API
  returned no keypairs / security groups.
  (LIBCLOUD-438)
  [Carlos Reategui, Tomaz Muraus]

- Fix a bug in the OpenStack based drivers with not correctly checking if the
  auth token has expired before re-using it. (LIBCLOUD-428)

  Reported by Michael Farrell.
  [Tomaz Muraus,  Michael Farrell]

Storage
~~~~~~~

- Deprecate CLOUDFILES_US and CLOUDFILES_UK provider constant and replace
  it with a new CLOUDFILES constant.
  Driver referenced by this new constant takes a "region" keyword argument
  which can be one of 'ord', 'dfw', 'iad', 'syd', 'lon'.

  Note: Deprecated constants will continue to work until the next major
  release.
  For more information on this change, please visit "Upgrade Notes"
  documentation section - http://s.apache.org/lc0140un
  [Tomaz Muraus]

- Allow users to filter objects starting with a prefix by passing ex_prefix
  argument to the list_container_objects method in the S3, Google Storage
  and CloudFiles driver. (LIBCLOUD-369)
  [Stefan Friesel]

- Fix an issue with mutating connectionCls.host attribute in the Azure
  driver. This bug prevented user from having multiple Azure drivers with
  different keys instantiated at the same time. (LIBCLOUD-399)
  [Olivier Grisel]

- Add a new driver for KT UCloud based on the OpenStack Swift driver.
  (LIBCLOUD-431).
  [DaeMyung Kang]

Load Balancer
~~~~~~~~~~~~~

- Deprecate RACKSPACE_US and RACKSPACE_UK provider constant and replace it
  with a new RACKSPACE constant.
  Driver referenced by this new constant takes a "region" keyword argument
  which can be one of the following: 'ord', 'dfw', 'iad', 'syd', 'lon'.

  Note: Deprecated constants will continue to work until the next major
  release.
  For more information on this change, please visit "Upgrade Notes"
  documentation section - http://s.apache.org/lc0140un
  [Tomaz Muraus]

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

- Add new Hong Kong endpoint to Rackspace driver.
  [Brian Curtin]

DNS
~~~

- Deprecate RACKSPACE_US and RACKSPACE_UK provider constant and replace it
  with a new RACKSPACE constant.
  Driver referenced by this new constant takes a "region" keyword argument
  which can be one of the following: 'us', 'uk'.

  Note: Deprecated constants will continue to work until the next major
  release.
  For more information on this change, please visit "Upgrade Notes"
  documentation section - http://s.apache.org/lc0140un
  [Tomaz Muraus]

- Use string instead of integer for RecordType ENUM value.

  Note: If you directly use an integer instead of RecordType ENUM class you
  need to update your code to use the RecordType ENUM otherwise the code
  won't work. For more information on how to do that, see "Upgrade Notes"
  documentation section - http://s.apache.org/lc0140un
  [Tomaz Muraus]

- Add "export_zone_to_bind_format" and export_zone_to_bind_zone_file method
  which allows users to export Libcloud Zone to BIND zone format.
  (LIBCLOUD-398)
  [Tomaz Muraus]

- Update issue with inexistent zone / record handling in the get_zone and
  get_record method in the Linode driver. Those issues were related to
  changes in the Linode API. (LIBCLOUD-425)
  [Jon Chen]

Changes with Apache Libcloud 0.13.3
-----------------------------------

Compute
~~~~~~~

- Send "scrub_data" query parameter when destroying a DigitalOcean node.
  This will cause disk to be scrubbed (overwritten with 0's) when destroying
  a node. (LIBCLOUD-487)

  Note: This fixes a security issue with a potential leak of data contained
  on the destroyed node which only affects users of the DigitalOcean driver.
  (CVE-2013-6480)
  [Tomaz Muraus]

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]

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

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

- Allow user to override default async task completion timeout by
  specifying ex_clone_timeout argument. (LIBCLOUD-340)
  [Michal Galet]

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

- 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 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 (lower) 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)
  [Jayy Vis]

- 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.
  (LIBCLOUD-200)
  [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 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]

- Allow 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.
  [Oleg Suharev]

- Fix networks retrieval in the CloudStack driver create_node method.
  Also only pass 'networkids' field to the API if there are any networks
  available.
  [Oleg Suharev, 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 passed 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.
  [Tomaz 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 availability zones
  [Tomaz 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.
  [Tomaz Muraus]

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

- Deployment capability to ElasticHosts
  [Tomaz Muraus]

- Allow deploy_node to use non-standard SSH username and port
  [Tomaz 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.
