Example #1
0
def delete_for_instance(context, **kwargs):
    expect_keys = [
        'tenant_id', 'instance_uuid',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    instance_uuid = kwargs['instance_uuid']
    try:
        load_balancers = db.load_balancer_get_by_instance_uuid(context,
                                                               instance_uuid)
        for load_balancer_ref in load_balancers:
            try:
                if load_balancer_ref.free:
                    args = {
                        'tenant_id': context.tenant_id,
                        'uuid': load_balancer_ref.uuid,
                    }
                    delete_load_balancer(context, **args)
                elif load_balancer_ref.state != state.DELETING:
                    old_instance_uuids = map(lambda x: x['instance_uuid'],
                                             load_balancer_ref.instances)
                    new_instance_uuids = filter(lambda x: x != instance_uuid,
                                                old_instance_uuids)
                    args = {
                        'tenant_id': context.tenant_id,
                        'user_id': context.user_id,
                        'protocol': load_balancer_ref.protocol,
                        'uuid': load_balancer_ref.uuid,
                        'instance_uuids': new_instance_uuids,
                    }
                    update_load_balancer_instances(context, **args)
            except Exception, exp:
                LOG.info('delete_for_instance: failed for %s', str(exp))
    except Exception, exp:
        raise exception.DeleteForInstanceFailed(msg=str(exp))
Example #2
0
def update_load_balancer_config(context, **kwargs):
    expect_keys = [
        'user_id', 'tenant_id', 'protocol',
        'uuid', 'config',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    config = kwargs['config']
    expect_configs = [
        'balancing_method',
        'health_check_timeout_ms',
        'health_check_interval_ms',
        'health_check_target_path',
    ]
    config = kwargs['config']
    utils.check_input_parameters(expect_configs, **config)

    if config['balancing_method'] not in ['round_robin', 'source_binding']:
        raise exception.InvalidParameter(
            msg='invalid balancing method, round_robin or source_binding')
    if not 100 <= config['health_check_timeout_ms']:
        raise exception.InvalidParameter(
            msg='healthy check timeout out of range, 100ms~120s')
    if not 100 <= config['health_check_interval_ms']:
        raise exception.InvalidParameter(
            msg='Healthy check interval out of rage, 100ms~10m')
    if not config['health_check_target_path']:
        raise exception.InvalidParameter(
            msg='health check path could not be null')

    uuid = kwargs['uuid']
    try:
        load_balancer_ref = db.load_balancer_get_by_uuid(context, uuid)
    except Exception, exp:
        raise exception.UpdateLoadBalancerFailed(msg=str(exp))
Example #3
0
def update_load_balancer(context, **kwargs):
    expect_keys = [
        'tenant_id', 'uuid',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    uuid = kwargs['uuid']
    try:
        load_balancer_ref = db.load_balancer_get_by_uuid(context, uuid)
    except Exception, exp:
        raise exception.UpdateLoadBalancerFailed(msg=str(exp))
Example #4
0
def get_all_http_servers(context, **kwargs):
    expect_keys = [
        'user_id', 'tenant_id',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    result = None
    try:
        context = context.elevated(read_deleted='no')
        all_domains = db.load_balancer_domain_get_all(context)
        result = map(lambda x: x['name'], all_domains)
    except Exception, exp:
        raise exception.GetAllHttpServersFailed(msg=str(exp))
Example #5
0
def get_load_balancer_by_instance_uuid(context, **kwargs):
    expect_keys = [
        'tenant_id', 'instance_uuid',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)
    result = None
    uuid = kwargs['instance_uuid']
    try:
        load_balancer_ref = db.load_balancer_get_by_instance_uuid(context,
                                                                  uuid)
        result = format_msg_to_client(load_balancer_ref)
    except Exception, exp:
        raise exception.GetLoadBalancerFailed(msg=str(exp))
Example #6
0
def delete_load_balancer(context, **kwargs):
    expect_keys = [
        'tenant_id', 'uuid',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    uuid = kwargs['uuid']
    try:
        load_balancer_ref = db.load_balancer_get_by_uuid(context, uuid)
        db.load_balancer_update_state(context, uuid, state.DELETING)
        notify(context, load_balancer_ref, 'loadbalancer.delete.start')
    except Exception, exp:
        raise exception.DeleteLoadBalancerFailed(msg=str(exp))
Example #7
0
def update_load_balancer_instances(context, **kwargs):
    expect_keys = [
        'user_id', 'tenant_id', 'protocol',
        'uuid', 'instance_uuids',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    new_instance_uuids = kwargs['instance_uuids']
    if not new_instance_uuids:
        raise exception.InvalidParameter(
            msg='instance_uuids can not be null')

    uuid = kwargs['uuid']
    try:
        load_balancer_ref = db.load_balancer_get_by_uuid(context, uuid)
    except Exception, exp:
        raise exception.UpdateLoadBalancerFailed(msg=str(exp))
Example #8
0
def create_for_instance(context, **kwargs):
    expect_keys = [
        'user_id', 'tenant_id', 'instance_uuid', 'instance_port',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    instance_uuid = kwargs['instance_uuid']
    instance_port = kwargs['instance_port']
    try:
        load_balancers = db.load_balancer_get_by_instance_uuid(context,
                                                               instance_uuid)
        for load_balancer_ref in load_balancers:
            if load_balancer_ref.free:
                break
        result = format_msg_to_client(load_balancer_ref)
    except exception.LoadBalancerNotFoundByInstanceUUID, exp:
        pass
Example #9
0
def get_all_load_balancers(context, **kwargs):
    expect_keys = [
        'user_id', 'tenant_id', 'all_tenants',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    result = []
    try:
        all_tenants = int(kwargs['all_tenants'])
        if context.is_admin and all_tenants:
            filters = {}
        else:
            filters = {'project_id': kwargs['tenant_id']}
            context = context.elevated(read_deleted='no')
        all_load_balancers = db.load_balancer_get_all(context, filters=filters)
        for load_balancer_ref in all_load_balancers:
            result.append(format_msg_to_client(load_balancer_ref))
    except Exception, exp:
        raise exception.GetAllLoadBalancerFailed(msg=str(exp))
Example #10
0
def create_load_balancer(context, **kwargs):
    expect_keys = [
        'user_id', 'tenant_id', 'protocol', 'name',
        'instance_port', 'instance_uuids', 'config',
    ]
    utils.check_input_parameters(expect_keys, **kwargs)

    expect_configs = [
        'balancing_method',
        'health_check_timeout_ms',
        'health_check_interval_ms',
        'health_check_healthy_threshold',
        'health_check_unhealthy_threshold',
    ]
    config = kwargs['config']
    utils.check_input_parameters(expect_configs, **config)

    if not 1 <= kwargs['instance_port'] <= 65535:
        raise exception.InvalidParameter(
            msg='invalid instance port, should between 1~65535')
    if config['balancing_method'] not in ['round_robin', 'source_binding']:
        raise exception.InvalidParameter(
            msg='invalid balancing method, round_robin or source_binding')
    if not 100 <= config['health_check_timeout_ms']:
        raise exception.InvalidParameter(
            msg='healthy check timeout out of range, 100ms~120s')
    if not 100 <= config['health_check_interval_ms']:
        raise exception.InvalidParameter(
            msg='Healthy check interval out of rage, 100ms~10m')
    if not 1 <= config['health_check_healthy_threshold'] <= 10:
        raise exception.InvalidParameter(
            msg='Healthy check healthy threshold out of rage, 1~10')
    if not 1 <= config['health_check_unhealthy_threshold'] <= 10:
        raise exception.InvalidParameter(
            msg='Healthy check unhealthy threshold out of rage, 1~10')

    try:
        free = kwargs['free']
    except KeyError:
        kwargs['free'] = False
    except Exception, e:
        raise exception.CreateLoadBalancerFailed(msg='unknown error!')