summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyota MIBU <r-mibu@cq.jp.nec.com>2015-08-31 22:14:33 +0900
committerRyota MIBU <r-mibu@cq.jp.nec.com>2015-09-07 17:46:53 +0900
commitb9f14c262092891e62d13a80b86708b28cd9db87 (patch)
treee6ee621167ed8d27ac34c71a968fc341f6efd89a
parent3469efac8e8100cbc59a35ff0f8aa280aae0149b (diff)
downloadpython-ceilometerclient-b9f14c262092891e62d13a80b86708b28cd9db87.tar.gz
Support alarm-event-{create,update}
Change-Id: Ic29d7d5fcf95ff29112bd42fed747c54181e3640
-rw-r--r--ceilometerclient/v2/shell.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py
index f5c6365..9879c12 100644
--- a/ceilometerclient/v2/shell.py
+++ b/ceilometerclient/v2/shell.py
@@ -580,6 +580,27 @@ def common_alarm_gnocchi_resources_arguments(create=False):
return _wrapper
+def common_alarm_event_arguments():
+ def _wrapper(func):
+ @utils.arg('--event-type', dest='event_rule/event_type',
+ metavar='<EVENT_TYPE>',
+ help='Event type for event alarm.')
+ @utils.arg('-q', '--query', dest='event_rule/query', metavar='<QUERY>',
+ help=('key[op]data_type::value; list for filtering events. '
+ 'data_type is optional, but if supplied must be '
+ 'string, integer, float or datetime.'))
+ @utils.arg('--repeat-actions', dest='repeat_actions',
+ metavar='{True|False}', type=strutils.bool_from_string,
+ default=False,
+ help=('True if actions should be repeatedly notified '
+ 'while alarm remains in target state.'))
+ @functools.wraps(func)
+ def _wrapped(*args, **kwargs):
+ return func(*args, **kwargs)
+ return _wrapped
+ return _wrapper
+
+
@common_alarm_arguments(create=True)
@utils.arg('--period', type=int, metavar='<PERIOD>',
help='Length of each period (seconds) to evaluate over.')
@@ -725,6 +746,23 @@ def do_alarm_combination_create(cc, args={}):
_display_alarm(alarm)
+@common_alarm_arguments(create=True)
+@common_alarm_event_arguments()
+@_restore_shadowed_arg('project_id', 'alarm_project_id')
+@_restore_shadowed_arg('user_id', 'alarm_user_id')
+def do_alarm_event_create(cc, args={}):
+ """Create a new alarm based on events."""
+ fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
+ fields = utils.key_with_slash_to_nested_dict(fields)
+ fields['type'] = 'event'
+ fields['event_rule'] = fields.get('event_rule', {})
+ if 'query' in fields['event_rule']:
+ fields['event_rule']['query'] = options.cli_to_array(
+ fields['event_rule']['query'])
+ alarm = cc.alarms.create(**fields)
+ _display_alarm(alarm)
+
+
@utils.arg('-a', '--alarm_id', metavar='<ALARM_ID>',
action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS,
dest='alarm_id_deprecated')
@@ -949,6 +987,31 @@ def do_alarm_combination_update(cc, args={}):
action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS,
dest='alarm_id_deprecated')
@utils.arg('alarm_id', metavar='<ALARM_ID>', nargs='?',
+ action=NotEmptyAction, help='ID of the alarm to update.')
+@common_alarm_arguments()
+@common_alarm_event_arguments()
+@_restore_shadowed_arg('project_id', 'alarm_project_id')
+@_restore_shadowed_arg('user_id', 'alarm_user_id')
+def do_alarm_event_update(cc, args={}):
+ """Update an existing alarm based on events."""
+ fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
+ fields = utils.key_with_slash_to_nested_dict(fields)
+ fields.pop('alarm_id')
+ fields['type'] = 'event'
+ if fields.get('event_rule') and 'query' in fields['event_rule']:
+ fields['event_rule']['query'] = options.cli_to_array(
+ fields['event_rule']['query'])
+ try:
+ alarm = cc.alarms.update(args.alarm_id, **fields)
+ except exc.HTTPNotFound:
+ raise exc.CommandError('Alarm not found: %s' % args.alarm_id)
+ _display_alarm(alarm)
+
+
+@utils.arg('-a', '--alarm_id', metavar='<ALARM_ID>',
+ action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS,
+ dest='alarm_id_deprecated')
+@utils.arg('alarm_id', metavar='<ALARM_ID>', nargs='?',
action=NotEmptyAction, help='ID of the alarm to delete.')
def do_alarm_delete(cc, args={}):
"""Delete an alarm."""