From b9f14c262092891e62d13a80b86708b28cd9db87 Mon Sep 17 00:00:00 2001 From: Ryota MIBU Date: Mon, 31 Aug 2015 22:14:33 +0900 Subject: Support alarm-event-{create,update} Change-Id: Ic29d7d5fcf95ff29112bd42fed747c54181e3640 --- ceilometerclient/v2/shell.py | 63 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) 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='', + help='Event type for event alarm.') + @utils.arg('-q', '--query', dest='event_rule/query', metavar='', + 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='', 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='', action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS, dest='alarm_id_deprecated') @@ -945,6 +983,31 @@ def do_alarm_combination_update(cc, args={}): _display_alarm(alarm) +@utils.arg('-a', '--alarm_id', metavar='', + action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS, + dest='alarm_id_deprecated') +@utils.arg('alarm_id', metavar='', 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='', action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS, dest='alarm_id_deprecated') -- cgit v1.2.1