You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2013/06/23 19:01:06 UTC
[02/10] git commit: Update Rackspace DNS driver to use 'region' kwarg.
Update Rackspace DNS driver to use 'region' kwarg.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7e827a3c
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7e827a3c
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7e827a3c
Branch: refs/heads/make_rackspace_drivers_multi_datacenter_aware
Commit: 7e827a3ca347dac2ac2e265752f8be1abbd52fda
Parents: 7a0c1e3
Author: Tomaz Muraus <to...@apache.org>
Authored: Sun Jun 23 08:24:17 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sun Jun 23 08:24:17 2013 +0200
----------------------------------------------------------------------
libcloud/dns/drivers/rackspace.py | 64 +++++++++++++++++++++-------------
libcloud/dns/providers.py | 12 ++++---
libcloud/dns/types.py | 7 ++--
3 files changed, 53 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/7e827a3c/libcloud/dns/drivers/rackspace.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/drivers/rackspace.py b/libcloud/dns/drivers/rackspace.py
index dd30171..c2b7173 100644
--- a/libcloud/dns/drivers/rackspace.py
+++ b/libcloud/dns/drivers/rackspace.py
@@ -25,7 +25,7 @@ import copy
from libcloud.common.base import PollingConnection
from libcloud.common.types import LibcloudError
from libcloud.utils.misc import merge_valid_keys, get_new_obj
-from libcloud.common.rackspace import AUTH_URL_US, AUTH_URL_UK
+from libcloud.common.rackspace import AUTH_URL
from libcloud.compute.drivers.openstack import OpenStack_1_1_Connection
from libcloud.compute.drivers.openstack import OpenStack_1_1_Response
@@ -76,6 +76,12 @@ class RackspaceDNSConnection(OpenStack_1_1_Connection, PollingConnection):
XML_NAMESPACE = None
poll_interval = 2.5
timeout = 30
+ auth_url = AUTH_URL
+ _auth_version = '2.0'
+
+ def __init__(self, *args, **kwargs):
+ self.region = kwargs.pop('region', None)
+ super(RackspaceDNSConnection, self).__init__(*args, **kwargs)
def get_poll_request_kwargs(self, response, context, request_kwargs):
job_id = response.object['jobId']
@@ -97,45 +103,53 @@ class RackspaceDNSConnection(OpenStack_1_1_Connection, PollingConnection):
Dirty, dirty hack. DNS doesn't get returned in the auth 1.1 service
catalog, so we build it from the servers url.
"""
-
- if self._auth_version == "1.1":
- ep = self.service_catalog.get_endpoint(name="cloudServers")
-
- return self._construct_dns_endpoint_from_servers_endpoint(ep)
- elif "2.0" in self._auth_version:
- ep = self.service_catalog.get_endpoint(name="cloudServers",
- service_type="compute",
+ if '2.0' in self._auth_version:
+ ep = self.service_catalog.get_endpoint(name='cloudDNS',
+ service_type='rax:dns',
region=None)
-
- return self._construct_dns_endpoint_from_servers_endpoint(ep)
else:
raise LibcloudError("Auth version %s not supported" %
(self._auth_version))
- def _construct_dns_endpoint_from_servers_endpoint(self, ep):
- if 'publicURL' in ep:
- return ep['publicURL'].replace("servers", "dns")
- else:
- raise LibcloudError('Could not find specified endpoint')
-
+ public_url = ep.get('publicURL', None)
-class RackspaceUSDNSConnection(RackspaceDNSConnection):
- auth_url = AUTH_URL_US
+ if not public_url:
+ raise LibcloudError('Could not find specified endpoint')
+ # This is a nasty hack, but because of how global auth and old accounts
+ # work, there is no way around it.
+ if self.region == 'us':
+ # Old UK account, which only has us endpoint in the catalog
+ public_url = public_url.replace('https://lon.dns.api',
+ 'https://dns.api')
+ if self.region == 'uk':
+ # Old US account, which only has uk endpoint in the catalog
+ public_url = public_url.replace('https://dns.api',
+ 'https://lon.dns.api')
-class RackspaceUKDNSConnection(RackspaceDNSConnection):
- auth_url = AUTH_URL_UK
+ return public_url
class RackspaceDNSDriver(DNSDriver, OpenStackDriverMixin):
website = 'http://www.rackspace.com/'
+ name = 'Rackspace DNS'
+ type = Provider.RACKSPACE
+ connectionCls = RackspaceDNSConnection
def __init__(self, *args, **kwargs):
+ region = kwargs.pop('region', 'us')
+
+ if region not in ['us', 'uk']:
+ raise ValueError('Invalid region: %s' % (region))
+
+ self.region = region
OpenStackDriverMixin.__init__(self, *args, **kwargs)
super(RackspaceDNSDriver, self).__init__(*args, **kwargs)
def _ex_connection_class_kwargs(self):
- return self.openstack_connection_kwargs()
+ kwargs = {'region': self.region}
+ kwargs.update(self.openstack_connection_kwargs())
+ return kwargs
RECORD_TYPE_MAP = {
RecordType.A: 'A',
@@ -385,10 +399,12 @@ class RackspaceDNSDriver(DNSDriver, OpenStackDriverMixin):
class RackspaceUSDNSDriver(RackspaceDNSDriver):
name = 'Rackspace DNS (US)'
type = Provider.RACKSPACE_US
- connectionCls = RackspaceUSDNSConnection
class RackspaceUKDNSDriver(RackspaceDNSDriver):
name = 'Rackspace DNS (UK)'
type = Provider.RACKSPACE_UK
- connectionCls = RackspaceUKDNSConnection
+
+ def __init__(self, *args, **kwargs):
+ kwargs['region'] = 'uk'
+ super(RackspaceUKDNSDriver, self).__init__(*args, **kwargs)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/7e827a3c/libcloud/dns/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/providers.py b/libcloud/dns/providers.py
index bdd704e..948a9b7 100644
--- a/libcloud/dns/providers.py
+++ b/libcloud/dns/providers.py
@@ -24,16 +24,20 @@ DRIVERS = {
('libcloud.dns.drivers.linode', 'LinodeDNSDriver'),
Provider.ZERIGO:
('libcloud.dns.drivers.zerigo', 'ZerigoDNSDriver'),
- Provider.RACKSPACE_US:
+ Provider.RACKSPACE:
('libcloud.dns.drivers.rackspace', 'RackspaceUSDNSDriver'),
- Provider.RACKSPACE_UK:
- ('libcloud.dns.drivers.rackspace', 'RackspaceUKDNSDriver'),
Provider.HOSTVIRTUAL:
('libcloud.dns.drivers.hostvirtual', 'HostVirtualDNSDriver'),
Provider.ROUTE53:
('libcloud.dns.drivers.route53', 'Route53DNSDriver'),
Provider.GANDI:
- ('libcloud.dns.drivers.gandi', 'GandiDNSDriver')
+ ('libcloud.dns.drivers.gandi', 'GandiDNSDriver'),
+
+ # Deprecated
+ Provider.RACKSPACE_US:
+ ('libcloud.dns.drivers.rackspace', 'RackspaceUSDNSDriver'),
+ Provider.RACKSPACE_UK:
+ ('libcloud.dns.drivers.rackspace', 'RackspaceUKDNSDriver')
}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/7e827a3c/libcloud/dns/types.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/types.py b/libcloud/dns/types.py
index 7acb1e4..5191088 100644
--- a/libcloud/dns/types.py
+++ b/libcloud/dns/types.py
@@ -30,13 +30,16 @@ __all__ = [
class Provider(object):
DUMMY = 'dummy'
LINODE = 'linode'
+ RACKSPACE = 'rackspace'
ZERIGO = 'zerigo'
- RACKSPACE_US = 'rackspace_us'
- RACKSPACE_UK = 'rackspace_uk'
ROUTE53 = 'route53'
HOSTVIRTUAL = 'hostvirtual'
GANDI = 'gandi'
+ # Deprecated
+ RACKSPACE_US = 'rackspace_us'
+ RACKSPACE_UK = 'rackspace_uk'
+
class RecordType(object):
"""