panko redirect

same as aodh but with panko_endpoint

Change-Id: Iae7d60e1cf139b79e74caf81ed7bdbd0bf2bc473
This commit is contained in:
gord chung 2017-01-11 22:52:26 +00:00
parent 45f4f9584b
commit 72ea5ef824
5 changed files with 45 additions and 28 deletions

View File

@ -403,8 +403,9 @@ def _construct_http_client(**kwargs):
# Drop legacy options
for opt in LEGACY_OPTS:
kwargs.pop(opt, None)
# Drop aodh_endpoint from kwargs
# Drop redirect endpoints from kwargs
kwargs.pop('aodh_endpoint', None)
kwargs.pop('panko_endpoint', None)
return SessionClient(
session=kwargs.pop('session'),

View File

@ -43,8 +43,9 @@ class ClientTest(utils.BaseTestCase):
def create_client(env, api_version=2, endpoint=None, exclude=[]):
env = dict((k, v) for k, v in env.items()
if k not in exclude)
with mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
return_value=None):
with mock.patch(
'ceilometerclient.v2.client.Client._get_redirect_client',
return_value=None):
return client.get_client(api_version, **env)
def test_client_v2_with_session(self):
@ -184,8 +185,9 @@ class ClientTest2(ClientTest):
def create_client(env, api_version=2, endpoint=None, exclude=[]):
env = dict((k, v) for k, v in env.items()
if k not in exclude)
with mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
return_value=None):
with mock.patch(
'ceilometerclient.v2.client.Client._get_redirect_client',
return_value=None):
return client.Client(api_version, endpoint, **env)

View File

@ -112,7 +112,7 @@ class ShellBashCompletionTest(ShellTestBase):
class ShellKeystoneV2Test(ShellTestBase):
@mock.patch.object(ks_session, 'Session')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_debug_switch_raises_error(self, mock_ksclient):
mock_ksclient.side_effect = exc.HTTPUnauthorized
@ -121,7 +121,7 @@ class ShellKeystoneV2Test(ShellTestBase):
self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
@mock.patch.object(ks_session, 'Session')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_dash_d_switch_raises_error(self, mock_ksclient):
mock_ksclient.side_effect = exc.CommandError("FAIL")
@ -141,7 +141,7 @@ class ShellKeystoneV2Test(ShellTestBase):
class ShellKeystoneV3Test(ShellTestBase):
@mock.patch.object(ks_session, 'Session')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_debug_switch_raises_error(self, mock_ksclient):
mock_ksclient.side_effect = exc.HTTPUnauthorized
@ -194,7 +194,7 @@ class ShellTimeoutTest(ShellTestBase):
self._test_timeout('0', expected_msg)
@mock.patch.object(ks_session, 'Session')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_timeout_keystone_session(self, mocked_session):
mocked_session.side_effect = exc.HTTPUnauthorized("FAIL")
@ -208,7 +208,7 @@ class ShellTimeoutTest(ShellTestBase):
class ShellInsecureTest(ShellTestBase):
@mock.patch.object(api_client, 'HTTPClient')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_insecure_true_ceilometer(self, mocked_client):
self.make_env(FAKE_V2_ENV)
@ -218,7 +218,7 @@ class ShellInsecureTest(ShellTestBase):
self.assertFalse(kwargs.get('verify'))
@mock.patch.object(ks_session, 'Session')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_insecure_true_keystone(self, mocked_session):
mocked_session.side_effect = exc.HTTPUnauthorized("FAIL")
@ -229,7 +229,7 @@ class ShellInsecureTest(ShellTestBase):
self.assertFalse(kwargs.get('verify'))
@mock.patch.object(api_client, 'HTTPClient')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_insecure_false_ceilometer(self, mocked_client):
self.make_env(FAKE_V2_ENV)
@ -239,7 +239,7 @@ class ShellInsecureTest(ShellTestBase):
self.assertTrue(kwargs.get('verify'))
@mock.patch.object(ks_session, 'Session')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock(return_value=None))
def test_insecure_false_keystone(self, mocked_session):
mocked_session.side_effect = exc.HTTPUnauthorized("FAIL")
@ -270,7 +270,7 @@ class ShellEndpointTest(ShellTestBase):
class ShellAlarmUpdateRepeatAction(ShellTestBase):
@mock.patch('ceilometerclient.v2.alarms.AlarmManager.update')
@mock.patch('ceilometerclient.v2.client.Client._get_alarm_client',
@mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
mock.Mock())
def test_repeat_action_not_specified(self, mocked):
self.make_env(FAKE_V2_ENV)

View File

@ -62,21 +62,28 @@ class Client(object):
self.auth_plugin = kwargs.get('auth_plugin')
self.http_client = ceiloclient._construct_http_client(**kwargs)
self.alarm_client = self._get_alarm_client(**kwargs)
self.alarm_client = self._get_redirect_client(
'alarming', 'aodh', **kwargs)
aodh_enabled = self.alarm_client is not None
if not aodh_enabled:
self.alarm_client = self.http_client
self.event_client = self._get_redirect_client(
'event', 'panko', **kwargs)
panko_enabled = self.event_client is not None
if not panko_enabled:
self.event_client = self.http_client
self.meters = meters.MeterManager(self.http_client)
self.samples = samples.OldSampleManager(self.http_client)
self.new_samples = samples.SampleManager(self.http_client)
self.statistics = statistics.StatisticsManager(self.http_client)
self.resources = resources.ResourceManager(self.http_client)
self.alarms = alarms.AlarmManager(self.alarm_client, aodh_enabled)
self.events = events.EventManager(self.http_client)
self.event_types = event_types.EventTypeManager(self.http_client)
self.traits = traits.TraitManager(self.http_client)
self.events = events.EventManager(self.event_client)
self.event_types = event_types.EventTypeManager(self.event_client)
self.traits = traits.TraitManager(self.event_client)
self.trait_descriptions = trait_descriptions.\
TraitDescriptionManager(self.http_client)
TraitDescriptionManager(self.event_client)
self.query_samples = query.QuerySamplesManager(
self.http_client)
@ -86,36 +93,36 @@ class Client(object):
self.capabilities = capabilities.CapabilitiesManager(self.http_client)
@staticmethod
def _get_alarm_client(**ceilo_kwargs):
"""Get client for alarm manager that redirect to aodh."""
def _get_redirect_client(new_service_type, new_service, **ceilo_kwargs):
"""Get client for new service manager to redirect to."""
# NOTE(sileht): the auth_plugin/keystone session cannot be copied
# because they rely on threading module.
auth_plugin = ceilo_kwargs.pop('auth_plugin', None)
session = ceilo_kwargs.pop('session', None)
kwargs = copy.deepcopy(ceilo_kwargs)
kwargs["service_type"] = "alarming"
aodh_endpoint = ceilo_kwargs.get('aodh_endpoint')
kwargs["service_type"] = new_service_type
endpoint = ceilo_kwargs.get('%s_endpoint' % new_service)
if session:
# keystone session can be shared between client
ceilo_kwargs['session'] = kwargs['session'] = session
if aodh_endpoint:
kwargs['endpoint_override'] = aodh_endpoint
if endpoint:
kwargs['endpoint_override'] = endpoint
elif auth_plugin and kwargs.get('auth_url'):
ceilo_kwargs['auth_plugin'] = auth_plugin
kwargs.pop('endpoint', None)
kwargs['auth_plugin'] = ceiloclient.get_auth_plugin(
aodh_endpoint, **kwargs)
endpoint, **kwargs)
else:
# Users may just provide ceilometer endpoint and token, and no
# auth_url, in this case, we need 'aodh_endpoint' also to be
# provided, otherwise we cannot get aodh endpoint from
# keystone, and assume aodh is unavailable.
# keystone, and assume aodh is unavailable. Same applies to panko.
return None
try:
# NOTE(sileht): try to use aodh
# NOTE(sileht): try to use redirect
c = ceiloclient._construct_http_client(**kwargs)
c.get("/")
return c

View File

@ -0,0 +1,7 @@
---
prelude: >
Panko replaces the API and storage of events previously in Ceilometer
features:
- |
Similar to aodh redirect support, specify `panko_endpoint` as a redirect
to Panko API.