From d65ae5b3133c72bd6bde013ace36bcfbbc1e51a9 Mon Sep 17 00:00:00 2001 From: Steven Hardy Date: Mon, 22 Oct 2012 18:38:06 +0100 Subject: [PATCH] heat engine : Make Resource::swift handle auth_token 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 --- heat/engine/resources.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/heat/engine/resources.py b/heat/engine/resources.py index b4a61b02..a2e5f99c 100644 --- a/heat/engine/resources.py +++ b/heat/engine/resources.py @@ -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): -- 2.45.2