Fix for None base_url for Monasca client

Heat engine tries to create client object using token, but the token
in Monsca client will be reauthenticated. It can't be reauthenticated,
because it doesn't have base_url in kwargs (Monasca client), so it
raises an error "AttributeError: 'NoneType' object has no attribute
'find'".
Using session instead of token fixes the issue.

Change-Id: I154c0360946043f6dbb12ef756aa01d674f6de8f
Closes-Bug: #1713050
This commit is contained in:
Daniel Pawlik 2017-08-25 12:49:53 +00:00
parent 9e4cda46e6
commit 36e53d3c2b
2 changed files with 10 additions and 7 deletions

View File

@ -32,15 +32,10 @@ class MonascaClientPlugin(client_plugin.ClientPlugin):
interface = self._get_client_option(CLIENT_NAME, 'endpoint_type') interface = self._get_client_option(CLIENT_NAME, 'endpoint_type')
endpoint = self.url_for(service_type=self.MONITORING, endpoint = self.url_for(service_type=self.MONITORING,
endpoint_type=interface) endpoint_type=interface)
# Change this to use session once it's supported by monascaclient
return client.Client( return client.Client(
self.VERSION, self.VERSION,
token=self.context.keystone_session.get_token(), session=self.context.keystone_session,
endpoint=endpoint, endpoint=endpoint)
cacert=self._get_client_option(CLIENT_NAME, 'ca_file'),
cert_file=self._get_client_option(CLIENT_NAME, 'cert_file'),
key_file=self._get_client_option(CLIENT_NAME, 'key_file'),
insecure=self._get_client_option(CLIENT_NAME, 'insecure'))
def is_not_found(self, ex): def is_not_found(self, ex):
return isinstance(ex, monasca_exc.NotFound) return isinstance(ex, monasca_exc.NotFound)

View File

@ -14,6 +14,8 @@
import mock import mock
import six import six
import monascaclient
from heat.common import exception as heat_exception from heat.common import exception as heat_exception
from heat.engine.clients.os import monasca as client_plugin from heat.engine.clients.os import monasca as client_plugin
from heat.tests import common from heat.tests import common
@ -47,6 +49,12 @@ class MonascaClientPluginTest(common.HeatTestCase):
client = plugin.client() client = plugin.client()
self.assertIsNotNone(client.metrics) self.assertIsNotNone(client.metrics)
@mock.patch.object(monascaclient.client, '_session')
def test_client_uses_session(self, mock_session):
monasca_client = client_plugin.MonascaClientPlugin(
context=mock.MagicMock())
self.assertIsNotNone(monasca_client._create())
class MonascaClientPluginNotificationTest(common.HeatTestCase): class MonascaClientPluginNotificationTest(common.HeatTestCase):