diff options
author | Ryota MIBU <r-mibu@cq.jp.nec.com> | 2015-08-31 22:14:33 +0900 |
---|---|---|
committer | Ryota MIBU <r-mibu@cq.jp.nec.com> | 2015-09-07 17:46:53 +0900 |
commit | b9f14c262092891e62d13a80b86708b28cd9db87 (patch) | |
tree | e6ee621167ed8d27ac34c71a968fc341f6efd89a | |
parent | 3469efac8e8100cbc59a35ff0f8aa280aae0149b (diff) | |
download | python-ceilometerclient-b9f14c262092891e62d13a80b86708b28cd9db87.tar.gz |
Support alarm-event-{create,update}
Change-Id: Ic29d7d5fcf95ff29112bd42fed747c54181e3640
-rw-r--r-- | ceilometerclient/v2/shell.py | 63 |
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.""" |