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):
