Support alarm-event-{create,update}

Change-Id: Ic29d7d5fcf95ff29112bd42fed747c54181e3640
This commit is contained in:
Ryota MIBU
2015-08-31 22:14:33 +09:00
parent 3469efac8e
commit b9f14c2620

View File

@@ -580,6 +580,27 @@ def common_alarm_gnocchi_resources_arguments(create=False):
return _wrapper 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) @common_alarm_arguments(create=True)
@utils.arg('--period', type=int, metavar='<PERIOD>', @utils.arg('--period', type=int, metavar='<PERIOD>',
help='Length of each period (seconds) to evaluate over.') help='Length of each period (seconds) to evaluate over.')
@@ -725,6 +746,23 @@ def do_alarm_combination_create(cc, args={}):
_display_alarm(alarm) _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>', @utils.arg('-a', '--alarm_id', metavar='<ALARM_ID>',
action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS, action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS,
dest='alarm_id_deprecated') dest='alarm_id_deprecated')
@@ -945,6 +983,31 @@ def do_alarm_combination_update(cc, args={}):
_display_alarm(alarm) _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 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>', @utils.arg('-a', '--alarm_id', metavar='<ALARM_ID>',
action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS, action=obsoleted_by('alarm_id'), help=argparse.SUPPRESS,
dest='alarm_id_deprecated') dest='alarm_id_deprecated')