summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEoghan Glynn <eglynn@redhat.com>2013-05-15 16:10:32 +0000
committerEoghan Glynn <eglynn@redhat.com>2013-05-16 17:03:27 +0100
commit173cfa50fd0106cb0ff971bbb6022a52d8f3dfad (patch)
tree8624d62dd6de92b33c926b9d4a42ce054f89bfb0
parent382e62be8cc4cdf15f8fc71437a69e17c6833cf7 (diff)
downloadpython-ceilometerclient-173cfa50fd0106cb0ff971bbb6022a52d8f3dfad.tar.gz
Add support for getting individual alarms.
Include the *_actions attributes in the CLI output. Change-Id: I19e2e7b9c60b56c0c84687694365ef3614dd0e44
-rw-r--r--ceilometerclient/v2/alarms.py7
-rw-r--r--ceilometerclient/v2/shell.py19
-rw-r--r--tests/v2/test_alarms.py16
3 files changed, 42 insertions, 0 deletions
diff --git a/ceilometerclient/v2/alarms.py b/ceilometerclient/v2/alarms.py
index 2a1f8b7..d11c67a 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 946dabc..a775a89 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='<ALARM_ID>',
+ 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 <alarm id>)')
+ 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='<QUERY>',
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 25dae46..6a69c10 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')