]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat engine : Make Resource::swift handle auth_token
authorSteven Hardy <shardy@redhat.com>
Mon, 22 Oct 2012 17:38:06 +0000 (18:38 +0100)
committerSteven Hardy <shardy@redhat.com>
Mon, 22 Oct 2012 18:18:08 +0000 (19:18 +0100)
Make Resource::swift() handle auth_token so the S3
resource will work with AWS auth

Fixes #271

Change-Id: Ie5aca026dea25045e42aab677a2c793c79de1658
Signed-off-by: Steven Hardy <shardy@redhat.com>
heat/engine/resources.py

index b4a61b029e6edc4290e4696891b92f0d02628174..a2e5f99cd201ec2dbd04939bb0cb7cd19a2ea98d 100644 (file)
@@ -293,10 +293,36 @@ class Resource(object):
             return self._swift
 
         con = self.context
-        self._swift = swiftclient.Connection(
-            con.auth_url, con.username, con.password,
-            tenant_name=con.tenant, auth_version='2')
+        args = {
+            'auth_version': '2'
+        }
+
+        if con.password is not None:
+            args['user'] = con.username
+            args['key'] = con.password
+            args['authurl'] = con.auth_url
+            args['tenant_name'] = con.tenant
+        elif con.auth_token is not None:
+            args['user'] = None
+            args['key'] = None
+            args['authurl'] = None
+            args['preauthtoken'] = con.auth_token
+            # Lookup endpoint for object-store service type
+            service_type = 'object-store'
+            endpoints = self.keystone().service_catalog.get_endpoints(
+                        service_type=service_type)
+            if len(endpoints[service_type]) == 1:
+                args['preauthurl'] = endpoints[service_type][0]['publicURL']
+            else:
+                logger.error("No endpoint found for %s service type" %
+                             service_type)
+                return None
+        else:
+            logger.error("Swift connection failed, no password or " +
+                         "auth_token!")
+            return None
 
+        self._swift = swiftclient.Connection(**args)
         return self._swift
 
     def calculate_properties(self):