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/