diff --git a/ceilometerclient/v2/alarms.py b/ceilometerclient/v2/alarms.py index d11c67a..d0c4442 100644 --- a/ceilometerclient/v2/alarms.py +++ b/ceilometerclient/v2/alarms.py @@ -28,13 +28,18 @@ class Alarm(base.Resource): class AlarmManager(base.Manager): resource_class = Alarm + @staticmethod + def _path(id=None): + return '/v2/alarms/%s' % id if id else '/v2/alarms' + def list(self, q=None): - path = '/v2/alarms' - return self._list(options.build_url(path, q)) + return self._list(options.build_url(self._path(), q)) def get(self, alarm_id): - path = '/v2/alarms/%s' % alarm_id try: - return self._list(path, expect_single=True)[0] + return self._list(self._path(alarm_id), expect_single=True)[0] except IndexError: return None + + def delete(self, alarm_id): + return self._delete(self._path(alarm_id)) diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index a775a89..2bc32c6 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -117,6 +117,18 @@ def do_alarm_show(cc, args={}): utils.print_dict(data, wrap=72) +@utils.arg('-a', '--alarm_id', metavar='', + help='ID of the alarm to show.') +def do_alarm_delete(cc, args={}): + '''Delete an alarm''' + if args.alarm_id is None: + raise exc.CommandError('Alarm ID not provided (-a )') + try: + resource = cc.alarms.delete(args.alarm_id) + except exc.HTTPNotFound: + raise exc.CommandError('Alarm not found: %s' % args.alarm_id) + + @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 6a69c10..8d68b22 100644 --- a/tests/v2/test_alarms.py +++ b/tests/v2/test_alarms.py @@ -64,7 +64,14 @@ fixtures = { {}, [AN_ALARM], ), - } + }, + '/v2/alarms/victim-id': + { + 'DELETE': ( + {}, + None, + ), + }, } @@ -108,3 +115,11 @@ class AlarmManagerTest(unittest.TestCase): self.assertEqual(self.api.calls, expect) self.assertTrue(alarm) self.assertEqual(alarm.alarm_id, 'alarm-id') + + def test_delete(self): + deleted = self.mgr.delete(alarm_id='victim-id') + expect = [ + ('DELETE', '/v2/alarms/victim-id', {}, None), + ] + self.assertEqual(self.api.calls, expect) + self.assertTrue(deleted is None)