Update Rackspace loadbalancer driver to use 'datacenter' kwarg.

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

Branch: refs/heads/make_rackspace_drivers_multi_datacenter_aware
Commit: 7efe251d67701b271523c857e79ed0444bd435e7
Parents: 9d5a73c
Author: Tomaz Muraus <[email protected]>
Authored: Sun Jun 23 08:49:44 2013 +0200
Committer: Tomaz Muraus <[email protected]>
Committed: Sun Jun 23 08:49:44 2013 +0200

----------------------------------------------------------------------
 libcloud/loadbalancer/drivers/rackspace.py | 85 ++++++++++---------------
 libcloud/loadbalancer/providers.py         | 12 ++--
 libcloud/loadbalancer/types.py             |  7 +-
 3 files changed, 47 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/7efe251d/libcloud/loadbalancer/drivers/rackspace.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/drivers/rackspace.py 
b/libcloud/loadbalancer/drivers/rackspace.py
index 1aa7fd5..c93c79e 100644
--- a/libcloud/loadbalancer/drivers/rackspace.py
+++ b/libcloud/loadbalancer/drivers/rackspace.py
@@ -26,10 +26,26 @@ from libcloud.loadbalancer.base import LoadBalancer, 
Member, Driver, Algorithm
 from libcloud.loadbalancer.base import DEFAULT_ALGORITHM
 from libcloud.common.types import LibcloudError
 from libcloud.common.base import JsonResponse, PollingConnection
+from libcloud.compute.drivers.rackspace import RackspaceConnection
 from libcloud.loadbalancer.types import State, MemberCondition
 from libcloud.common.openstack import OpenStackBaseConnection,\
     OpenStackDriverMixin
-from libcloud.common.rackspace import AUTH_URL_US, AUTH_URL_UK
+from libcloud.common.rackspace import AUTH_URL
+
+ENDPOINT_ARGS_MAP = {
+    'dfw': {'service_type': 'rax:load-balancer',
+            'name': 'cloudLoadBalancers',
+            'region': 'DFW'},
+    'ord': {'service_type': 'rax:load-balancer',
+            'name': 'cloudLoadBalancers',
+            'region': 'ORD'},
+    'lon': {'service_type': 'rax:load-balancer',
+            'name': 'cloudLoadBalancers',
+            'region': 'LON'},
+    'syd': {'service_type': 'rax:load-balancer',
+            'name': 'cloudLoadBalancers',
+            'region': 'SYD'},
+}
 
 
 class RackspaceResponse(JsonResponse):
@@ -222,20 +238,12 @@ class RackspaceAccessRule(object):
         return as_dict
 
 
-class RackspaceConnection(OpenStackBaseConnection, PollingConnection):
+class RackspaceConnection(RackspaceConnection, PollingConnection):
     responseCls = RackspaceResponse
-    auth_url = AUTH_URL_US
+    auth_url = AUTH_URL
     poll_interval = 2
     timeout = 80
 
-    def __init__(self, user_id, key, secure=True, ex_force_region='ord',
-                 **kwargs):
-        super(RackspaceConnection, self).__init__(user_id, key, secure,
-                                                  **kwargs)
-        self.api_version = 'v1.0'
-        self.accept_format = 'application/json'
-        self._ex_force_region = ex_force_region
-
     def request(self, action, params=None, data='', headers=None,
                 method='GET'):
         if not headers:
@@ -264,40 +272,6 @@ class RackspaceConnection(OpenStackBaseConnection, 
PollingConnection):
 
         return state == 'ACTIVE'
 
-    def get_endpoint(self):
-        """
-        FIXME:
-        Dirty, dirty hack. Loadbalancers so not show up 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_loadbalancer_endpoint_from_servers_endpoint(
-                ep)
-        elif "2.0" in self._auth_version:
-            ep = self.service_catalog.get_endpoint(name="cloudServers",
-                                                   service_type="compute",
-                                                   region=None)
-
-            return self._construct_loadbalancer_endpoint_from_servers_endpoint(
-                ep)
-        else:
-            raise LibcloudError(
-                "Auth version %s not supported" % self._auth_version)
-
-    def _construct_loadbalancer_endpoint_from_servers_endpoint(self, ep):
-        if 'publicURL' in ep:
-            loadbalancer_prefix = "%s.loadbalancers" % self._ex_force_region
-            return ep['publicURL'].replace("servers", loadbalancer_prefix)
-        else:
-            raise LibcloudError('Could not find specified endpoint')
-
-
-class RackspaceUKConnection(RackspaceConnection):
-    auth_url = AUTH_URL_UK
-
 
 class RackspaceLBDriver(Driver, OpenStackDriverMixin):
     connectionCls = RackspaceConnection
@@ -333,15 +307,22 @@ class RackspaceLBDriver(Driver, OpenStackDriverMixin):
     _ALGORITHM_TO_VALUE_MAP = reverse_dict(_VALUE_TO_ALGORITHM_MAP)
 
     def __init__(self, *args, **kwargs):
+        datacenter = kwargs.pop('datacenter', 'ord')
+        ex_force_region = kwargs.pop('ex_force_region', None)
+
+        if ex_force_region:
+            # For backward compatibility
+            datacenter = ex_force_region
+
+        self.datacenter = datacenter
+
         OpenStackDriverMixin.__init__(self, *args, **kwargs)
-        self._ex_force_region = kwargs.pop('ex_force_region', None)
         super(RackspaceLBDriver, self).__init__(*args, **kwargs)
 
     def _ex_connection_class_kwargs(self):
-        kwargs = self.openstack_connection_kwargs()
-        if self._ex_force_region:
-            kwargs['ex_force_region'] = self._ex_force_region
-
+        endpoint_args = ENDPOINT_ARGS_MAP[self.datacenter]
+        kwargs = {'get_endpoint_args': endpoint_args}
+        kwargs.update(self.openstack_connection_kwargs())
         return kwargs
 
     def list_protocols(self):
@@ -1535,4 +1516,6 @@ class RackspaceLBDriver(Driver, OpenStackDriverMixin):
 
 
 class RackspaceUKLBDriver(RackspaceLBDriver):
-    connectionCls = RackspaceUKConnection
+    def __init__(self, *args, **kwargs):
+        kwargs['datacenter'] = 'lon'
+        super(RackspaceUKLBDriver, self).__init__(*args, **kwargs)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7efe251d/libcloud/loadbalancer/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/providers.py 
b/libcloud/loadbalancer/providers.py
index cf2411d..e1bb3aa 100644
--- a/libcloud/loadbalancer/providers.py
+++ b/libcloud/loadbalancer/providers.py
@@ -24,10 +24,8 @@ __all__ = [
 ]
 
 DRIVERS = {
-        Provider.RACKSPACE_US:
+        Provider.RACKSPACE:
             ('libcloud.loadbalancer.drivers.rackspace', 'RackspaceLBDriver'),
-        Provider.RACKSPACE_UK:
-            ('libcloud.loadbalancer.drivers.rackspace', 'RackspaceUKLBDriver'),
         Provider.GOGRID:
             ('libcloud.loadbalancer.drivers.gogrid', 'GoGridLBDriver'),
         Provider.NINEFOLD:
@@ -35,7 +33,13 @@ DRIVERS = {
         Provider.BRIGHTBOX:
             ('libcloud.loadbalancer.drivers.brightbox', 'BrightboxLBDriver'),
         Provider.ELB:
-            ('libcloud.loadbalancer.drivers.elb', 'ElasticLBDriver')
+            ('libcloud.loadbalancer.drivers.elb', 'ElasticLBDriver'),
+
+        # Deprecated
+        Provider.RACKSPACE_US:
+            ('libcloud.loadbalancer.drivers.rackspace', 'RackspaceLBDriver'),
+        Provider.RACKSPACE_UK:
+            ('libcloud.loadbalancer.drivers.rackspace', 'RackspaceUKLBDriver')
 }
 
 

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7efe251d/libcloud/loadbalancer/types.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/types.py b/libcloud/loadbalancer/types.py
index 95f4a9f..5b9c91e 100644
--- a/libcloud/loadbalancer/types.py
+++ b/libcloud/loadbalancer/types.py
@@ -32,12 +32,15 @@ class LibcloudLBImmutableError(LibcloudLBError):
 
 
 class Provider(object):
-    RACKSPACE_US = 'rackspace_us'
     GOGRID = 'gogrid'
     NINEFOLD = 'ninefold'
-    RACKSPACE_UK = 'rackspace_uk'
     BRIGHTBOX = 'brightbox'
     ELB = 'elb'
+    RACKSPACE = 'rackspace'
+
+    # Deprecated
+    RACKSPACE_US = 'rackspace_us'
+    RACKSPACE_UK = 'rackspace_uk'
 
 
 class State(object):

Reply via email to