Exemplo n.º 1
0
def autoscale(group, config_data, args):
    """This function executes scale up or scale down policy

    :param group: group name
    :param config_data: json configuration data
    :param args: user provided arguments
    :returns: enums.ScaleEvent
    """
    try:
        group_config = config_data['autoscale_groups'][group]
    except KeyError:
        return common.exit_with_error('Unable to get scaling group config for group: %s', group)

    scaling_group = ScalingGroup(group_config, group)

    logger.info('Cluster Mode Enabled: %s', args.get('cluster', False))

    if args['cluster']:
        if scaling_group.is_master in [NodeStatus.Slave, NodeStatus.Unknown]:
            return ScaleEvent.NotMaster

    plugin_config = scaling_group.plugin_config
    mgr = NamedExtensionManager(
        namespace='raxas.ext',
        names=plugin_config.keys(),
        invoke_on_load=True,
        invoke_args=(scaling_group,)
        )
    logger.info('Loaded plugins: %s' % mgr.names())

    results = [result for result
               in mgr.map_method('make_decision')
               if result is not None]
    scaling_decision = sum(results)
    if scaling_decision <= -1:
        scaling_decision = -1
    elif scaling_decision >= 1:
        scaling_decision = 1

    scale = ScaleDirection(scaling_decision)
    if scale is ScaleDirection.Nothing:
        logger.info('Cluster within target parameters')
        return ScaleEvent.NoAction

    logger.info('Threshold reached - Scaling %s', scale.name)
    if not args['dry_run']:
        scaling_group.execute_webhook(scale, HookType.Pre)

        policy_result = scaling_group.execute_policy(scale)
        if policy_result == ScaleEvent.Success:
            scaling_group.execute_webhook(scale, HookType.Post)
            return ScaleEvent.Success
        elif policy_result == ScaleEvent.NoAction:
            return ScaleEvent.Success
        else:
            return ScaleEvent.Error
    else:
        logger.info('Scale %s prevented by --dry-run', scale.name)
        return ScaleEvent.Success
Exemplo n.º 2
0
def _load_kuryr_ctrlr_handlers():
    configured_handlers = CONF.kubernetes.enabled_handlers
    LOG.info('Configured handlers: %s', configured_handlers)
    handlers = NamedExtensionManager(
        'kuryr_kubernetes.controller.handlers',
        configured_handlers,
        invoke_on_load=True,
        on_missing_entrypoints_callback=_handler_not_found,
        on_load_failure_callback=_handler_not_loaded)
    LOG.info('Loaded handlers: %s', handlers.names())
    ctrlr_handlers = []
    for handler in handlers.extensions:
        ctrlr_handlers.append(handler.obj)
    return ctrlr_handlers