diff --git a/ceilometerclient/v2/alarms.py b/ceilometerclient/v2/alarms.py index 2a1f8b7a..d11c67ab 100644 --- a/ceilometerclient/v2/alarms.py +++ b/ceilometerclient/v2/alarms.py @@ -31,3 +31,10 @@ class AlarmManager(base.Manager): def list(self, q=None): path = '/v2/alarms' return self._list(options.build_url(path, q)) + + def get(self, alarm_id): + path = '/v2/alarms/%s' % alarm_id + try: + return self._list(path, expect_single=True)[0] + except IndexError: + return None diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index 946dabc6..a775a893 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -98,6 +98,25 @@ def do_alarm_list(cc, args={}): sortby=0) +@utils.arg('-a', '--alarm_id', metavar='', + help='ID of the alarm to show.') +def do_alarm_show(cc, args={}): + '''Show an alarm''' + if args.alarm_id is None: + raise exc.CommandError('Alarm ID not provided (-a )') + try: + resource = cc.alarms.get(args.alarm_id) + except exc.HTTPNotFound: + raise exc.CommandError('Alarm not found: %s' % args.alarm_id) + else: + fields = ['name', 'description', 'counter_name', 'period', + 'evaluation_periods', 'threshold', 'comparison_operator', + 'state', 'enabled', 'alarm_id', 'user_id', 'project_id', + 'alarm_actions', 'ok_actions', 'insufficient_data_actions'] + data = dict([(f, getattr(resource, f, '')) for f in fields]) + utils.print_dict(data, wrap=72) + + @utils.arg('-q', '--query', metavar='', help='key[op]value; list.') def do_resource_list(cc, args={}): diff --git a/tests/v2/test_alarms.py b/tests/v2/test_alarms.py index 25dae466..6a69c109 100644 --- a/tests/v2/test_alarms.py +++ b/tests/v2/test_alarms.py @@ -50,6 +50,13 @@ fixtures = { [AN_ALARM], ), }, + '/v2/alarms/alarm-id': + { + 'GET': ( + {}, + AN_ALARM, + ), + }, '/v2/alarms?q.op=&q.op=&q.value=project-id&q.value=SwiftObjectAlarm' '&q.field=project_id&q.field=name': { @@ -92,3 +99,12 @@ class AlarmManagerTest(unittest.TestCase): self.assertEqual(self.api.calls, expect) self.assertEqual(len(alarms), 1) self.assertEqual(alarms[0].alarm_id, 'alarm-id') + + def test_get(self): + alarm = self.mgr.get(alarm_id='alarm-id') + expect = [ + ('GET', '/v2/alarms/alarm-id', {}, None), + ] + self.assertEqual(self.api.calls, expect) + self.assertTrue(alarm) + self.assertEqual(alarm.alarm_id, 'alarm-id')