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/10/15 09:37:01 UTC

[4/6] git commit: Update Rackspace DNS driver to support 'region' argument.

Update Rackspace DNS driver to support 'region' argument.


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

Branch: refs/heads/trunk
Commit: 18baa686a061aabee6d624995d74dd71eb50ce2d
Parents: 0e7ffc9
Author: Tomaz Muraus <to...@apache.org>
Authored: Mon Oct 14 22:34:24 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Mon Oct 14 22:35:19 2013 +0200

----------------------------------------------------------------------
 libcloud/storage/drivers/cloudfiles.py   | 73 ++++++++++++---------------
 libcloud/storage/types.py                |  3 +-
 libcloud/test/storage/test_cloudfiles.py | 28 +++-------
 3 files changed, 40 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/18baa686/libcloud/storage/drivers/cloudfiles.py
----------------------------------------------------------------------
diff --git a/libcloud/storage/drivers/cloudfiles.py b/libcloud/storage/drivers/cloudfiles.py
index 7505c20..b34be48 100644
--- a/libcloud/storage/drivers/cloudfiles.py
+++ b/libcloud/storage/drivers/cloudfiles.py
@@ -48,7 +48,7 @@ from libcloud.storage.types import InvalidContainerNameError
 from libcloud.common.openstack import OpenStackBaseConnection
 from libcloud.common.openstack import OpenStackDriverMixin
 
-from libcloud.common.rackspace import AUTH_URL_US, AUTH_URL_UK
+from libcloud.common.rackspace import AUTH_URL
 
 CDN_HOST = 'cdn.clouddrive.com'
 API_VERSION = 'v1.0'
@@ -103,45 +103,39 @@ class CloudFilesConnection(OpenStackBaseConnection):
     responseCls = CloudFilesResponse
     rawResponseCls = CloudFilesRawResponse
 
-    def __init__(self, user_id, key, secure=True, auth_url=AUTH_URL_US,
-                 **kwargs):
+    auth_url = AUTH_URL
+    _auth_version = '2.0'
+
+    def __init__(self, user_id, key, secure=True, **kwargs):
         super(CloudFilesConnection, self).__init__(user_id, key, secure=secure,
                                                    **kwargs)
-        self.auth_url = auth_url
         self.api_version = API_VERSION
         self.accept_format = 'application/json'
         self.cdn_request = False
 
-        if self._ex_force_service_region:
-            self.service_region = self._ex_force_service_region
-
     def get_endpoint(self):
-        # First, we parse out both files and cdn endpoints
-        # for each auth version
+        region = self._ex_force_service_region.upper()
+
         if '2.0' in self._auth_version:
-            eps = self.service_catalog.get_endpoints(
+            ep = self.service_catalog.get_endpoint(
                 service_type='object-store',
-                name='cloudFiles')
-            cdn_eps = self.service_catalog.get_endpoints(
+                name='cloudFiles',
+                region=region)
+            cdn_ep = self.service_catalog.get_endpoint(
                 service_type='object-store',
-                name='cloudFilesCDN')
-        elif ('1.1' in self._auth_version) or ('1.0' in self._auth_version):
-            eps = self.service_catalog.get_endpoints(name='cloudFiles')
-            cdn_eps = self.service_catalog.get_endpoints(name='cloudFilesCDN')
+                name='cloudFilesCDN',
+                region=region)
+        else:
+            raise LibcloudError(
+                'Auth version "%s" not supported' % (self._auth_version))
 
         # if this is a CDN request, return the cdn url instead
         if self.cdn_request:
-            eps = cdn_eps
-
-        if self._ex_force_service_region:
-            eps = [ep for ep in eps if ep['region'].lower() == self._ex_force_service_region.lower()]
+            ep = cdn_ep
 
-        if len(eps) == 0:
-            # TODO: Better error message
+        if not ep:
             raise LibcloudError('Could not find specified endpoint')
 
-        ep = eps[0]
-
         if 'publicURL' in ep:
             return ep['publicURL']
         else:
@@ -211,17 +205,15 @@ class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
         :param region: ID of the region which should be used.
         :type region: ``str``
         """
-        if hasattr(self, '_region'):
-            region = self._region
-
         # This is here for backard compatibility
         if 'ex_force_service_region' in kwargs:
             region = kwargs['ex_force_service_region']
 
         OpenStackDriverMixin.__init__(self, (), **kwargs)
         super(CloudFilesStorageDriver, self).__init__(key=key, secret=secret,
-                                            secure=secure, host=host,
-                                            port=port, region=region, **kwargs)
+                                                      secure=secure, host=host,
+                                                      port=port, region=region,
+                                                      **kwargs)
 
     def iterate_containers(self):
         response = self.connection.request('')
@@ -656,7 +648,7 @@ class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
         :rtype: ``list`` of :class:`Object`
         """
         return list(self.iterate_container_objects(container,
-            ex_prefix=ex_prefix))
+                                                   ex_prefix=ex_prefix))
 
     def iterate_container_objects(self, container, ex_prefix=None):
         """
@@ -820,15 +812,8 @@ class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
         return obj
 
     def _ex_connection_class_kwargs(self):
-        kwargs = {'ex_force_service_region': self.region}
-
-        if self.region == 'lon':
-            kwargs['auth_url'] = AUTH_URL_UK
-        else:
-            kwargs['auth_url'] = AUTH_URL_US
-
-        base_kwargs = self.openstack_connection_kwargs()
-        kwargs.update(base_kwargs)
+        kwargs = self.openstack_connection_kwargs()
+        kwargs['ex_force_service_region'] = self.region
         return kwargs
 
 
@@ -839,7 +824,10 @@ class CloudFilesUSStorageDriver(CloudFilesStorageDriver):
 
     type = Provider.CLOUDFILES_US
     name = 'CloudFiles (US)'
-    _region = 'ord'
+
+    def __init__(self, *args, **kwargs):
+        kwargs['region'] = 'ord'
+        super(CloudFilesUSStorageDriver, self).__init__(*args, **kwargs)
 
 
 class CloudFilesSwiftStorageDriver(CloudFilesStorageDriver):
@@ -868,7 +856,10 @@ class CloudFilesUKStorageDriver(CloudFilesStorageDriver):
 
     type = Provider.CLOUDFILES_UK
     name = 'CloudFiles (UK)'
-    _region = 'lon'
+
+    def __init__(self, *args, **kwargs):
+        kwargs['region'] = 'lon'
+        super(CloudFilesUKStorageDriver, self).__init__(*args, **kwargs)
 
 
 class FileChunkReader(object):

http://git-wip-us.apache.org/repos/asf/libcloud/blob/18baa686/libcloud/storage/types.py
----------------------------------------------------------------------
diff --git a/libcloud/storage/types.py b/libcloud/storage/types.py
index bc2d0bf..6a0c82f 100644
--- a/libcloud/storage/types.py
+++ b/libcloud/storage/types.py
@@ -31,8 +31,7 @@ class Provider(object):
     Defines for each of the supported providers
 
     :cvar DUMMY: Example provider
-    :cvar CLOUDFILES_US: CloudFiles US
-    :cvar CLOUDFILES_UK: CloudFiles UK
+    :cvar CLOUDFILES: CloudFiles
     :cvar S3: Amazon S3 US
     :cvar S3_US_WEST: Amazon S3 US West (Northern California)
     :cvar S3_EU_WEST: Amazon S3 EU West (Ireland)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/18baa686/libcloud/test/storage/test_cloudfiles.py
----------------------------------------------------------------------
diff --git a/libcloud/test/storage/test_cloudfiles.py b/libcloud/test/storage/test_cloudfiles.py
index f64f5a4..30efa12 100644
--- a/libcloud/test/storage/test_cloudfiles.py
+++ b/libcloud/test/storage/test_cloudfiles.py
@@ -130,7 +130,7 @@ class CloudFilesTests(unittest.TestCase):
             self.fail('Exception was not thrown')
 
     def test_service_catalog(self):
-        url = 'https://storage101.%s1.clouddrive.com/v1/MossoCloudFS' % \
+        url = 'https://storage4.%s1.clouddrive.com/v1/MossoCloudFS' % \
               (self.region)
         self.assertEqual(
              url,
@@ -138,7 +138,7 @@ class CloudFilesTests(unittest.TestCase):
 
         self.driver.connection.cdn_request = True
         self.assertEqual(
-             'https://cdn2.clouddrive.com/v1/MossoCloudFS',
+             'https://cdn.clouddrive.com/v1/MossoCloudFS',
              self.driver.connection.get_endpoint())
         self.driver.connection.cdn_request = False
 
@@ -729,7 +729,7 @@ class CloudFilesTests(unittest.TestCase):
                                     "/v1/MossoCloudFS/foo_bar_container/foo_bar_object")
         sig = hmac.new(b('foo'), b(hmac_body), sha1).hexdigest()
         ret = self.driver.ex_get_object_temp_url(obj, 'GET')
-        temp_url = 'https://storage101.%s1.clouddrive.com/v1/MossoCloudFS/foo_bar_container/foo_bar_object?temp_url_expires=60&temp_url_sig=%s' % (self.region, sig)
+        temp_url = 'https://storage4.%s1.clouddrive.com/v1/MossoCloudFS/foo_bar_container/foo_bar_object?temp_url_expires=60&temp_url_sig=%s' % (self.region, sig)
 
         self.assertEqual(''.join(sorted(ret)), ''.join(sorted(temp_url)))
 
@@ -767,24 +767,14 @@ class CloudFilesDeprecatedUKTests(CloudFilesTests):
 class CloudFilesMockHttp(StorageMockHttp, MockHttpTestCase):
 
     fixtures = StorageFileFixtures('cloudfiles')
-    auth_fixtures = OpenStackFixtures()
     base_headers = { 'content-type': 'application/json; charset=UTF-8'}
 
     # fake auth token response
-    def _v1_0(self, method, url, body, headers):
+    def _v2_0_tokens(self, method, url, body, headers):
         headers = copy.deepcopy(self.base_headers)
-        headers.update({ 'x-server-management-url':
-                             'https://servers.api.rackspacecloud.com/v1.0/slug',
-                         'x-auth-token': 'FE011C19',
-                         'x-cdn-management-url':
-                             'https://cdn.clouddrive.com/v1/MossoCloudFS',
-                         'x-storage-token': 'FE011C19',
-                         'x-storage-url':
-                            'https://storage4.clouddrive.com/v1/MossoCloudFS'})
-        return (httplib.NO_CONTENT,
-                "",
-                headers,
-                httplib.responses[httplib.NO_CONTENT])
+        body = self.fixtures.load('_v2_0__auth.json')
+        return (httplib.OK, body, headers,
+                httplib.responses[httplib.OK])
 
     def _v1_MossoCloudFS_MALFORMED_JSON(self, method, url, body, headers):
         # test_invalid_json_throws_exception
@@ -1026,10 +1016,6 @@ class CloudFilesMockHttp(StorageMockHttp, MockHttpTestCase):
 
         return (status_code, body, headers, httplib.responses[httplib.OK])
 
-    def _v1_1_auth(self, method, url, body, headers):
-        body = self.auth_fixtures.load('_v1_1__auth.json')
-        return (httplib.OK, body, {'content-type': 'application/json; charset=UTF-8'}, httplib.responses[httplib.OK])
-
 
 class CloudFilesMockRawResponse(MockRawResponse):