From 106e5561c9200a45d54740137d692cd8f026f986 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Tue, 27 Jan 2015 14:22:49 -0500 Subject: [PATCH] Pass service_name to nova_client constructor Rackspace breaks without a service name passed to it, because they put two compute services in their service catalog. If we pass a service name, then keystone session can match the right thing. Change-Id: I300017c664559fbeabde54160e6d4867abc4ce4b --- shade/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/shade/__init__.py b/shade/__init__.py index d08b77523..c06255793 100644 --- a/shade/__init__.py +++ b/shade/__init__.py @@ -112,6 +112,7 @@ class OpenStackCloud(object): self._auth_token = kwargs.get('auth_token', None) self.service_types = _get_service_values(kwargs, 'service_type') + self.service_names = _get_service_values(kwargs, 'service_name') self.endpoints = _get_service_values(kwargs, 'endpoint') self.api_versions = _get_service_values(kwargs, 'api_version') @@ -158,6 +159,9 @@ class OpenStackCloud(object): def get_service_type(self, service): return self.service_types.get(service, service) + def get_service_name(self, service): + return self.service_names.get(service, None) + def _get_nova_api_version(self): return self.api_versions['compute'] @@ -170,6 +174,7 @@ class OpenStackCloud(object): self._nova_client = nova_client.Client( self._get_nova_api_version(), session=self.keystone_session, + service_name=self.get_service_name('compute'), region_name=self.region_name) except Exception: self.log.debug("Couldn't construct nova object", exc_info=True)