def create_pool(pool, user): """Creates pool""" sp = ServerPool() sp.identifier = pool.get('identifier') sp.default_port = pool.get('default_port') sp.environment_id = pool.get('environment') sp.servicedownaction_id = _get_option_pool( pool.get('servicedownaction').get('name'), 'ServiceDownAction') sp.lb_method = pool.get('lb_method') sp.default_limit = pool.get('default_limit') healthcheck = _get_healthcheck(pool.get('healthcheck')) sp.healthcheck = healthcheck sp.pool_created = False sp.save() _create_pool_member(pool['server_pool_members'], sp) # perms groups_perm = pool.get('groups_permissions', []) groups_perm += facade_usr.get_groups(pool.get('users_permissions', [])) groups = facade_usr.reduce_groups(groups_perm) create_groups_permissions(groups, sp.id, user) return sp
def save_server_pool(user, id, identifier, default_port, hc, env, balancing, maxconn, id_pool_member, servicedownaction): # Save Server pool old_healthcheck = None if id: sp = ServerPool.objects.get(id=id) # store old healthcheck,lb method and service-down-action old_servicedownaction = sp.servicedownaction old_identifier = sp.identifier old_healthcheck = Healthcheck.objects.get(id=sp.healthcheck.id) old_lb_method = sp.lb_method old_maxconn = sp.default_limit # validate change of environment if sp.environment and sp.environment.id != env.id: validate_change_of_environment(id_pool_member, sp) # Pool already created, it is not possible to change Pool Identifier if (old_identifier != identifier and sp.pool_created): raise exceptions.CreatedPoolIdentifierException() update_pool_fields(default_port, env, identifier, old_healthcheck, old_lb_method, old_maxconn, sp, user) update_pool_maxconn(maxconn, old_maxconn, sp, user) apply_health_check(hc, old_healthcheck, sp, user) update_load_balancing_method(balancing, old_lb_method, sp, user) apply_service_down_action(old_servicedownaction, servicedownaction, sp, user) else: sp = ServerPool(identifier=identifier, default_port=default_port, healthcheck=hc, environment=env, pool_created=False, lb_method=balancing, default_limit=maxconn, servicedownaction=servicedownaction) sp.save() return sp, (old_healthcheck.id if old_healthcheck else None)
def save_server_pool(user, id, identifier, default_port, hc, env, balancing, maxconn, id_pool_member, servicedownaction): # Save Server pool old_healthcheck = None if id: sp = ServerPool.objects.get(id=id) # store old healthcheck,lb method and service-down-action old_servicedownaction = sp.servicedownaction old_identifier = sp.identifier old_healthcheck = Healthcheck.objects.get(id=sp.healthcheck.id) old_lb_method = sp.lb_method old_maxconn = sp.default_limit # validate change of environment if sp.environment and sp.environment.id != env.id: validate_change_of_environment(id_pool_member, sp) # Pool already created, it is not possible to change Pool Identifier if(old_identifier != identifier and sp.pool_created): raise exceptions.CreatedPoolIdentifierException() update_pool_fields(default_port, env, identifier, old_healthcheck, old_lb_method, old_maxconn, sp, user) update_pool_maxconn(maxconn, old_maxconn, sp, user) apply_health_check(hc, old_healthcheck, sp, user) update_load_balancing_method(balancing, old_lb_method, sp, user) apply_service_down_action( old_servicedownaction, servicedownaction, sp, user) else: sp = ServerPool(identifier=identifier, default_port=default_port, healthcheck=hc, environment=env, pool_created=False, lb_method=balancing, default_limit=maxconn, servicedownaction=servicedownaction) sp.save() return sp, (old_healthcheck.id if old_healthcheck else None)
def save_server_pool(user, id, identifier, default_port, hc, env, balancing, maxconn, id_pool_member, servicedownaction): # Save Server pool old_healthcheck = None if id: sp = ServerPool.objects.get(id=id) # storage old healthcheck , lb method and service-down-action old_servicedownaction = sp.servicedownaction old_identifier = sp.identifier old_healthcheck = Healthcheck.objects.get(id=sp.healthcheck.id) old_lb_method = sp.lb_method old_maxconn = sp.default_limit #valid change environment if sp.environment and sp.environment.id != env.id: if sp.pool_created: raise exceptions.UpdateEnvironmentPoolCreatedException() del_smp = sp.serverpoolmember_set.exclude(id__in=id_pool_member) vip = sp.vipporttopool_set.count() if vip > 0: raise exceptions.UpdateEnvironmentVIPException() if len(del_smp) > 0: raise exceptions.UpdateEnvironmentServerPoolMemberException() #Pool already created, it is not possible to change Pool Identifier if(old_identifier != identifier and sp.pool_created): raise exceptions.CreatedPoolIdentifierException() sp.default_port = default_port sp.environment = env sp.default_limit = old_maxconn sp.healthcheck = old_healthcheck sp.lb_method = old_lb_method sp.identifier = identifier sp.save(user) sp.default_limit = maxconn sp.save(user) #If exists pool member, checks if all them have the same maxconn #before changing default maxconn of pool if(len(sp.serverpoolmember_set.all()) > 0): if(old_maxconn != sp.default_limit and sp.pool_created): for serverpoolmember in sp.serverpoolmember_set.all(): if serverpoolmember.limit != old_maxconn: raise exceptions.ScriptAlterLimitPoolDiffMembersException() else: serverpoolmember.limit = maxconn serverpoolmember.save(user) transaction.commit() command = settings.POOL_MANAGEMENT_LIMITS % (sp.id) code, _, _ = exec_script(command) if code != 0: sp.default_limit = old_maxconn for serverpoolmember in sp.serverpoolmember_set.all(): serverpoolmember.limit = old_maxconn serverpoolmember.save(user) sp.save(user) transaction.commit() raise exceptions.ScriptAlterLimitPoolException() #Applies new healthcheck in pool #Todo - new method sp.healthcheck = hc sp.save(user) if(old_healthcheck.id != hc.id and sp.pool_created): transaction.commit() command = settings.POOL_HEALTHCHECK % (sp.id) code, _, _ = exec_script(command) if code != 0: sp.healthcheck = old_healthcheck sp.save(user) transaction.commit() raise exceptions.ScriptCreatePoolException() #Applies new lb method in pool #Todo - new method sp.lb_method = balancing sp.save(user) if(old_lb_method != sp.lb_method and sp.pool_created): transaction.commit() command = settings.POOL_MANAGEMENT_LB_METHOD % (sp.id) code, _, _ = exec_script(command) if code != 0: sp.lb_method = old_lb_method sp.save(user) transaction.commit() raise exceptions.ScriptCreatePoolException() #Applies new service-down-action in pool #Todo - new method sp.servicedownaction = servicedownaction sp.save(user) if(old_servicedownaction != sp.servicedownaction and sp.pool_created): transaction.commit() command = settings.POOL_SERVICEDOWNACTION % (sp.id) code, _, _ = exec_script(command) if code != 0: sp.servicedownaction = old_servicedownaction sp.save(user) transaction.commit() raise exceptions.ScriptAlterServiceDownActionException() else: sp = ServerPool(identifier=identifier, default_port=default_port, healthcheck=hc, environment=env, pool_created=False, lb_method=balancing, default_limit=maxconn, servicedownaction=servicedownaction) sp.save(user) return sp, (old_healthcheck.id if old_healthcheck else None)