summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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."""