From 36e53d3c2b973c45a4dc7af7af39b0110437de48 Mon Sep 17 00:00:00 2001 From: Daniel Pawlik Date: Fri, 25 Aug 2017 12:49:53 +0000 Subject: [PATCH] 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 --- heat/engine/clients/os/monasca.py | 9 ++------- heat/tests/clients/test_monasca_client.py | 8 ++++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/heat/engine/clients/os/monasca.py b/heat/engine/clients/os/monasca.py index d8b5dd6aac..3fb656d327 100644 --- a/heat/engine/clients/os/monasca.py +++ b/heat/engine/clients/os/monasca.py @@ -32,15 +32,10 @@ class MonascaClientPlugin(client_plugin.ClientPlugin): interface = self._get_client_option(CLIENT_NAME, 'endpoint_type') endpoint = self.url_for(service_type=self.MONITORING, endpoint_type=interface) - # Change this to use session once it's supported by monascaclient return client.Client( self.VERSION, - token=self.context.keystone_session.get_token(), - 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')) + session=self.context.keystone_session, + endpoint=endpoint) def is_not_found(self, ex): return isinstance(ex, monasca_exc.NotFound) diff --git a/heat/tests/clients/test_monasca_client.py b/heat/tests/clients/test_monasca_client.py index 416e8e18d0..e9ddb26eb9 100644 --- a/heat/tests/clients/test_monasca_client.py +++ b/heat/tests/clients/test_monasca_client.py @@ -14,6 +14,8 @@ import mock import six +import monascaclient + from heat.common import exception as heat_exception from heat.engine.clients.os import monasca as client_plugin from heat.tests import common @@ -47,6 +49,12 @@ class MonascaClientPluginTest(common.HeatTestCase): client = plugin.client() 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):