diff --git a/libcloud/compute/drivers/rackspacenova.py b/libcloud/compute/drivers/rackspacenova.py index da13c59..f23b625 100644 --- a/libcloud/compute/drivers/rackspacenova.py +++ b/libcloud/compute/drivers/rackspacenova.py @@ -56,6 +56,13 @@ class RackspaceNovaDfwConnection(RackspaceNovaConnection): 'region': 'DFW'} +class RackspaceNovaLonConnection(RackspaceNovaConnection): + + get_endpoint_args = {'service_type': 'compute', + 'name': 'cloudServersOpenStack', + 'region': 'LON'} + + class RackspaceNovaDfwNodeDriver(OpenStack_1_1_NodeDriver): name = 'RackspaceNovadfw' website = 'http://www.rackspace.com/' @@ -64,6 +71,14 @@ class RackspaceNovaDfwNodeDriver(OpenStack_1_1_NodeDriver): api_name = 'rackspacenovadfw' +class RackspaceNovaLonNodeDriver(OpenStack_1_1_NodeDriver): + name = 'RackspaceNovalon' + website = 'http://www.rackspace.com/' + connectionCls = RackspaceNovaLonConnection + type = Provider.RACKSPACE_NOVA_LON + api_name = 'rackspacenovalon' + + class RackspaceNovaBetaNodeDriver(OpenStack_1_1_NodeDriver): name = 'RackspaceNovaBeta' website = 'http://www.rackspace.com/' diff --git a/libcloud/compute/providers.py b/libcloud/compute/providers.py index c6c2b30..b005d22 100644 --- a/libcloud/compute/providers.py +++ b/libcloud/compute/providers.py @@ -111,6 +111,8 @@ DRIVERS = { ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaBetaNodeDriver'), Provider.RACKSPACE_NOVA_DFW: ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaDfwNodeDriver'), + Provider.RACKSPACE_NOVA_LON: + ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaLonNodeDriver'), Provider.LIBVIRT: ('libcloud.compute.drivers.libvirt_driver', 'LibvirtNodeDriver'), Provider.JOYENT: diff --git a/libcloud/compute/types.py b/libcloud/compute/types.py index 3d1076f..bb20876 100644 --- a/libcloud/compute/types.py +++ b/libcloud/compute/types.py @@ -62,6 +62,8 @@ class Provider(object): @cvar CLOUDSTACK: CloudStack @cvar CLOUDSIGMA_US: CloudSigma US Las Vegas @cvar RACKSPACE_NOVA_BETA: Rackspace Nova Private Beta (ORD) + @cvar RACKSPACE_NOVA_DFW: Rackspace Nova Private DFW (DFW) + @cvar RACKSPACE_NOVA_LON: Rackspace Nova Private LON (LON) @cvar LIBVIRT: Libvirt driver @cvar JOYENT: Joyent driver @cvar VCL: VCL driver @@ -117,6 +119,7 @@ class Provider(object): JOYENT = 45 VCL = 46 KTUCLOUD=47 + RACKSPACE_NOVA_LON = 48 class NodeState(object): diff --git a/test/compute/test_rackspacenova.py b/test/compute/test_rackspacenova.py index 1fd8002..ba8af5e 100644 --- a/test/compute/test_rackspacenova.py +++ b/test/compute/test_rackspacenova.py @@ -18,7 +18,8 @@ import unittest from libcloud.utils.py3 import method_type from libcloud.compute.drivers.rackspacenova import RackspaceNovaBetaNodeDriver, \ - RackspaceNovaDfwNodeDriver + RackspaceNovaDfwNodeDriver, \ + RackspaceNovaLonNodeDriver from test.compute.test_openstack import OpenStack_1_1_Tests, OpenStack_1_1_MockHttp from libcloud.pricing import clear_pricing_data @@ -88,5 +89,29 @@ class RackspaceNovaDfwTests(OpenStack_1_1_Tests): self.assertEqual('https://dfw.servers.api.rackspacecloud.com/v2/1337', self.driver.connection.get_endpoint()) +class RackspaceNovaLonTests(OpenStack_1_1_Tests): + + driver_klass = RackspaceNovaLonNodeDriver + driver_type = RackspaceNovaLonNodeDriver + driver_args = RACKSPACE_NOVA_PARAMS + ('1.1',) + driver_kwargs = {'ex_force_auth_version': '2.0'} + + @classmethod + def create_driver(self): + return self.driver_type(*self.driver_args, **self.driver_kwargs) + + def setUp(self): + self.driver_klass.connectionCls.conn_classes = (RackspaceNovaMockHttp, RackspaceNovaMockHttp) + self.driver_klass.connectionCls.auth_url = "https://lon.auth.api.example.com/v2.0/" + self.driver = self.create_driver() + # normally authentication happens lazily, but we force it here + self.driver.connection._populate_hosts_and_request_paths() + clear_pricing_data() + self.node = self.driver.list_nodes()[1] + + def test_service_catalog(self): + self.assertEqual('https://lon.servers.api.rackspacecloud.com/v2/1337', self.driver.connection.get_endpoint()) + + if __name__ == '__main__': sys.exit(unittest.main())