You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2017/04/10 02:44:16 UTC

[1/2] libcloud git commit: Added DNS driver for OnApp

Repository: libcloud
Updated Branches:
  refs/heads/trunk bdd0b34e8 -> 14cb428e4


Added DNS driver for OnApp


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/bc580377
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/bc580377
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/bc580377

Branch: refs/heads/trunk
Commit: bc580377a64cb2cbfe9119ddc0bc449fb418f579
Parents: bdd0b34
Author: Tinu Cleatus <ti...@gmail.com>
Authored: Sun Mar 26 00:09:49 2017 +0530
Committer: Anthony Shaw <an...@apache.org>
Committed: Mon Apr 10 12:39:15 2017 +1000

----------------------------------------------------------------------
 docs/dns/drivers/onapp.rst                      |  23 ++
 docs/examples/dns/onapp/instantiate_driver.py   |   9 +
 libcloud/dns/drivers/onapp.py                   | 332 +++++++++++++++++++
 libcloud/dns/providers.py                       |   2 +
 libcloud/dns/types.py                           |   1 +
 .../test/dns/fixtures/onapp/create_record.json  |   9 +
 .../test/dns/fixtures/onapp/create_zone.json    |  10 +
 .../dns/fixtures/onapp/dns_zone_not_found.json  |   5 +
 .../test/dns/fixtures/onapp/get_record.json     |   9 +
 .../fixtures/onapp/get_record_after_update.json |   9 +
 libcloud/test/dns/fixtures/onapp/get_zone.json  |  10 +
 .../test/dns/fixtures/onapp/list_records.json   |  65 ++++
 .../test/dns/fixtures/onapp/list_zones.json     |  22 ++
 libcloud/test/dns/test_onapp.py                 | 223 +++++++++++++
 libcloud/test/secrets.py-dist                   |   1 +
 15 files changed, 730 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/docs/dns/drivers/onapp.rst
----------------------------------------------------------------------
diff --git a/docs/dns/drivers/onapp.rst b/docs/dns/drivers/onapp.rst
new file mode 100644
index 0000000..b5cde10
--- /dev/null
+++ b/docs/dns/drivers/onapp.rst
@@ -0,0 +1,23 @@
+OnApp DNS Driver Documentation
+=================================
+
+`OnApp`_ Cloud integrates its fully redundant DNS network into the OnApp
+Control Panel, so you can manage DNS for your own domains, and your customers\u2019
+domains. Its Anycast DNS service is hosted at datacenters around the world,
+and it\u2019s free of charge for customers running the full version of OnApp Cloud,
+with CDN enabled. Get fast, fully redundant DNS for free!
+
+Instantiating the driver
+------------------------
+
+.. literalinclude:: /examples/dns/onapp/instantiate_driver.py
+   :language: python
+
+API Docs
+--------
+
+.. autoclass:: libcloud.dns.drivers.onapp.OnAppDNSDriver
+    :members:
+    :inherited-members:
+
+.. _`OnApp`: http://onapp.com/

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/docs/examples/dns/onapp/instantiate_driver.py
----------------------------------------------------------------------
diff --git a/docs/examples/dns/onapp/instantiate_driver.py b/docs/examples/dns/onapp/instantiate_driver.py
new file mode 100644
index 0000000..6643764
--- /dev/null
+++ b/docs/examples/dns/onapp/instantiate_driver.py
@@ -0,0 +1,9 @@
+from libcloud.dns.types import Provider
+from libcloud.dns.providers import get_driver
+
+username = 'your account username'
+password = 'your account password'
+host = 'onapp.test'
+
+cls = get_driver(Provider.ONAPP)
+driver = cls(key=username, secret=password, host=host)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/dns/drivers/onapp.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/drivers/onapp.py b/libcloud/dns/drivers/onapp.py
new file mode 100644
index 0000000..ee704ad
--- /dev/null
+++ b/libcloud/dns/drivers/onapp.py
@@ -0,0 +1,332 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""
+OnApp DNS Driver
+"""
+
+__all__ = [
+    'OnAppDNSDriver'
+]
+
+import json
+
+from libcloud.common.onapp import OnAppConnection
+from libcloud.dns.types import Provider, RecordType
+from libcloud.dns.base import DNSDriver, Zone, Record
+
+
+DEFAULT_ZONE_TTL = 1200
+
+
+class OnAppDNSDriver(DNSDriver):
+    type = Provider.ONAPP
+    name = 'OnApp'
+    website = 'http://onapp.com/'
+    connectionCls = OnAppConnection
+
+    RECORD_TYPE_MAP = {
+        RecordType.SOA: 'SOA',
+        RecordType.NS: 'NS',
+        RecordType.A: 'A',
+        RecordType.AAAA: 'AAAA',
+        RecordType.CNAME: 'CNAME',
+        RecordType.MX: 'MX',
+        RecordType.TXT: 'TXT',
+        RecordType.SRV: 'SRV',
+    }
+
+    def list_zones(self):
+        """
+        Return a list of zones.
+
+        :return: ``list`` of :class:`Zone`
+        """
+        response = self.connection.request('/dns_zones.json')
+
+        zones = self._to_zones(response.object)
+        return zones
+
+    def get_zone(self, zone_id):
+        """
+        Return a Zone instance.
+
+        :param zone_id: ID of the required zone
+        :type  zone_id: ``str``
+
+        :rtype: :class:`Zone`
+        """
+        response = self.connection.request('/dns_zones/%s.json' % zone_id)
+        zone = self._to_zone(response.object)
+        return zone
+
+    def create_zone(self, domain, type='master', ttl=None, extra=None):
+        """
+        Create a new zone.
+
+        :param domain: Zone domain name (e.g. example.com)
+        :type domain: ``str``
+
+        :param type: Zone type (All zones are master by design).
+        :type  type: ``str``
+
+        :param ttl: TTL for new records. (This is not really used)
+        :type  ttl: ``int``
+
+        :param extra: Extra attributes (set auto_populate: 0 if you
+        don't want to auto populate with existing DNS records). (optional)
+        :type extra: ``dict``
+
+        :rtype: :class:`Zone`
+
+        For more info, please see:
+        https://docs.onapp.com/display/52API/Add+DNS+Zone
+        """
+        dns_zone = {'name': domain}
+        if extra is not None:
+            dns_zone.update(extra)
+        dns_zone_data = json.dumps({'dns_zone': dns_zone})
+        response = self.connection.request(
+            '/dns_zones.json',
+            method='POST',
+            headers={"Content-type": "application/json"},
+            data=dns_zone_data)
+        zone = self._to_zone(response.object)
+        return zone
+
+    def delete_zone(self, zone):
+        """
+        Delete a zone.
+
+        Note: This will also delete all the records belonging to this zone.
+
+        :param zone: Zone to delete.
+        :type  zone: :class:`Zone`
+
+        :rtype: ``bool``
+        """
+        self.connection.request(
+            '/dns_zones/%s.json' % zone.id,
+            method='DELETE')
+        return True
+
+    def list_records(self, zone):
+        """
+        Return a list of records for the provided zone.
+
+        :param zone: Zone to list records for.
+        :type zone: :class:`Zone`
+
+        :return: ``list`` of :class:`Record`
+        """
+        response = self.connection.request(
+            '/dns_zones/%s/records.json' % zone.id)
+        dns_records = response.object['dns_zone']['records']
+        records = self._to_records(dns_records, zone)
+        return records
+
+    def get_record(self, zone_id, record_id):
+        """
+        Return a Record instance.
+
+        :param zone_id: ID of the required zone
+        :type  zone_id: ``str``
+
+        :param record_id: ID of the required record
+        :type  record_id: ``str``
+
+        :rtype: :class:`Record`
+        """
+        response = self.connection.request('/dns_zones/%s/records/%s.json' %
+                                           (zone_id, record_id))
+        record = self._to_record(response.object, zone_id=zone_id)
+        return record
+
+    def create_record(self, name, zone, type, data, extra=None):
+        """
+        Create a new record.
+
+        :param name: Record name without the domain name (e.g. www).
+                     Note: If you want to create a record for a base domain
+                     name, you should specify empty string ('') for this
+                     argument.
+        :type  name: ``str``
+
+        :param zone: Zone where the requested record is created.
+        :type  zone: :class:`Zone`
+
+        :param type: DNS record type (A, AAAA, ...).
+        :type  type: :class:`RecordType`
+
+        :param data: Data for the record (depends on the record type).
+        Used only for A and AAAA record types.
+        :type  data: ``str``
+
+        :param extra: Extra attributes (driver specific). (optional)
+        :type extra: ``dict``
+
+        :rtype: :class:`Record`
+
+        For more info, please see:
+        https://docs.onapp.com/display/52API/Add+DNS+Record
+        """
+        dns_record = self._format_record(name, type, data, extra)
+        dns_record_data = json.dumps({'dns_record': dns_record})
+        response = self.connection.request(
+            '/dns_zones/%s/records.json' % zone.id,
+            method='POST',
+            headers={"Content-type": "application/json"},
+            data=dns_record_data)
+        record = self._to_record(response.object, zone=zone)
+        return record
+
+    def update_record(self, record, name, type, data, extra=None):
+        """
+        Update an existing record.
+
+        :param record: Record to update.
+        :type  record: :class:`Record`
+
+        :param name: Record name without the domain name (e.g. www).
+                     Note: If you want to create a record for a base domain
+                     name, you should specify empty string ('') for this
+                     argument.
+        :type  name: ``str``
+
+        :param type: DNS record type (A, AAAA, ...).
+        :type  type: :class:`RecordType`
+
+        :param data: Data for the record (depends on the record type).
+        Used only for A and AAAA record types.
+        :type  data: ``str``
+
+        :param extra: (optional) Extra attributes (driver specific).
+        :type  extra: ``dict``
+
+        :rtype: :class:`Record`
+
+        For more info, please see:
+        https://docs.onapp.com/display/52API/Edit+DNS+Records
+        """
+        zone = record.zone
+        dns_record = self._format_record(name, type, data, extra)
+        dns_record_data = json.dumps({'dns_record': dns_record})
+        self.connection.request(
+            '/dns_zones/%s/records/%s.json' % (zone.id, record.id),
+            method='PUT',
+            headers={"Content-type": "application/json"},
+            data=dns_record_data)
+        record = self.get_record(zone.id, record.id)
+        return record
+
+    def delete_record(self, record):
+        """
+        Delete a record.
+
+        :param record: Record to delete.
+        :type  record: :class:`Record`
+
+        :rtype: ``bool``
+
+        For more info, please see:
+        https://docs.onapp.com/display/52API/Delete+DNS+Record
+        """
+        zone_id = record.zone.id
+        self.connection.request('/dns_zones/%s/records/%s.json' % (zone_id,
+                                record.id), method='DELETE')
+        return True
+
+    #
+    # Helper methods
+    #
+
+    def _format_record(self, name, type, data, extra):
+        if name is '':
+            name = '@'
+        if extra is None:
+            extra = {}
+        record_type = self.RECORD_TYPE_MAP[type]
+        new_record = {
+            'name': name,
+            'ttl': extra.get('ttl', DEFAULT_ZONE_TTL),
+            'type': record_type
+        }
+        if type == RecordType.MX:
+            additions = {
+                'priority': extra.get('priority', 1),
+                'hostname': extra.get('hostname')
+            }
+        elif type == RecordType.SRV:
+            additions = {
+                'port': extra.get('port'),
+                'weight': extra.get('weight', 1),
+                'priority': extra.get('priority', 1),
+                'hostname': extra.get('hostname')
+            }
+        elif type == RecordType.A:
+            additions = {'ip': data}
+        elif type == RecordType.CNAME:
+            additions = {'hostname': extra.get('hostname')}
+        elif type == RecordType.AAAA:
+            additions = {'ip': data}
+        elif type == RecordType.TXT:
+            additions = {'txt': extra.get('txt')}
+        elif type == RecordType.NS:
+            additions = {'hostname': extra.get('hostname')}
+
+        new_record.update(additions)
+        return new_record
+
+    def _to_zones(self, data):
+        zones = []
+        for zone in data:
+            _zone = self._to_zone(zone)
+            zones.append(_zone)
+
+        return zones
+
+    def _to_zone(self, data):
+        dns_zone = data.get('dns_zone')
+        id = dns_zone.get('id')
+        name = dns_zone.get('name')
+        extra = {'user_id': dns_zone.get('user_id'),
+                 'cdn_reference': dns_zone.get('cdn_reference'),
+                 'created_at': dns_zone.get('created_at'),
+                 'updated_at': dns_zone.get('updated_at')}
+
+        type = 'master'
+
+        return Zone(id=id, domain=name, type=type, ttl=DEFAULT_ZONE_TTL,
+                    driver=self, extra=extra)
+
+    def _to_records(self, data, zone):
+        records = []
+        data = data.values()
+        for data_type in data:
+            for item in data_type:
+                record = self._to_record(item, zone=zone)
+                records.append(record)
+        records.sort(key=lambda x: x.id, reverse=False)
+        return records
+
+    def _to_record(self, data, zone_id=None, zone=None):
+        if not zone:  # We need zone_id or zone
+            zone = self.get_zone(zone_id)
+        record = data.get('dns_record')
+        id = record.get('id')
+        name = record.get('name')
+        type = record.get('type')
+        ttl = record.get('ttl', None)
+        return Record(id=id, name=name, type=type, data=record, zone=zone,
+                      driver=self, ttl=ttl, extra={})

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/dns/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/providers.py b/libcloud/dns/providers.py
index 38aa39f..c7c4968 100644
--- a/libcloud/dns/providers.py
+++ b/libcloud/dns/providers.py
@@ -75,6 +75,8 @@ DRIVERS = {
     ('libcloud.dns.drivers.buddyns', 'BuddyNSDNSDriver'),
     Provider.POWERDNS:
     ('libcloud.dns.drivers.powerdns', 'PowerDNSDriver'),
+    Provider.ONAPP:
+    ('libcloud.dns.drivers.onapp', 'OnAppDNSDriver'),
 
     # Deprecated
     Provider.RACKSPACE_US:

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/dns/types.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/types.py b/libcloud/dns/types.py
index f05deb3..6b272e2 100644
--- a/libcloud/dns/types.py
+++ b/libcloud/dns/types.py
@@ -52,6 +52,7 @@ class Provider(object):
     LUADNS = 'luadns'
     NFSN = 'nfsn'
     NSONE = 'nsone'
+    ONAPP = 'onapp'
     POINTDNS = 'pointdns'
     POWERDNS = 'powerdns'
     RACKSPACE = 'rackspace'

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/create_record.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/create_record.json b/libcloud/test/dns/fixtures/onapp/create_record.json
new file mode 100644
index 0000000..8b39878
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/create_record.json
@@ -0,0 +1,9 @@
+{
+  "dns_record": {
+    "name": "blog",
+    "id": 111227,
+    "ttl": 3600,
+    "ip": "123.156.189.2",
+    "type": "A"
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/create_zone.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/create_zone.json b/libcloud/test/dns/fixtures/onapp/create_zone.json
new file mode 100644
index 0000000..63ed2cf
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/create_zone.json
@@ -0,0 +1,10 @@
+{
+  "dns_zone": {
+    "id": 1,
+    "name": "example.com",
+    "user_id": 123,
+    "created_at": "2017-03-24T16:07:05.000+05:30",
+    "updated_at": "2017-03-24T16:07:05.000+05:30",
+    "cdn_reference": 12345678
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/dns_zone_not_found.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/dns_zone_not_found.json b/libcloud/test/dns/fixtures/onapp/dns_zone_not_found.json
new file mode 100644
index 0000000..9f1c2ee
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/dns_zone_not_found.json
@@ -0,0 +1,5 @@
+{
+  "errors": [
+    "DnsZone not found"
+  ]
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/get_record.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/get_record.json b/libcloud/test/dns/fixtures/onapp/get_record.json
new file mode 100644
index 0000000..b84fad6
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/get_record.json
@@ -0,0 +1,9 @@
+{
+  "dns_record": {
+    "name": "@",
+    "id": 123,
+    "ttl": 3600,
+    "ip": "123.156.189.1",
+    "type": "A"
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/get_record_after_update.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/get_record_after_update.json b/libcloud/test/dns/fixtures/onapp/get_record_after_update.json
new file mode 100644
index 0000000..13dcf09
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/get_record_after_update.json
@@ -0,0 +1,9 @@
+{
+  "dns_record": {
+    "name": "@",
+    "id": 123,
+    "ttl": 4500,
+    "ip": "123.156.189.2",
+    "type": "A"
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/get_zone.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/get_zone.json b/libcloud/test/dns/fixtures/onapp/get_zone.json
new file mode 100644
index 0000000..63ed2cf
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/get_zone.json
@@ -0,0 +1,10 @@
+{
+  "dns_zone": {
+    "id": 1,
+    "name": "example.com",
+    "user_id": 123,
+    "created_at": "2017-03-24T16:07:05.000+05:30",
+    "updated_at": "2017-03-24T16:07:05.000+05:30",
+    "cdn_reference": 12345678
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/list_records.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/list_records.json b/libcloud/test/dns/fixtures/onapp/list_records.json
new file mode 100644
index 0000000..b4be246
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/list_records.json
@@ -0,0 +1,65 @@
+{
+  "dns_zone": {
+    "id": 1,
+    "name": "example.com",
+    "user_id": 123,
+    "created_at": "2017-03-24T16:07:05.000+05:30",
+    "updated_at": "2017-03-24T16:07:05.000+05:30",
+    "cdn_reference": 12345678,
+    "records": {
+      "A": [
+        {
+          "dns_record": {
+            "name": "@",
+            "id": 111222,
+            "ttl": 3600,
+            "ip": "123.156.189.1",
+            "type": "A"
+          }
+        },
+        {
+        "dns_record": {
+          "name": "www",
+          "id": 111223,
+          "ttl": 3600,
+          "ip": "123.156.189.1",
+          "type": "A"
+          }
+        }
+      ],
+      "CNAME": [
+        {
+        "dns_record": {
+          "name": "mail",
+          "id": 111224,
+          "ttl": 3600,
+          "hostname": "examplemail.com",
+          "type": "CNAME"
+          }
+        }
+      ],
+      "MX": [
+        {
+        "dns_record": {
+          "priority": 20,
+          "name": "@",
+          "id": 111225,
+          "ttl": 3600,
+          "hostname": "mx.examplemail.com",
+          "type": "MX"
+          }
+        },
+        {
+        "dns_record": {
+          "priority": 10,
+          "name": "@",
+          "id": 111226,
+          "ttl": 3600,
+          "hostname": "mx2.examplemail.com",
+          "type": "MX"
+          }
+        }
+      ]
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/fixtures/onapp/list_zones.json
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/onapp/list_zones.json b/libcloud/test/dns/fixtures/onapp/list_zones.json
new file mode 100644
index 0000000..631a558
--- /dev/null
+++ b/libcloud/test/dns/fixtures/onapp/list_zones.json
@@ -0,0 +1,22 @@
+[
+  {
+    "dns_zone": {
+      "id": 1,
+      "name": "example.com",
+      "user_id": 123,
+      "created_at": "2017-03-24T16:07:05.000+05:30",
+      "updated_at": "2017-03-24T16:07:05.000+05:30",
+      "cdn_reference": 12345678
+    }
+  },
+  {
+    "dns_zone": {
+      "id": 2,
+      "name": "example.net",
+      "user_id": 124,
+      "created_at": "2017-03-24T16:07:05.000+05:30",
+      "updated_at": "2017-03-24T16:07:05.000+05:30",
+      "cdn_reference": 12345679
+    }
+  }
+]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/dns/test_onapp.py
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/test_onapp.py b/libcloud/test/dns/test_onapp.py
new file mode 100644
index 0000000..7af52ba
--- /dev/null
+++ b/libcloud/test/dns/test_onapp.py
@@ -0,0 +1,223 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+
+import sys
+import unittest
+
+from libcloud.dns.drivers.onapp import OnAppDNSDriver
+from libcloud.dns.types import RecordType
+from libcloud.test import LibcloudTestCase, MockHttpTestCase
+from libcloud.test.file_fixtures import DNSFileFixtures
+from libcloud.test.secrets import DNS_PARAMS_ONAPP
+from libcloud.utils.py3 import httplib
+from libcloud.common.exceptions import BaseHTTPError
+
+
+class OnAppDNSTests(LibcloudTestCase):
+
+    def setUp(self):
+        OnAppDNSDriver.connectionCls.conn_class = OnAppDNSMockHttp
+        OnAppDNSMockHttp.type = None
+        self.driver = OnAppDNSDriver(*DNS_PARAMS_ONAPP)
+
+    def assertHasKeys(self, dictionary, keys):
+        for key in keys:
+            self.assertTrue(key in dictionary, 'key "%s" not in dictionary' %
+                            (key))
+
+    def test_list_record_types(self):
+        record_types = self.driver.list_record_types()
+        self.assertEqual(len(record_types), 8)
+        self.assertTrue(RecordType.A in record_types)
+        self.assertTrue(RecordType.AAAA in record_types)
+        self.assertTrue(RecordType.CNAME in record_types)
+        self.assertTrue(RecordType.MX in record_types)
+        self.assertTrue(RecordType.NS in record_types)
+        self.assertTrue(RecordType.SOA in record_types)
+        self.assertTrue(RecordType.SRV in record_types)
+        self.assertTrue(RecordType.TXT in record_types)
+
+    def test_list_zones_success(self):
+        zones = self.driver.list_zones()
+        self.assertEqual(len(zones), 2)
+
+        zone1 = zones[0]
+        self.assertEqual(zone1.id, '1')
+        self.assertEqual(zone1.type, 'master')
+        self.assertEqual(zone1.domain, 'example.com')
+        self.assertEqual(zone1.ttl, 1200)
+        self.assertHasKeys(zone1.extra, ['user_id', 'cdn_reference',
+                                         'created_at', 'updated_at'])
+
+        zone2 = zones[1]
+        self.assertEqual(zone2.id, '2')
+        self.assertEqual(zone2.type, 'master')
+        self.assertEqual(zone2.domain, 'example.net')
+        self.assertEqual(zone2.ttl, 1200)
+        self.assertHasKeys(zone2.extra, ['user_id', 'cdn_reference',
+                                         'created_at', 'updated_at'])
+
+    def test_get_zone_success(self):
+        zone1 = self.driver.get_zone(zone_id='1')
+        self.assertEqual(zone1.id, '1')
+        self.assertEqual(zone1.type, 'master')
+        self.assertEqual(zone1.domain, 'example.com')
+        self.assertEqual(zone1.ttl, 1200)
+        self.assertHasKeys(zone1.extra, ['user_id', 'cdn_reference',
+                                         'created_at', 'updated_at'])
+
+    def test_get_zone_not_found(self):
+        OnAppDNSMockHttp.type = 'NOT_FOUND'
+        try:
+            self.driver.get_zone(zone_id='3')
+        except BaseHTTPError:
+            self.assertRaises(Exception)
+
+    def test_create_zone_success(self):
+        OnAppDNSMockHttp.type = 'CREATE'
+        zone = self.driver.create_zone(domain='example.com')
+        self.assertEqual(zone.id, '1')
+        self.assertEqual(zone.domain, 'example.com')
+        self.assertEqual(zone.ttl, 1200)
+        self.assertEqual(zone.type, 'master')
+        self.assertHasKeys(zone.extra, ['user_id', 'cdn_reference',
+                                        'created_at', 'updated_at'])
+
+    def test_delete_zone(self):
+        zone = self.driver.get_zone(zone_id='1')
+        OnAppDNSMockHttp.type = 'DELETE'
+        self.assertTrue(self.driver.delete_zone(zone))
+
+    def test_list_records_success(self):
+        zone = self.driver.get_zone(zone_id='1')
+        records = self.driver.list_records(zone=zone)
+        self.assertEqual(len(records), 5)
+
+        record1 = records[0]
+        self.assertEqual(record1.id, '111222')
+        self.assertEqual(record1.name, '@')
+        self.assertEqual(record1.type, RecordType.A)
+        self.assertEqual(record1.ttl, 3600)
+        self.assertEqual(record1.data['ip'], '123.156.189.1')
+
+        record2 = records[2]
+        self.assertEqual(record2.id, '111224')
+        self.assertEqual(record2.name, 'mail')
+        self.assertEqual(record1.ttl, 3600)
+        self.assertEqual(record2.type, RecordType.CNAME)
+        self.assertEqual(record2.data['hostname'], 'examplemail.com')
+
+        record3 = records[4]
+        self.assertEqual(record3.id, '111226')
+        self.assertEqual(record3.name, '@')
+        self.assertEqual(record3.type, RecordType.MX)
+        self.assertEqual(record3.data['hostname'], 'mx2.examplemail.com')
+
+    def test_get_record_success(self):
+        record = self.driver.get_record(zone_id='1',
+                                        record_id='123')
+        self.assertEqual(record.id, '123')
+        self.assertEqual(record.name, '@')
+        self.assertEqual(record.type, RecordType.A)
+        self.assertEqual(record.data['ip'], '123.156.189.1')
+
+    def test_create_record_success(self):
+        zone = self.driver.get_zone(zone_id='1')
+        OnAppDNSMockHttp.type = 'CREATE'
+        record = self.driver.create_record(name='blog', zone=zone,
+                                           type=RecordType.A,
+                                           data='123.156.189.2')
+        self.assertEqual(record.id, '111227')
+        self.assertEqual(record.name, 'blog')
+        self.assertEqual(record.type, RecordType.A)
+        self.assertEqual(record.data['ip'], '123.156.189.2')
+        self.assertEqual(record.data['ttl'], 3600)
+
+    def test_update_record_success(self):
+        record = self.driver.get_record(zone_id='1',
+                                        record_id='123')
+        OnAppDNSMockHttp.type = 'UPDATE'
+        extra = {'ttl': 4500}
+        record1 = self.driver.update_record(record=record, name='@',
+                                            type=record.type,
+                                            data='123.156.189.2',
+                                            extra=extra)
+        self.assertEqual(record.data['ip'], '123.156.189.1')
+        self.assertEqual(record.ttl, 3600)
+        self.assertEqual(record1.data['ip'], '123.156.189.2')
+        self.assertEqual(record1.ttl, 4500)
+
+    def test_delete_record_success(self):
+        record = self.driver.get_record(zone_id='1',
+                                        record_id='123')
+        OnAppDNSMockHttp.type = 'DELETE'
+        status = self.driver.delete_record(record=record)
+        self.assertTrue(status)
+
+
+class OnAppDNSMockHttp(MockHttpTestCase):
+    fixtures = DNSFileFixtures('onapp')
+
+    def _dns_zones_json(self, method, url, body, headers):
+        body = self.fixtures.load('list_zones.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_1_json(self, method, url, body, headers):
+        body = self.fixtures.load('get_zone.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_3_json_NOT_FOUND(self, method, url, body, headers):
+        body = self.fixtures.load('dns_zone_not_found.json')
+        return (httplib.NOT_FOUND, body, {},
+                httplib.responses[httplib.NOT_FOUND])
+
+    def _dns_zones_json_CREATE(self, method, url, body, headers):
+        body = self.fixtures.load('create_zone.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_1_json_DELETE(self, method, url, body, headers):
+        return (httplib.NO_CONTENT, '', {},
+                httplib.responses[httplib.NO_CONTENT])
+
+    def _dns_zones_1_records_json(self, method, url, body, headers):
+        body = self.fixtures.load('list_records.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_1_records_123_json(self, method, url, body, headers):
+        body = self.fixtures.load('get_record.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_1_records_json_CREATE(self, method, url, body, headers):
+        body = self.fixtures.load('create_record.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_1_records_123_json_UPDATE(self, method, url, body, headers):
+        if method == 'GET':
+            body = self.fixtures.load('get_record_after_update.json')
+            return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+        else:
+            return (httplib.NO_CONTENT, '', {},
+                    httplib.responses[httplib.NO_CONTENT])
+
+    def _dns_zones_1_json_UPDATE(self, method, url, body, headers):
+        body = self.fixtures.load('get_zone.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _dns_zones_1_records_123_json_DELETE(self, method, url, body, headers):
+        return (httplib.NO_CONTENT, '', {},
+                httplib.responses[httplib.NO_CONTENT])
+
+
+if __name__ == '__main__':
+    sys.exit(unittest.main())

http://git-wip-us.apache.org/repos/asf/libcloud/blob/bc580377/libcloud/test/secrets.py-dist
----------------------------------------------------------------------
diff --git a/libcloud/test/secrets.py-dist b/libcloud/test/secrets.py-dist
index 2c21f84..ce16d95 100644
--- a/libcloud/test/secrets.py-dist
+++ b/libcloud/test/secrets.py-dist
@@ -90,6 +90,7 @@ DNS_PARAMS_NSONE = ('key', )
 DNS_PARAMS_LUADNS = ('user', 'key')
 DNS_PARAMS_BUDDYNS = ('key', )
 DNS_PARAMS_DNSPOD = ('key', )
+DNS_PARAMS_ONAPP = ('key', 'secret', True, 'host')
 
 # Container
 CONTAINER_PARAMS_DOCKER = ('user', 'password')


[2/2] libcloud git commit: update provider matrix

Posted by an...@apache.org.
update provider matrix


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/14cb428e
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/14cb428e
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/14cb428e

Branch: refs/heads/trunk
Commit: 14cb428e4c447026c60d5f142d052ead724310cc
Parents: bc58037
Author: Anthony Shaw <an...@apache.org>
Authored: Mon Apr 10 12:44:08 2017 +1000
Committer: Anthony Shaw <an...@apache.org>
Committed: Mon Apr 10 12:44:08 2017 +1000

----------------------------------------------------------------------
 CHANGES.rst                                     |   7 ++
 .../_supported_methods_image_management.rst     |   2 +-
 .../_supported_methods_key_pair_management.rst  |   2 +-
 docs/compute/_supported_methods_main.rst        |   2 +-
 docs/compute/_supported_providers.rst           | 122 +++++++++----------
 docs/dns/_supported_methods.rst                 |   2 +
 docs/dns/_supported_providers.rst               |   2 +
 docs/loadbalancer/_supported_providers.rst      |   2 +-
 docs/storage/_supported_methods_cdn.rst         |  16 ++-
 docs/storage/_supported_methods_main.rst        |  16 ++-
 docs/storage/_supported_providers.rst           |  16 ++-
 11 files changed, 118 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index d356eb8..176648e 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -34,6 +34,13 @@ Compute
   [GITHUB-1024]
   (Nirzari Iyer)
 
+DNS
+~~~
+
+- Add OnApp driver
+  [GITHUB-1017] [LIBCLOUD-907]
+  (Tinu Cleatus)
+
 Changes in Apache Libcloud 2.0.0rc2
 -----------------------------------
 

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/compute/_supported_methods_image_management.rst
----------------------------------------------------------------------
diff --git a/docs/compute/_supported_methods_image_management.rst b/docs/compute/_supported_methods_image_management.rst
index 7bbeb1b..962311d 100644
--- a/docs/compute/_supported_methods_image_management.rst
+++ b/docs/compute/_supported_methods_image_management.rst
@@ -38,7 +38,7 @@ Provider                              list images get image create image delete
 `NephoScale`_                         yes         no        no           no           no        
 `Nimbus`_                             yes         yes       yes          yes          yes       
 `NTTAmerica`_                         yes         no        no           no           no        
-`OnApp`_                              no          no        no           no           no        
+`OnApp`_                              yes         no        no           no           no        
 `OpenNebula (v3.8)`_                  yes         no        no           no           no        
 `OpenStack`_                          yes         yes       no           no           no        
 `Outscale INC`_                       yes         yes       yes          yes          yes       

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/compute/_supported_methods_key_pair_management.rst
----------------------------------------------------------------------
diff --git a/docs/compute/_supported_methods_key_pair_management.rst b/docs/compute/_supported_methods_key_pair_management.rst
index b0c75a1..fb2d0a1 100644
--- a/docs/compute/_supported_methods_key_pair_management.rst
+++ b/docs/compute/_supported_methods_key_pair_management.rst
@@ -38,7 +38,7 @@ Provider                              list key pairs get key pair create key pai
 `NephoScale`_                         no             no           no              no                            no                          no             
 `Nimbus`_                             yes            yes          yes             yes                           no                          yes            
 `NTTAmerica`_                         no             no           no              no                            no                          no             
-`OnApp`_                              no             no           no              no                            no                          no             
+`OnApp`_                              yes            yes          no              yes                           no                          yes            
 `OpenNebula (v3.8)`_                  no             no           no              no                            no                          no             
 `OpenStack`_                          no             no           no              no                            no                          no             
 `Outscale INC`_                       yes            yes          yes             yes                           no                          yes            

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/compute/_supported_methods_main.rst
----------------------------------------------------------------------
diff --git a/docs/compute/_supported_methods_main.rst b/docs/compute/_supported_methods_main.rst
index b630592..54a74f8 100644
--- a/docs/compute/_supported_methods_main.rst
+++ b/docs/compute/_supported_methods_main.rst
@@ -38,7 +38,7 @@ Provider                              list nodes create node reboot node destroy
 `NephoScale`_                         yes        yes         yes         yes          yes         yes        yes        
 `Nimbus`_                             yes        yes         yes         yes          yes         yes        yes        
 `NTTAmerica`_                         yes        yes         yes         yes          yes         yes        yes        
-`OnApp`_                              yes        yes         no          yes          no          no         no         
+`OnApp`_                              yes        yes         no          yes          yes         no         no         
 `OpenNebula (v3.8)`_                  yes        yes         yes         yes          yes         yes        no         
 `OpenStack`_                          yes        no          yes         yes          yes         yes        no         
 `Outscale INC`_                       yes        yes         yes         yes          yes         yes        yes        

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/compute/_supported_providers.rst
----------------------------------------------------------------------
diff --git a/docs/compute/_supported_providers.rst b/docs/compute/_supported_providers.rst
index ca89026..1149698 100644
--- a/docs/compute/_supported_providers.rst
+++ b/docs/compute/_supported_providers.rst
@@ -1,65 +1,65 @@
 .. NOTE: This file has been generated automatically using generate_provider_feature_matrix_table.py script, don't manually edit it
 
-===================================== ================================================= =================== ========================================================================================================================================================================= ================================================= ====================================
-Provider                              Documentation                                     Provider Constant   Supported Regions                                                                                                                                                         Module                                            Class Name                          
-===================================== ================================================= =================== ========================================================================================================================================================================= ================================================= ====================================
-`Abiquo`_                                                                               ABIQUO              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.abiquo`            :class:`AbiquoNodeDriver`           
-`Aliyun ECS`_                         :doc:`Click </compute/drivers/aliyun_ecs>`        ALIYUN_ECS          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ecs`               :class:`ECSDriver`                  
-`PCextreme AuroraCompute`_            :doc:`Click </compute/drivers/auroracompute>`     AURORACOMPUTE       single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.auroracompute`     :class:`AuroraComputeNodeDriver`    
-`Azure Virtual machines`_             :doc:`Click </compute/drivers/azure>`             AZURE               single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.azure`             :class:`AzureNodeDriver`            
-`Azure Virtual machines`_             :doc:`Click </compute/drivers/azure_arm>`         AZURE_ARM           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.azure_arm`         :class:`AzureNodeDriver`            
-`Bluebox Blocks`_                                                                       BLUEBOX             single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.bluebox`           :class:`BlueboxNodeDriver`          
-`Brightbox`_                                                                            BRIGHTBOX           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.brightbox`         :class:`BrightboxNodeDriver`        
-`BSNL`_                               :doc:`Click </compute/drivers/bsnl>`              BSNL                single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.bsnl`              :class:`BSNLNodeDriver`             
-`cloudscale.ch`_                      :doc:`Click </compute/drivers/cloudscale>`        CLOUDSCALE          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.cloudscale`        :class:`CloudscaleNodeDriver`       
-`CloudSigma (API v2.0)`_              :doc:`Click </compute/drivers/cloudsigma>`        CLOUDSIGMA          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.cloudsigma`        :class:`CloudSigmaNodeDriver`       
-`CloudStack`_                         :doc:`Click </compute/drivers/cloudstack>`        CLOUDSTACK          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.cloudstack`        :class:`CloudStackNodeDriver`       
-`Cloudwatt`_                          :doc:`Click </compute/drivers/cloudwatt>`         CLOUDWATT           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.cloudwatt`         :class:`CloudwattNodeDriver`        
-`DigitalOcean`_                       :doc:`Click </compute/drivers/digital_ocean>`     DIGITAL_OCEAN       single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.digitalocean`      :class:`DigitalOceanNodeDriver`     
-`DimensionData`_                      :doc:`Click </compute/drivers/dimensiondata>`     DIMENSIONDATA       single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.dimensiondata`     :class:`DimensionDataNodeDriver`    
-`Amazon EC2`_                         :doc:`Click </compute/drivers/ec2>`               EC2                 ap-northeast-2, ap-southeast-1, us-gov-west-1, us-west-2, us-west-1, sa-east-1, us-east-1, us-east-2, eu-west-1, eu-central-1, ap-southeast-2, ap-northeast-1, ap-south-1 :mod:`libcloud.compute.drivers.ec2`               :class:`EC2NodeDriver`              
-`Enomaly Elastic Computing Platform`_                                                   ECP                 single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ecp`               :class:`ECPNodeDriver`              
-`ElasticHosts`_                                                                         ELASTICHOSTS        single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.elastichosts`      :class:`ElasticHostsNodeDriver`     
-`Eucalyptus`_                                                                           EUCALYPTUS          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ec2`               :class:`EucNodeDriver`              
-`Exoscale`_                           :doc:`Click </compute/drivers/exoscale>`          EXOSCALE            single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.exoscale`          :class:`ExoscaleNodeDriver`         
-`Gandi`_                              :doc:`Click </compute/drivers/gandi>`             GANDI               single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.gandi`             :class:`GandiNodeDriver`            
-`Google Compute Engine`_              :doc:`Click </compute/drivers/gce>`               GCE                 single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.gce`               :class:`GCENodeDriver`              
-`GoGrid`_                                                                               GOGRID              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.gogrid`            :class:`GoGridNodeDriver`           
-`HostVirtual`_                                                                          HOSTVIRTUAL         single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.hostvirtual`       :class:`HostVirtualNodeDriver`      
-`Ikoula`_                             :doc:`Click </compute/drivers/ikoula>`            IKOULA              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ikoula`            :class:`IkoulaNodeDriver`           
-`Indosat`_                            :doc:`Click </compute/drivers/indosat>`           INDOSAT             single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.indosat`           :class:`IndosatNodeDriver`          
-`InternetSolutions`_                  :doc:`Click </compute/drivers/internetsolutions>` INTERNETSOLUTIONS   single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.internetsolutions` :class:`InternetSolutionsNodeDriver`
-`Joyent`_                                                                               JOYENT              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.joyent`            :class:`JoyentNodeDriver`           
-`Kili Public Cloud`_                  :doc:`Click </compute/drivers/kili>`              KILI                single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.kili`              :class:`KiliCloudNodeDriver`        
-`KTUCloud`_                                                                             KTUCLOUD            single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ktucloud`          :class:`KTUCloudNodeDriver`         
-`Libvirt`_                            :doc:`Click </compute/drivers/libvirt>`           LIBVIRT             single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.libvirt_driver`    :class:`LibvirtNodeDriver`          
-`Linode`_                                                                               LINODE              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.linode`            :class:`LinodeNodeDriver`           
-`MedOne`_                             :doc:`Click </compute/drivers/medone>`            MEDONE              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.medone`            :class:`MedOneNodeDriver`           
-`NephoScale`_                                                                           NEPHOSCALE          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.nephoscale`        :class:`NephoscaleNodeDriver`       
-`Nimbus`_                             :doc:`Click </compute/drivers/nimbus>`            NIMBUS              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ec2`               :class:`NimbusNodeDriver`           
-`NTTAmerica`_                         :doc:`Click </compute/drivers/ntta>`              NTTA                single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ntta`              :class:`NTTAmericaNodeDriver`       
-`OnApp`_                              :doc:`Click </compute/drivers/onapp>`             ONAPP               single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.onapp`             :class:`OnAppNodeDriver`            
-`OpenNebula (v3.8)`_                                                                    OPENNEBULA          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.opennebula`        :class:`OpenNebulaNodeDriver`       
-`OpenStack`_                          :doc:`Click </compute/drivers/openstack>`         OPENSTACK           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.openstack`         :class:`OpenStackNodeDriver`        
-`Outscale INC`_                       :doc:`Click </compute/drivers/outscale_inc>`      OUTSCALE_INC        single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ec2`               :class:`OutscaleINCNodeDriver`      
-`Outscale SAS`_                       :doc:`Click </compute/drivers/outscale_sas>`      OUTSCALE_SAS        single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ec2`               :class:`OutscaleSASNodeDriver`      
-`Ovh`_                                :doc:`Click </compute/drivers/ovh>`               OVH                 single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.ovh`               :class:`OvhNodeDriver`              
-`Packet`_                             :doc:`Click </compute/drivers/packet>`            PACKET              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.packet`            :class:`PacketNodeDriver`           
-`ProfitBricks`_                                                                         PROFIT_BRICKS       single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.profitbricks`      :class:`ProfitBricksNodeDriver`     
-`Rackspace Cloud (Next Gen)`_         :doc:`Click </compute/drivers/rackspace>`         RACKSPACE           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.rackspace`         :class:`RackspaceNodeDriver`        
-`Rackspace Cloud (First Gen)`_                                                          RACKSPACE_FIRST_GEN single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.rackspace`         :class:`RackspaceFirstGenNodeDriver`
-`RimuHosting`_                                                                          RIMUHOSTING         single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.rimuhosting`       :class:`RimuHostingNodeDriver`      
-`ServerLove`_                                                                           SERVERLOVE          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.serverlove`        :class:`ServerLoveNodeDriver`       
-`skalicloud`_                                                                           SKALICLOUD          single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.skalicloud`        :class:`SkaliCloudNodeDriver`       
-`SoftLayer`_                                                                            SOFTLAYER           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.softlayer`         :class:`SoftLayerNodeDriver`        
-`vCloud`_                                                                               TERREMARK           single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.vcloud`            :class:`TerremarkDriver`            
-`VCL`_                                                                                  VCL                 single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.vcl`               :class:`VCLNodeDriver`              
-`vCloud`_                             :doc:`Click </compute/drivers/vcloud>`            VCLOUD              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.vcloud`            :class:`VCloudNodeDriver`           
-`Voxel VoxCLOUD`_                                                                       VOXEL               single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.voxel`             :class:`VoxelNodeDriver`            
-`vps.net`_                                                                              VPSNET              single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.vpsnet`            :class:`VPSNetNodeDriver`           
-`VMware vSphere`_                     :doc:`Click </compute/drivers/vsphere>`           VSPHERE             single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.vsphere`           :class:`VSphereNodeDriver`          
-`Vultr`_                              :doc:`Click </compute/drivers/vultr>`             VULTR               single region driver                                                                                                                                                      :mod:`libcloud.compute.drivers.vultr`             :class:`VultrNodeDriver`            
-===================================== ================================================= =================== ========================================================================================================================================================================= ================================================= ====================================
+===================================== ================================================= =================== ============================================================================================================================================================================================================== ================================================= ====================================
+Provider                              Documentation                                     Provider Constant   Supported Regions                                                                                                                                                                                              Module                                            Class Name                          
+===================================== ================================================= =================== ============================================================================================================================================================================================================== ================================================= ====================================
+`Abiquo`_                                                                               ABIQUO              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.abiquo`            :class:`AbiquoNodeDriver`           
+`Aliyun ECS`_                         :doc:`Click </compute/drivers/aliyun_ecs>`        ALIYUN_ECS          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ecs`               :class:`ECSDriver`                  
+`PCextreme AuroraCompute`_            :doc:`Click </compute/drivers/auroracompute>`     AURORACOMPUTE       single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.auroracompute`     :class:`AuroraComputeNodeDriver`    
+`Azure Virtual machines`_             :doc:`Click </compute/drivers/azure>`             AZURE               single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.azure`             :class:`AzureNodeDriver`            
+`Azure Virtual machines`_             :doc:`Click </compute/drivers/azure_arm>`         AZURE_ARM           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.azure_arm`         :class:`AzureNodeDriver`            
+`Bluebox Blocks`_                                                                       BLUEBOX             single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.bluebox`           :class:`BlueboxNodeDriver`          
+`Brightbox`_                                                                            BRIGHTBOX           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.brightbox`         :class:`BrightboxNodeDriver`        
+`BSNL`_                               :doc:`Click </compute/drivers/bsnl>`              BSNL                single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.bsnl`              :class:`BSNLNodeDriver`             
+`Cloudscale`_                         :doc:`Click </compute/drivers/cloudscale>`        CLOUDSCALE          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.cloudscale`        :class:`CloudscaleNodeDriver`       
+`CloudSigma (API v2.0)`_              :doc:`Click </compute/drivers/cloudsigma>`        CLOUDSIGMA          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.cloudsigma`        :class:`CloudSigmaNodeDriver`       
+`CloudStack`_                         :doc:`Click </compute/drivers/cloudstack>`        CLOUDSTACK          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.cloudstack`        :class:`CloudStackNodeDriver`       
+`Cloudwatt`_                          :doc:`Click </compute/drivers/cloudwatt>`         CLOUDWATT           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.cloudwatt`         :class:`CloudwattNodeDriver`        
+`DigitalOcean`_                       :doc:`Click </compute/drivers/digital_ocean>`     DIGITAL_OCEAN       single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.digitalocean`      :class:`DigitalOceanNodeDriver`     
+`DimensionData`_                      :doc:`Click </compute/drivers/dimensiondata>`     DIMENSIONDATA       single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.dimensiondata`     :class:`DimensionDataNodeDriver`    
+`Amazon EC2`_                         :doc:`Click </compute/drivers/ec2>`               EC2                 ap-south-1, us-east-1, us-east-2, ap-southeast-2, ap-northeast-1, sa-east-1, cn-north-1, ap-southeast-1, ca-central-1, ap-northeast-2, us-west-2, us-gov-west-1, us-west-1, eu-central-1, eu-west-1, eu-west-2 :mod:`libcloud.compute.drivers.ec2`               :class:`EC2NodeDriver`              
+`Enomaly Elastic Computing Platform`_                                                   ECP                 single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ecp`               :class:`ECPNodeDriver`              
+`ElasticHosts`_                                                                         ELASTICHOSTS        single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.elastichosts`      :class:`ElasticHostsNodeDriver`     
+`Eucalyptus`_                                                                           EUCALYPTUS          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ec2`               :class:`EucNodeDriver`              
+`Exoscale`_                           :doc:`Click </compute/drivers/exoscale>`          EXOSCALE            single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.exoscale`          :class:`ExoscaleNodeDriver`         
+`Gandi`_                              :doc:`Click </compute/drivers/gandi>`             GANDI               single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.gandi`             :class:`GandiNodeDriver`            
+`Google Compute Engine`_              :doc:`Click </compute/drivers/gce>`               GCE                 single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.gce`               :class:`GCENodeDriver`              
+`GoGrid`_                                                                               GOGRID              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.gogrid`            :class:`GoGridNodeDriver`           
+`HostVirtual`_                                                                          HOSTVIRTUAL         single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.hostvirtual`       :class:`HostVirtualNodeDriver`      
+`Ikoula`_                             :doc:`Click </compute/drivers/ikoula>`            IKOULA              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ikoula`            :class:`IkoulaNodeDriver`           
+`Indosat`_                            :doc:`Click </compute/drivers/indosat>`           INDOSAT             single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.indosat`           :class:`IndosatNodeDriver`          
+`InternetSolutions`_                  :doc:`Click </compute/drivers/internetsolutions>` INTERNETSOLUTIONS   single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.internetsolutions` :class:`InternetSolutionsNodeDriver`
+`Joyent`_                                                                               JOYENT              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.joyent`            :class:`JoyentNodeDriver`           
+`Kili Public Cloud`_                  :doc:`Click </compute/drivers/kili>`              KILI                single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.kili`              :class:`KiliCloudNodeDriver`        
+`KTUCloud`_                                                                             KTUCLOUD            single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ktucloud`          :class:`KTUCloudNodeDriver`         
+`Libvirt`_                            :doc:`Click </compute/drivers/libvirt>`           LIBVIRT             single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.libvirt_driver`    :class:`LibvirtNodeDriver`          
+`Linode`_                                                                               LINODE              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.linode`            :class:`LinodeNodeDriver`           
+`MedOne`_                             :doc:`Click </compute/drivers/medone>`            MEDONE              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.medone`            :class:`MedOneNodeDriver`           
+`NephoScale`_                                                                           NEPHOSCALE          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.nephoscale`        :class:`NephoscaleNodeDriver`       
+`Nimbus`_                             :doc:`Click </compute/drivers/nimbus>`            NIMBUS              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ec2`               :class:`NimbusNodeDriver`           
+`NTTAmerica`_                         :doc:`Click </compute/drivers/ntta>`              NTTA                single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ntta`              :class:`NTTAmericaNodeDriver`       
+`OnApp`_                              :doc:`Click </compute/drivers/onapp>`             ONAPP               single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.onapp`             :class:`OnAppNodeDriver`            
+`OpenNebula (v3.8)`_                                                                    OPENNEBULA          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.opennebula`        :class:`OpenNebulaNodeDriver`       
+`OpenStack`_                          :doc:`Click </compute/drivers/openstack>`         OPENSTACK           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.openstack`         :class:`OpenStackNodeDriver`        
+`Outscale INC`_                       :doc:`Click </compute/drivers/outscale_inc>`      OUTSCALE_INC        single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ec2`               :class:`OutscaleINCNodeDriver`      
+`Outscale SAS`_                       :doc:`Click </compute/drivers/outscale_sas>`      OUTSCALE_SAS        single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ec2`               :class:`OutscaleSASNodeDriver`      
+`Ovh`_                                :doc:`Click </compute/drivers/ovh>`               OVH                 single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.ovh`               :class:`OvhNodeDriver`              
+`Packet`_                             :doc:`Click </compute/drivers/packet>`            PACKET              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.packet`            :class:`PacketNodeDriver`           
+`ProfitBricks`_                                                                         PROFIT_BRICKS       single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.profitbricks`      :class:`ProfitBricksNodeDriver`     
+`Rackspace Cloud (Next Gen)`_         :doc:`Click </compute/drivers/rackspace>`         RACKSPACE           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.rackspace`         :class:`RackspaceNodeDriver`        
+`Rackspace Cloud (First Gen)`_                                                          RACKSPACE_FIRST_GEN single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.rackspace`         :class:`RackspaceFirstGenNodeDriver`
+`RimuHosting`_                                                                          RIMUHOSTING         single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.rimuhosting`       :class:`RimuHostingNodeDriver`      
+`ServerLove`_                                                                           SERVERLOVE          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.serverlove`        :class:`ServerLoveNodeDriver`       
+`skalicloud`_                                                                           SKALICLOUD          single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.skalicloud`        :class:`SkaliCloudNodeDriver`       
+`SoftLayer`_                                                                            SOFTLAYER           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.softlayer`         :class:`SoftLayerNodeDriver`        
+`vCloud`_                                                                               TERREMARK           single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.vcloud`            :class:`TerremarkDriver`            
+`VCL`_                                                                                  VCL                 single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.vcl`               :class:`VCLNodeDriver`              
+`vCloud`_                             :doc:`Click </compute/drivers/vcloud>`            VCLOUD              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.vcloud`            :class:`VCloudNodeDriver`           
+`Voxel VoxCLOUD`_                                                                       VOXEL               single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.voxel`             :class:`VoxelNodeDriver`            
+`vps.net`_                                                                              VPSNET              single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.vpsnet`            :class:`VPSNetNodeDriver`           
+`VMware vSphere`_                     :doc:`Click </compute/drivers/vsphere>`           VSPHERE             single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.vsphere`           :class:`VSphereNodeDriver`          
+`Vultr`_                              :doc:`Click </compute/drivers/vultr>`             VULTR               single region driver                                                                                                                                                                                           :mod:`libcloud.compute.drivers.vultr`             :class:`VultrNodeDriver`            
+===================================== ================================================= =================== ============================================================================================================================================================================================================== ================================================= ====================================
 
 .. _`Abiquo`: http://www.abiquo.com/
 .. _`Aliyun ECS`: https://www.aliyun.com/product/ecs
@@ -69,7 +69,7 @@ Provider                              Documentation
 .. _`Bluebox Blocks`: http://bluebox.net
 .. _`Brightbox`: http://www.brightbox.co.uk/
 .. _`BSNL`: http://www.bsnlcloud.com/
-.. _`cloudscale.ch`: https://www.cloudscale.ch
+.. _`Cloudscale`: https://www.cloudscale.ch
 .. _`CloudSigma (API v2.0)`: http://www.cloudsigma.com/
 .. _`CloudStack`: http://cloudstack.org/
 .. _`Cloudwatt`: https://www.cloudwatt.com/

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/dns/_supported_methods.rst
----------------------------------------------------------------------
diff --git a/docs/dns/_supported_methods.rst b/docs/dns/_supported_methods.rst
index f812164..c3f42b0 100644
--- a/docs/dns/_supported_methods.rst
+++ b/docs/dns/_supported_methods.rst
@@ -18,6 +18,7 @@ Provider            list zones list records create zone update zone create recor
 `Luadns`_           yes        yes          yes         no          yes           no            yes         yes          
 `NFSN DNS`_         no         yes          no          no          yes           no            no          yes          
 `NS1 DNS`_          yes        yes          yes         no          yes           yes           yes         yes          
+`OnApp`_            yes        yes          yes         no          yes           yes           yes         yes          
 `Point DNS`_        yes        yes          yes         yes         yes           yes           yes         yes          
 `PowerDNS`_         yes        yes          yes         no          yes           yes           yes         yes          
 `Rackspace DNS`_    yes        yes          yes         yes         yes           yes           yes         yes          
@@ -44,6 +45,7 @@ Provider            list zones list records create zone update zone create recor
 .. _`Luadns`: https://www.luadns.com
 .. _`NFSN DNS`: https://www.nearlyfreespeech.net
 .. _`NS1 DNS`: https://ns1.com
+.. _`OnApp`: http://onapp.com/
 .. _`Point DNS`: https://pointhq.com/
 .. _`PowerDNS`: https://www.powerdns.com/
 .. _`Rackspace DNS`: http://www.rackspace.com/

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/dns/_supported_providers.rst
----------------------------------------------------------------------
diff --git a/docs/dns/_supported_providers.rst b/docs/dns/_supported_providers.rst
index 2ff4308..0e20c9a 100644
--- a/docs/dns/_supported_providers.rst
+++ b/docs/dns/_supported_providers.rst
@@ -18,6 +18,7 @@ Provider            Documentation                             Provider Constant
 `Luadns`_           :doc:`Click </dns/drivers/luadns>`        LUADNS            single region driver :mod:`libcloud.dns.drivers.luadns`       :class:`LuadnsDNSDriver`      
 `NFSN DNS`_         :doc:`Click </dns/drivers/nfsn>`          NFSN              single region driver :mod:`libcloud.dns.drivers.nfsn`         :class:`NFSNDNSDriver`        
 `NS1 DNS`_                                                    NSONE             single region driver :mod:`libcloud.dns.drivers.nsone`        :class:`NsOneDNSDriver`       
+`OnApp`_            :doc:`Click </dns/drivers/onapp>`         ONAPP             single region driver :mod:`libcloud.dns.drivers.onapp`        :class:`OnAppDNSDriver`       
 `Point DNS`_        :doc:`Click </dns/drivers/pointdns>`      POINTDNS          single region driver :mod:`libcloud.dns.drivers.pointdns`     :class:`PointDNSDriver`       
 `PowerDNS`_         :doc:`Click </dns/drivers/powerdns>`      POWERDNS          single region driver :mod:`libcloud.dns.drivers.powerdns`     :class:`PowerDNSDriver`       
 `Rackspace DNS`_                                              RACKSPACE         us, uk               :mod:`libcloud.dns.drivers.rackspace`    :class:`RackspaceDNSDriver`   
@@ -44,6 +45,7 @@ Provider            Documentation                             Provider Constant
 .. _`Luadns`: https://www.luadns.com
 .. _`NFSN DNS`: https://www.nearlyfreespeech.net
 .. _`NS1 DNS`: https://ns1.com
+.. _`OnApp`: http://onapp.com/
 .. _`Point DNS`: https://pointhq.com/
 .. _`PowerDNS`: https://www.powerdns.com/
 .. _`Rackspace DNS`: http://www.rackspace.com/

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/loadbalancer/_supported_providers.rst
----------------------------------------------------------------------
diff --git a/docs/loadbalancer/_supported_providers.rst b/docs/loadbalancer/_supported_providers.rst
index d51bcdd..c99cecb 100644
--- a/docs/loadbalancer/_supported_providers.rst
+++ b/docs/loadbalancer/_supported_providers.rst
@@ -12,7 +12,7 @@ Provider                               Documentation
 `Google Compute Engine Load Balancer`_ :doc:`Click </loadbalancer/drivers/gce>`           GCE               single region driver         :mod:`libcloud.loadbalancer.drivers.gce`           :class:`GCELBDriver`          
 `GoGrid LB`_                                                                              GOGRID            single region driver         :mod:`libcloud.loadbalancer.drivers.gogrid`        :class:`GoGridLBDriver`       
 `Ninefold LB`_                                                                            NINEFOLD          single region driver         :mod:`libcloud.loadbalancer.drivers.ninefold`      :class:`NinefoldLBDriver`     
-`Rackspace LB`_                                                                           RACKSPACE         syd, iad, dfw, lon, hkg, ord :mod:`libcloud.loadbalancer.drivers.rackspace`     :class:`RackspaceLBDriver`    
+`Rackspace LB`_                                                                           RACKSPACE         syd, iad, dfw, lon, ord, hkg :mod:`libcloud.loadbalancer.drivers.rackspace`     :class:`RackspaceLBDriver`    
 `Softlayer Load Balancing`_                                                               SOFTLAYER         single region driver         :mod:`libcloud.loadbalancer.drivers.softlayer`     :class:`SoftlayerLBDriver`    
 ====================================== ================================================== ================= ============================ ================================================== ==============================
 

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/storage/_supported_methods_cdn.rst
----------------------------------------------------------------------
diff --git a/docs/storage/_supported_methods_cdn.rst b/docs/storage/_supported_methods_cdn.rst
index 2a63fb9..5105f54 100644
--- a/docs/storage/_supported_methods_cdn.rst
+++ b/docs/storage/_supported_methods_cdn.rst
@@ -13,17 +13,23 @@ Provider                      enable container cdn enable object cdn get contain
 `Nimbus.io`_                  no                   no                no                    no                
 `Ninefold`_                   no                   yes               no                    yes               
 `OpenStack Swift`_            yes                  no                yes                   yes               
-`Amazon S3 (standard)`_       no                   no                no                    no                
+`Amazon S3 (us-east-1)`_      no                   no                no                    no                
 `Amazon S3 (ap-northeast-1)`_ no                   no                no                    no                
 `Amazon S3 (ap-northeast-1)`_ no                   no                no                    no                
 `Amazon S3 (ap-northeast-2)`_ no                   no                no                    no                
+`Amazon S3 (ap-south-1)`_     no                   no                no                    no                
 `Amazon S3 (ap-southeast-1)`_ no                   no                no                    no                
 `Amazon S3 (ap-southeast-2)`_ no                   no                no                    no                
+`Amazon S3 (ca-central-1)`_   no                   no                no                    no                
 `Amazon S3 (cn-north-1)`_     no                   no                no                    no                
+`Amazon S3 (eu-central-1)`_   no                   no                no                    no                
 `Amazon S3 (eu-west-1)`_      no                   no                no                    no                
+`Amazon S3 (eu-west-2)`_      no                   no                no                    no                
 `Ceph RGW`_                   no                   no                no                    no                
 `RGW Outscale`_               no                   no                no                    no                
 `Amazon S3 (sa-east-1)`_      no                   no                no                    no                
+`Amazon S3 (us-east-2)`_      no                   no                no                    no                
+`Amazon S3 (us-gov-west-1)`_  no                   no                no                    no                
 `Amazon S3 (us-west-1)`_      no                   no                no                    no                
 `Amazon S3 (us-west-2)`_      no                   no                no                    no                
 ============================= ==================== ================= ===================== ==================
@@ -38,16 +44,22 @@ Provider                      enable container cdn enable object cdn get contain
 .. _`Nimbus.io`: https://nimbus.io/
 .. _`Ninefold`: http://ninefold.com/
 .. _`OpenStack Swift`: http://www.rackspace.com/
-.. _`Amazon S3 (standard)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-east-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (ap-south-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-southeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-southeast-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (ca-central-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (cn-north-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (eu-central-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (eu-west-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (eu-west-2)`: http://aws.amazon.com/s3/
 .. _`Ceph RGW`: http://ceph.com/
 .. _`RGW Outscale`: https://en.outscale.com/
 .. _`Amazon S3 (sa-east-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-east-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-gov-west-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (us-west-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (us-west-2)`: http://aws.amazon.com/s3/

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/storage/_supported_methods_main.rst
----------------------------------------------------------------------
diff --git a/docs/storage/_supported_methods_main.rst b/docs/storage/_supported_methods_main.rst
index 472bce5..d6da8fd 100644
--- a/docs/storage/_supported_methods_main.rst
+++ b/docs/storage/_supported_methods_main.rst
@@ -13,17 +13,23 @@ Provider                      list containers list objects create container dele
 `Nimbus.io`_                  yes             no           yes              no               no            no                      no              no                        no           
 `Ninefold`_                   yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `OpenStack Swift`_            yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
-`Amazon S3 (standard)`_       yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (us-east-1)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (ap-northeast-1)`_ yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (ap-northeast-1)`_ yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (ap-northeast-2)`_ yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (ap-south-1)`_     yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (ap-southeast-1)`_ yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (ap-southeast-2)`_ yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (ca-central-1)`_   yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (cn-north-1)`_     yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (eu-central-1)`_   yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (eu-west-1)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (eu-west-2)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Ceph RGW`_                   yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `RGW Outscale`_               yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (sa-east-1)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (us-east-2)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
+`Amazon S3 (us-gov-west-1)`_  yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (us-west-1)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 `Amazon S3 (us-west-2)`_      yes             yes          yes              yes              yes           yes                     yes             yes                       yes          
 ============================= =============== ============ ================ ================ ============= ======================= =============== ========================= =============
@@ -38,16 +44,22 @@ Provider                      list containers list objects create container dele
 .. _`Nimbus.io`: https://nimbus.io/
 .. _`Ninefold`: http://ninefold.com/
 .. _`OpenStack Swift`: http://www.rackspace.com/
-.. _`Amazon S3 (standard)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-east-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (ap-south-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-southeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-southeast-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (ca-central-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (cn-north-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (eu-central-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (eu-west-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (eu-west-2)`: http://aws.amazon.com/s3/
 .. _`Ceph RGW`: http://ceph.com/
 .. _`RGW Outscale`: https://en.outscale.com/
 .. _`Amazon S3 (sa-east-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-east-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-gov-west-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (us-west-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (us-west-2)`: http://aws.amazon.com/s3/

http://git-wip-us.apache.org/repos/asf/libcloud/blob/14cb428e/docs/storage/_supported_providers.rst
----------------------------------------------------------------------
diff --git a/docs/storage/_supported_providers.rst b/docs/storage/_supported_providers.rst
index c04d172..21bfb43 100644
--- a/docs/storage/_supported_providers.rst
+++ b/docs/storage/_supported_providers.rst
@@ -13,17 +13,23 @@ Provider                      Documentation                                   Pr
 `Nimbus.io`_                                                                  NIMBUS            single region driver         :mod:`libcloud.storage.drivers.nimbus`         :class:`NimbusStorageDriver`        
 `Ninefold`_                                                                   NINEFOLD          single region driver         :mod:`libcloud.storage.drivers.ninefold`       :class:`NinefoldStorageDriver`      
 `OpenStack Swift`_            :doc:`Click </storage/drivers/openstack_swift>` OPENSTACK_SWIFT   ord, dfw, iad, lon, hkg, syd :mod:`libcloud.storage.drivers.cloudfiles`     :class:`OpenStackSwiftStorageDriver`
-`Amazon S3 (standard)`_       :doc:`Click </storage/drivers/s3>`              S3                single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3StorageDriver`            
+`Amazon S3 (us-east-1)`_      :doc:`Click </storage/drivers/s3>`              S3                single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3StorageDriver`            
 `Amazon S3 (ap-northeast-1)`_                                                 S3_AP_NORTHEAST   single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3APNE1StorageDriver`       
 `Amazon S3 (ap-northeast-1)`_                                                 S3_AP_NORTHEAST1  single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3APNE1StorageDriver`       
 `Amazon S3 (ap-northeast-2)`_                                                 S3_AP_NORTHEAST2  single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3APNE2StorageDriver`       
+`Amazon S3 (ap-south-1)`_                                                     S3_AP_SOUTH       single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3APSouthStorageDriver`     
 `Amazon S3 (ap-southeast-1)`_                                                 S3_AP_SOUTHEAST   single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3APSEStorageDriver`        
 `Amazon S3 (ap-southeast-2)`_                                                 S3_AP_SOUTHEAST2  single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3APSE2StorageDriver`       
+`Amazon S3 (ca-central-1)`_                                                   S3_CA_CENTRAL     single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3CACentralStorageDriver`   
 `Amazon S3 (cn-north-1)`_                                                     S3_CN_NORTH       single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3CNNorthStorageDriver`     
+`Amazon S3 (eu-central-1)`_                                                   S3_EU_CENTRAL     single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3EUCentralStorageDriver`   
 `Amazon S3 (eu-west-1)`_                                                      S3_EU_WEST        single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3EUWestStorageDriver`      
+`Amazon S3 (eu-west-2)`_                                                      S3_EU_WEST2       single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3EUWest2StorageDriver`     
 `Ceph RGW`_                                                                   S3_RGW            single region driver         :mod:`libcloud.storage.drivers.rgw`            :class:`S3RGWStorageDriver`         
 `RGW Outscale`_                                                               S3_RGW_OUTSCALE   single region driver         :mod:`libcloud.storage.drivers.rgw`            :class:`S3RGWOutscaleStorageDriver` 
 `Amazon S3 (sa-east-1)`_                                                      S3_SA_EAST        single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3SAEastStorageDriver`      
+`Amazon S3 (us-east-2)`_                                                      S3_US_EAST2       single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3USEast2StorageDriver`     
+`Amazon S3 (us-gov-west-1)`_                                                  S3_US_GOV_WEST    single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3USGovWestStorageDriver`   
 `Amazon S3 (us-west-1)`_                                                      S3_US_WEST        single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3USWestStorageDriver`      
 `Amazon S3 (us-west-2)`_                                                      S3_US_WEST_OREGON single region driver         :mod:`libcloud.storage.drivers.s3`             :class:`S3USWestOregonStorageDriver`
 ============================= =============================================== ================= ============================ ============================================== ====================================
@@ -38,16 +44,22 @@ Provider                      Documentation                                   Pr
 .. _`Nimbus.io`: https://nimbus.io/
 .. _`Ninefold`: http://ninefold.com/
 .. _`OpenStack Swift`: http://www.rackspace.com/
-.. _`Amazon S3 (standard)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-east-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-northeast-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (ap-south-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-southeast-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (ap-southeast-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (ca-central-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (cn-north-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (eu-central-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (eu-west-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (eu-west-2)`: http://aws.amazon.com/s3/
 .. _`Ceph RGW`: http://ceph.com/
 .. _`RGW Outscale`: https://en.outscale.com/
 .. _`Amazon S3 (sa-east-1)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-east-2)`: http://aws.amazon.com/s3/
+.. _`Amazon S3 (us-gov-west-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (us-west-1)`: http://aws.amazon.com/s3/
 .. _`Amazon S3 (us-west-2)`: http://aws.amazon.com/s3/