def add_pools(request): """ Add Pools For Vip Request. """ try: pool_ids = request.DATA.get('pool_ids') vip_request_id = request.DATA.get('vip_request_id') vip_request_obj = RequisicaoVips.objects.get(id=vip_request_id) for pool_id in pool_ids: pool_obj = ServerPool.objects.get(id=pool_id) vip_port_pool_obj = VipPortToPool(requisicao_vip=vip_request_obj, server_pool=pool_obj, port_vip=pool_obj.default_port) vip_port_pool_obj.save(request.user) syncs.old_to_new(vip_request_obj) return Response(status=status.HTTP_201_CREATED) except RequisicaoVips.DoesNotExist, exception: log.error(exception) raise exceptions.VipRequestDoesNotExistException()
def add_pools(request): """ Add Pools For Vip Request. """ try: pool_ids = request.DATA.get('pool_ids') vip_request_id = request.DATA.get('vip_request_id') vip_request_obj = RequisicaoVips.objects.get(id=vip_request_id) for pool_id in pool_ids: pool_obj = ServerPool.objects.get(id=pool_id) vip_port_pool_obj = VipPortToPool( requisicao_vip=vip_request_obj, server_pool=pool_obj, port_vip=pool_obj.default_port ) vip_port_pool_obj.save(request.user) return Response(status=status.HTTP_201_CREATED) except RequisicaoVips.DoesNotExist, exception: log.error(exception) raise exceptions.VipRequestDoesNotExistException()
def update(request, pk): """ Update Vip Request :param request: :param pk: Identifier Vip Request :return: Data Serialized Post Update """ data = request.DATA user = request.user if not is_valid_int_greater_zero_param(pk): raise exceptions.InvalidIdVipRequestException() vip_ports = data.get("vip_ports_to_pools") req_vip_serializer = RequestVipSerializer( data=data ) if not req_vip_serializer.is_valid(): log.error(req_vip_serializer.errors) raise api_exceptions.ValidationException() RequisicaoVips.objects.get(pk=pk) with distributedlock(LOCK_VIP % pk): obj_req_vip = req_vip_serializer.object obj_req_vip.id = int(pk) obj_req_vip.filter_valid = True obj_req_vip.validado = False set_l7_filter_for_vip(obj_req_vip) obj_req_vip.set_new_variables(data) obj_req_vip.save(user) vip_port_serializer = VipPortToPoolSerializer(data=vip_ports, many=True) if not vip_port_serializer.is_valid(): raise api_exceptions.ValidationException("Invalid Port Vip To Pool") vip_port_to_pool_pks = [port['id'] for port in vip_ports if port.get('id')] vip_port_to_pool_to_remove = VipPortToPool.objects.filter( requisicao_vip=obj_req_vip ).exclude( id__in=vip_port_to_pool_pks ) # valid if pools member can linked by environment/environment vip relationship rule server_pool_ips_can_associate_with_vip_request(obj_req_vip, vip_port_to_pool_to_remove) for v_port_to_del in vip_port_to_pool_to_remove: v_port_to_del.delete(user) for vip_port in vip_ports: vip_port_obj = VipPortToPool() vip_port_obj.id = vip_port.get('id') vip_port_obj.server_pool = ServerPool(id=vip_port.get('server_pool')) vip_port_obj.port_vip = vip_port.get('port_vip') vip_port_obj.requisicao_vip = obj_req_vip vip_port_obj.save(user) return req_vip_serializer.data
def new_to_old(vp): from networkapi.api_vip_request.models import VipRequestDSCP from networkapi.requisicaovips.models import DsrL3_to_Vip, \ RequisicaoVips, VipPortToPool try: vip_map = dict() vip = RequisicaoVips() vip.id = vp.id vip.ip = vp.ipv4 if vp.ipv4 else None vip.ipv6 = vp.ipv6 if vp.ipv6 else None vip_map['ip'] = vp.ipv4 if vp.ipv4 else None vip_map['ipv6'] = vp.ipv6 if vp.ipv6 else None vip_map['finalidade'] = vp.environmentvip.finalidade_txt vip_map['cliente'] = vp.environmentvip.cliente_txt vip_map['ambiente'] = vp.environmentvip.ambiente_p44_txt for vp_optionvip in vp.viprequestoptionvip_set.all(): if vp_optionvip.optionvip.tipo_opcao == u'Persistencia': vip_map['persistencia'] = vp_optionvip.optionvip.nome_opcao_txt if vp_optionvip.optionvip.tipo_opcao == u'timeout': vip_map['timeout'] = vp_optionvip.optionvip.nome_opcao_txt if vp_optionvip.optionvip.tipo_opcao == u'cache': vip_map['cache'] = vp_optionvip.optionvip.nome_opcao_txt if vp_optionvip.optionvip.tipo_opcao == u'Retorno de trafego': vip_map['trafficreturn'] = vp_optionvip.optionvip.id vip.trafficreturn = vp_optionvip.optionvip vip_map['host'] = vp.name vip_map['areanegocio'] = vp.business vip_map['nome_servico'] = vp.service vip_map['vip_ports_to_pools'] = list() ports = vp.viprequestport_set.all() # delete old ports pools_current = VipPortToPool.get_by_vip_id(vip.id) pools_ids = [pool.id for pool in pools_current] ports_ids = [pt.id for pt in ports] ids_to_del = list(set(pools_ids) - set(ports_ids)) pools_current.filter(id__in=ids_to_del).delete() vip.vip_criado = vp.created vip.validado = True vip.save() for port in ports: pools = port.viprequestportpool_set.all() for pool in pools: if pool.optionvip.nome_opcao_txt in (u'default_vip'): vip_port = { 'id': port.id, 'requisicao_vip': vip, 'server_pool': pool.server_pool, 'port_vip': port.port, 'identifier': port.identifier, } vip_map['vip_ports_to_pools'].append(vip_port) vip_port_obj = VipPortToPool(**vip_port) vip_port_obj.save() if int(vip_map['trafficreturn']) == 48: dsrl3 = VipRequestDSCP.objects.get(vip_request=vp) try: vp_dsrl3 = DsrL3_to_Vip.get_by_vip_id(vip.id) except: vp_dsrl3 = DsrL3_to_Vip() vp_dsrl3.requisicao_vip_id = vip.id vp_dsrl3.id_dsrl3 = dsrl3.dscp vp_dsrl3.save() else: try: vp_dsrl3 = DsrL3_to_Vip.get_by_vip_id(vip.id) vp_dsrl3.delete() except: pass vip.set_new_variables(vip_map) vip.save() except Exception, e: log.error(e) raise e
def update(request, pk): """ Update Vip Request :param request: :param pk: Identifier Vip Request :return: Data Serialized Post Update """ data = request.DATA user = request.user if not is_valid_int_greater_zero_param(pk): raise exceptions.InvalidIdVipRequestException() vip_ports = data.get('vip_ports_to_pools') req_vip_serializer = RequestVipSerializer( data=data ) if not req_vip_serializer.is_valid(): log.error(req_vip_serializer.errors) raise api_exceptions.ValidationException() # test if request exists RequisicaoVips.objects.get(pk=pk) with distributedlock(LOCK_VIP % pk): obj_req_vip = req_vip_serializer.object # compatibility issues if obj_req_vip.trafficreturn is None: obj_req_vip.trafficreturn = RequisicaoVips.objects.get( pk=pk).trafficreturn obj_req_vip.id = int(pk) obj_req_vip.filter_valid = True obj_req_vip.validado = False set_l7_filter_for_vip(obj_req_vip) obj_req_vip.set_new_variables(data) old_trafficreturn = RequisicaoVips.objects.get(pk=pk).trafficreturn if old_trafficreturn.id != obj_req_vip.trafficreturn.id: if obj_req_vip.trafficreturn.nome_opcao_txt == 'DSRL3': dsrl3_to_vip_obj = DsrL3_to_Vip() dsrl3_to_vip_obj.get_dsrl3(obj_req_vip, user) else: try: dsrl3_to_vip_obj = DsrL3_to_Vip.get_by_vip_id( obj_req_vip.id) dsrl3_to_vip_obj.delete(user) except ObjectDoesNotExist: pass obj_req_vip.save() vip_port_serializer = VipPortToPoolSerializer( data=vip_ports, many=True) if not vip_port_serializer.is_valid(): raise api_exceptions.ValidationException( 'Invalid Port Vip To Pool') vip_port_to_pool_pks = [port['id'] for port in vip_ports if port.get('id')] vip_port_to_pool_to_remove = VipPortToPool.objects.filter( requisicao_vip=obj_req_vip ).exclude( id__in=vip_port_to_pool_pks ) # valid if pools member can linked by environment/environment vip # relationship rule server_pool_ips_can_associate_with_vip_request( obj_req_vip, vip_port_to_pool_to_remove) for v_port_to_del in vip_port_to_pool_to_remove: v_port_to_del.delete() for vip_port in vip_ports: vip_port_obj = VipPortToPool() vip_port_obj.id = vip_port.get('id') vip_port_obj.server_pool = ServerPool( id=vip_port.get('server_pool')) vip_port_obj.port_vip = vip_port.get('port_vip') vip_port_obj.requisicao_vip = obj_req_vip vip_port_obj.save() # SYNC_VIP syncs.old_to_new(obj_req_vip) return req_vip_serializer.data