Don't try to get aodh endpoint if auth_url didn't provided

This change includes:

* Allow users of ceilometerclient specifying aodh_endpoint explicitly
* If aodh_endpoint didn't provided and users just provide ceilometer
  endpoint and token, no auth_url, we assume aodh is unavailable and
  avoid trying to get aodh endpoint.

Change-Id: Idd0ce60058d23507a99b89926e461d19db267ca2
Closes-Bug: #1488290
This commit is contained in:
liu-sheng
2015-08-24 19:14:51 +08:00
committed by liusheng
parent 1fc68877ff
commit 2429daec98
2 changed files with 26 additions and 6 deletions

View File

@@ -371,6 +371,15 @@ class ClientAuthTest(utils.BaseTestCase):
session_instance_mock.get_endpoint.assert_called_with(
region_name=None, interface='publicURL', service_type='alarming')
def test_get_aodh_endpoint_without_auth_url(self):
env = FAKE_ENV.copy()
env.pop('auth_plugin', None)
env.pop('endpoint', None)
env.pop('auth_url', None)
client = self.create_client(env, endpoint='fake_endpoint')
self.assertEqual(client.alarm_auth_plugin.opts,
client.auth_plugin.opts)
@mock.patch('ceilometerclient.client._get_keystone_session')
@mock.patch('ceilometerclient.client._get_token_auth_ks_session')
def test_get_different_endpoint_type(self, token_session, session):

View File

@@ -87,14 +87,25 @@ class Client(object):
def _get_alarm_client(self, **kwargs):
"""Get client for alarm manager that redirect to aodh."""
self.alarm_auth_plugin = copy.deepcopy(self.auth_plugin)
try:
# NOTE(liusheng): Getting the aodh's endpoint to rewrite
# the endpoint of alarm auth_plugin.
self.alarm_auth_plugin.redirect_to_aodh_endpoint(
kwargs.get('timeout'))
except exceptions.EndpointNotFound:
aodh_endpoint = kwargs.get('aodh_endpoint')
if aodh_endpoint:
self.alarm_auth_plugin.opts['endpoint'] = aodh_endpoint
elif not kwargs.get('auth_url'):
# Users may just provided ceilometer endpoint and token, and no
# auth_url, in this case, we need 'aodh_endpoint' also provided,
# otherwise we cannot get aodh endpoint from keystone, and assume
# aodh is unavailable.
return self.http_client, False
else:
try:
# NOTE(liusheng): Getting the aodh's endpoint to rewrite
# the endpoint of alarm auth_plugin.
self.alarm_auth_plugin.redirect_to_aodh_endpoint(
kwargs.get('timeout'))
except exceptions.EndpointNotFound:
return self.http_client, False
alarm_client = client.HTTPClient(
auth_plugin=self.alarm_auth_plugin,
region_name=kwargs.get('region_name'),