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 2011/11/24 01:46:35 UTC

svn commit: r1205685 - in /libcloud/trunk: CHANGES libcloud/common/openstack.py test/compute/test_openstack.py

Author: tomaz
Date: Thu Nov 24 00:46:34 2011
New Revision: 1205685

URL: http://svn.apache.org/viewvc?rev=1205685&view=rev
Log:
If OpenStack Auth 2.0 API is used, also parse out tenant id and name and save it
on the connection class.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/common/openstack.py
    libcloud/trunk/test/compute/test_openstack.py

Modified: libcloud/trunk/CHANGES
URL: http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1205685&r1=1205684&r2=1205685&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Thu Nov 24 00:46:34 2011
@@ -3,6 +3,11 @@
 Changes with Apache Libcloud in development:
   *) Compute:
 
+     - If OpenStack Auth 2.0 API is used, also parse out tenant id and
+       name and save it on the connection class (conn.tenant['id'],
+       conn.tenant['name']).
+       [Tomaz Muraus]
+
      - Add new "Cluster Compute Eight Extra Large" size to the Amazon EC2
        driver.
        [Tomaz Muraus]

Modified: libcloud/trunk/libcloud/common/openstack.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/common/openstack.py?rev=1205685&r1=1205684&r2=1205685&view=diff
==============================================================================
--- libcloud/trunk/libcloud/common/openstack.py (original)
+++ libcloud/trunk/libcloud/common/openstack.py Thu Nov 24 00:46:34 2011
@@ -84,6 +84,7 @@ class OpenStackAuthConnection(Connection
         self.auth_version = auth_version
         self.auth_url = auth_url
         self.urls = {}
+        self.tenant = {}
         self.driver = self.parent_conn.driver
 
     def add_default_headers(self, headers):
@@ -183,9 +184,15 @@ class OpenStackAuthConnection(Connection
                 body = json.loads(resp.body)
             except Exception, e:
                 raise MalformedResponseError('Failed to parse JSON', e)
+
             try:
-                self.auth_token = body['access']['token']['id']
-                self.urls = body['access']['serviceCatalog']
+                access = body['access']
+                token = access['token']
+                self.auth_token = token['id']
+                self.urls = access['serviceCatalog']
+
+                self.tenant['id'] = token['tenant']['id']
+                self.tenant['name'] = token['tenant']['name']
             except KeyError, e:
                 raise MalformedResponseError('Auth JSON response is missing required elements', e)
 
@@ -280,6 +287,8 @@ class OpenStackBaseConnection(Connection
                 for service in osa.urls:
                     if service.get('type') == 'compute':
                         self.server_url = self._get_default_region(service.get('endpoints', []))
+
+                self.tenant = osa.tenant
             elif self._auth_version in ['1.1', '1.0']:
                 self.server_url = self._get_default_region(osa.urls.get('cloudServers', []))
                 self.cdn_management_url = self._get_default_region(osa.urls.get('cloudFilesCDN', []))

Modified: libcloud/trunk/test/compute/test_openstack.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_openstack.py?rev=1205685&r1=1205684&r2=1205685&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_openstack.py (original)
+++ libcloud/trunk/test/compute/test_openstack.py Thu Nov 24 00:46:34 2011
@@ -781,5 +781,14 @@ class OpenStack_1_1_Auth_2_0_Tests(OpenS
         clear_pricing_data()
         self.node = self.driver.list_nodes()[1]
 
+        server_url = 'http://my.fake.hostname:8774/v1.1/slug'
+        auth_token = 'aaaaaaaaaaaa-bbb-cccccccccccccc'
+        self.assertEqual(self.driver.connection.server_url, server_url)
+        self.assertEqual(self.driver.connection.auth_token, auth_token)
+        self.assertEqual(self.driver.connection.tenant, {'id': '45', 'name':
+                                                         'testproj-project'})
+
+
+
 if __name__ == '__main__':
     sys.exit(unittest.main())