def create_vip_request(vip_request, user): """Create Vip Request.""" try: vip = VipRequest() vip.create_v3(vip_request, user) except ValidationAPIException, e: raise ValidationAPIException(str(e))
def patch_real_vip_request(vip_requests, user): load_balance = dict() keys = list() for vip in vip_requests: vip_old = VipRequest.get_by_pk(vip.get('id')) serializer_vips = vip_slz.VipRequestV3Serializer( vip_old, many=False, include=('ports__identifier',) ) vip_dict = serializer_vips.data # validate and save vip_dict['options']['persistence'] = vip['options']['persistence'] update_vip_request(vip_dict, user, permit_created=True) load_balance = prepare_apply( load_balance, vip_dict, created=True, user=user) keys.append(sorted([str(key) for key in load_balance.keys()])) # vips are in differents load balancers keys = [','.join(key) for key in keys] if len(list(set(keys))) > 1: raise Exception('Vips Request are in differents load balancers') for lb in load_balance: inst = copy.deepcopy(load_balance.get(lb)) log.info('started call:%s' % lb) inst.get('plugin').partial_update_vip(inst) log.info('ended call')
def patch_real_vip_request(vip_requests, user): load_balance = dict() keys = list() for vip in vip_requests: vip_old = VipRequest.get_by_pk(vip.get('id')) serializer_vips = vip_slz.VipRequestV3Serializer( vip_old, many=False, include=('ports__identifier', )) vip_dict = serializer_vips.data # validate and save vip_dict['options']['persistence'] = vip['options']['persistence'] update_vip_request(vip_dict, user, permit_created=True) load_balance = prepare_apply(load_balance, vip_dict, created=True, user=user) keys.append(sorted([str(key) for key in load_balance.keys()])) # vips are in differents load balancers keys = [','.join(key) for key in keys] if len(list(set(keys))) > 1: raise Exception('Vips Request are in differents load balancers') for lb in load_balance: inst = copy.deepcopy(load_balance.get(lb)) log.info('started call:%s' % lb) inst.get('plugin').partial_update_vip(inst) log.info('ended call')
def test_task_id_create_in_put_deploy_one_vip_request_success(self, *args): """Test success of id task generate for vip request put deploy success.""" mock_get_user = args[1] mock_get_vip = args[2] mock_update_real_vip = args[3] user = Usuario(id=1, nome='test') vip = VipRequest(id=1) mock_update_real_vip.return_value = vip mock_get_vip.return_value = vip mock_get_user.return_value = user redeploy({'id': vip.id}, user.id) mock_update_real_vip.assert_called_with([{'id': vip.id}], user)
def test_task_id_create_in_delete_deploy_one_vip_request_success(self, *args): """Test success of id task generate for vip request delete deploy success.""" mock_get_user = args[1] mock_get_vip = args[2] mock_delete_real_vip = args[3] user = Usuario(id=1, nome='test') vip = VipRequest(id=1) vip_serializer = VipRequestV3Serializer( vip, include=('ports__identifier',)) mock_delete_real_vip.return_value = vip mock_get_vip.return_value = vip mock_get_user.return_value = user undeploy(vip.id, user.id) mock_delete_real_vip.assert_called_with( [vip_serializer.data], user)
def update_real_vip_request(vip_requests, user): load_balance = dict() keys = list() for vip in vip_requests: # old VIP vip_old = VipRequest.get_by_pk(vip.get('id')) serializer_vips = vip_slz.VipRequestV3Serializer( vip_old, many=False, include=('ports__identifier',) ) slz_vips_old = copy.deepcopy(serializer_vips.data) # Save update_vip_request(vip, user, permit_created=True) # new VIP vip_new = VipRequest.get_by_pk(vip.get('id')) serializer_vips = vip_slz.VipRequestV3Serializer( vip_new, many=False, include=('ports__identifier',) ) vip_request = copy.deepcopy(serializer_vips.data) # Ids of ports of old vip ids_port_old = [port.get('id') for port in slz_vips_old.get('ports')] # Ids of ports of new vip ids_port_upt = [port.get('id') for port in vip_request.get('ports')] # Ids of ports to delete ids_port_to_del = list(set(ids_port_old) - set(ids_port_upt)) # Ports to change or insert for idx_port, port in enumerate(vip_request.get('ports')): # Port changed if port.get('id') in ids_port_old: # Get old port idx_old_port = ids_port_old.index(port.get('id')) old_port = slz_vips_old.get('ports')[idx_old_port] # Ids of old pools ids_old_pool = [pool.get('id') for pool in old_port.get('pools')] # Ids of new pools ids_upt_pool = [pool.get('id') for pool in port.get('pools')] # Ids of pools to delete ids_pool_to_del = list(set(ids_old_pool) - set(ids_upt_pool)) # Ids of pools to insert ids_pool_to_ins = list(set(ids_upt_pool) - set(ids_old_pool)) # Ids of pools with same ids ids_pool_equal = list(set(ids_upt_pool) & set(ids_old_pool)) # Pools to insert in port for id_pool in ids_pool_to_ins: idx_pool = ids_upt_pool.index(id_pool) vip_request['ports'][idx_port][ 'pools'][idx_pool]['insert'] = True # Pools to delete in port for id_pool in ids_pool_to_del: # Indexs pool to delete idx_pool_del = ids_old_pool.index(id_pool) # Pool to delete pool_del = copy\ .deepcopy(old_port.get('pools')[idx_pool_del]) pool_del['delete'] = True # Addes pool in list pools of port vip_request['ports'][idx_port]['pools'].append(pool_del) # pools to delete in port when id of internal controle was not # changed. # Example: OLD - Id: 1, Server_pool: 12, .. # NEW - Id: 1, Server_pool: 13, .. for id_pool in ids_pool_equal: idx_pool_old = ids_old_pool.index(id_pool) idx_pool_cur = ids_upt_pool.index(id_pool) # server_pool was changed if old_port.get('pools')[idx_pool_old]['server_pool'] != \ port.get('pools')[idx_pool_cur]['server_pool']: # pool to delete pool_del = copy\ .deepcopy(old_port.get('pools')[idx_pool_old]) pool_del['delete'] = True vip_request['ports'][idx_port]['pools']\ .append(pool_del) # New port else: vip_request['ports'][idx_port]['insert'] = True # Ports to delete for id_port in ids_port_to_del: # idx pool to delete idx_port_del = ids_port_old.index(id_port) # Port to delete port_del = copy.deepcopy(slz_vips_old.get('ports')[idx_port_del]) port_del['delete'] = True vip_request['ports'].append(port_del) load_balance = prepare_apply(load_balance, vip_request, created=True, user=user) keys.append(sorted([str(key) for key in load_balance.keys()])) # vips are in differents load balancers keys = [','.join(key) for key in keys] if len(list(set(keys))) > 1: raise Exception('Vips Request are in differents load balancers') pools_ids_ins = list() pools_ids_del = list() for lb in load_balance: inst = copy.deepcopy(load_balance.get(lb)) log.info('started call:%s' % lb) pool_ins, pool_del = inst.get('plugin').update_vip(inst) log.info('ended call') pools_ids_ins += pool_ins pools_ids_del += pool_del if pools_ids_ins: pools_ids_ins = list(set(pools_ids_ins)) ServerPool.objects.filter( id__in=pools_ids_ins).update(pool_created=True) if pools_ids_del: pools_ids_del = list(set(pools_ids_del)) ServerPool.objects.filter( id__in=pools_ids_del).update(pool_created=False)
def update_real_vip_request(vip_requests, user): load_balance = dict() keys = list() for vip in vip_requests: # old VIP vip_old = VipRequest.get_by_pk(vip.get('id')) serializer_vips = vip_slz.VipRequestV3Serializer( vip_old, many=False, include=('ports__identifier', )) slz_vips_old = copy.deepcopy(serializer_vips.data) # Save update_vip_request(vip, user, permit_created=True) # new VIP vip_new = VipRequest.get_by_pk(vip.get('id')) serializer_vips = vip_slz.VipRequestV3Serializer( vip_new, many=False, include=('ports__identifier', )) vip_request = copy.deepcopy(serializer_vips.data) # Ids of ports of old vip ids_port_old = [port.get('id') for port in slz_vips_old.get('ports')] # Ids of ports of new vip ids_port_upt = [port.get('id') for port in vip_request.get('ports')] # Ids of ports to delete ids_port_to_del = list(set(ids_port_old) - set(ids_port_upt)) # Ports to change or insert for idx_port, port in enumerate(vip_request.get('ports')): # Port changed if port.get('id') in ids_port_old: # Get old port idx_old_port = ids_port_old.index(port.get('id')) old_port = slz_vips_old.get('ports')[idx_old_port] # Ids of old pools ids_old_pool = [ pool.get('id') for pool in old_port.get('pools') ] # Ids of new pools ids_upt_pool = [pool.get('id') for pool in port.get('pools')] # Ids of pools to delete ids_pool_to_del = list(set(ids_old_pool) - set(ids_upt_pool)) # Ids of pools to insert ids_pool_to_ins = list(set(ids_upt_pool) - set(ids_old_pool)) # Ids of pools with same ids ids_pool_equal = list(set(ids_upt_pool) & set(ids_old_pool)) # Pools to insert in port for id_pool in ids_pool_to_ins: idx_pool = ids_upt_pool.index(id_pool) vip_request['ports'][idx_port]['pools'][idx_pool][ 'insert'] = True # Pools to delete in port for id_pool in ids_pool_to_del: # Indexs pool to delete idx_pool_del = ids_old_pool.index(id_pool) # Pool to delete pool_del = copy\ .deepcopy(old_port.get('pools')[idx_pool_del]) pool_del['delete'] = True # Addes pool in list pools of port vip_request['ports'][idx_port]['pools'].append(pool_del) # pools to delete in port when id of internal controle was not # changed. # Example: OLD - Id: 1, Server_pool: 12, .. # NEW - Id: 1, Server_pool: 13, .. for id_pool in ids_pool_equal: idx_pool_old = ids_old_pool.index(id_pool) idx_pool_cur = ids_upt_pool.index(id_pool) # server_pool was changed if old_port.get('pools')[idx_pool_old]['server_pool'] != \ port.get('pools')[idx_pool_cur]['server_pool']: # pool to delete pool_del = copy\ .deepcopy(old_port.get('pools')[idx_pool_old]) pool_del['delete'] = True vip_request['ports'][idx_port]['pools']\ .append(pool_del) # New port else: vip_request['ports'][idx_port]['insert'] = True # Ports to delete for id_port in ids_port_to_del: # idx pool to delete idx_port_del = ids_port_old.index(id_port) # Port to delete port_del = copy.deepcopy(slz_vips_old.get('ports')[idx_port_del]) port_del['delete'] = True vip_request['ports'].append(port_del) load_balance = prepare_apply(load_balance, vip_request, created=True, user=user) keys.append(sorted([str(key) for key in load_balance.keys()])) # vips are in differents load balancers keys = [','.join(key) for key in keys] if len(list(set(keys))) > 1: raise Exception('Vips Request are in differents load balancers') pools_ids_ins = list() pools_ids_del = list() for lb in load_balance: inst = copy.deepcopy(load_balance.get(lb)) log.info('started call:%s' % lb) pool_ins, pool_del = inst.get('plugin').update_vip(inst) log.info('ended call') pools_ids_ins += pool_ins pools_ids_del += pool_del if pools_ids_ins: pools_ids_ins = list(set(pools_ids_ins)) ServerPool.objects.filter(id__in=pools_ids_ins).update( pool_created=True) if pools_ids_del: pools_ids_del = list(set(pools_ids_del)) ServerPool.objects.filter(id__in=pools_ids_del).update( pool_created=False)
def old_to_new(vip_request): from networkapi.ambiente.models import EnvironmentVip from networkapi.api_vip_request.models import VipRequest, VipRequestDSCP, VipRequestOptionVip, \ VipRequestPort, VipRequestPortOptionVip, VipRequestPortPool from networkapi.requisicaovips.models import DsrL3_to_Vip, OptionVip, OptionVipEnvironmentVip, \ VipPortToPool mp = vip_request.variables_to_map() try: try: ev = EnvironmentVip().get_by_values( mp['finalidade'], mp['cliente'], mp['ambiente']) except: ev = EnvironmentVip() ev.finalidade_txt = mp['finalidade'] ev.cliente_txt = mp['cliente'] ev.ambiente_p44_txt = mp['ambiente'] ev.description = '%s - %s - %s' % ( mp['finalidade'], mp['cliente'], mp['ambiente']) ev.save() finally: vp = VipRequest() vp.environmentvip = ev vp.id = vip_request.id vp.name = mp['host'] if mp.get('host') else None vp.business = mp['areanegocio'] if mp.get( 'areanegocio') else vp.name vp.service = mp['nome_servico'] if mp.get( 'nome_servico') else vp.name vp.ipv4 = vip_request.ip if vip_request.ip else None vp.ipv6 = vip_request.ipv6 if vip_request.ipv6 else None vp.created = vip_request.vip_criado vp.save() if mp.get('persistencia'): persistencia = mp['persistencia'] else: persistencia = '(nenhum)' try: op_per = OptionVip.objects.filter( tipo_opcao=u'Persistencia', nome_opcao_txt=persistencia)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_per, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_per opv.environment = ev opv.save() except: op_per = OptionVip() op_per.tipo_opcao = u'Persistencia' op_per.nome_opcao_txt = persistencia op_per.save() opv = OptionVipEnvironmentVip() opv.option = op_per opv.environment = ev opv.save() finally: try: vro = VipRequestOptionVip.objects.get( optionvip=op_per, vip_request=vp) except: vro = VipRequestOptionVip() vro.optionvip = op_per vro.vip_request = vp vro.save() if mp.get('timeout'): timeout = mp['timeout'] else: timeout = '5' try: op_time = OptionVip.objects.filter( tipo_opcao=u'timeout', nome_opcao_txt=timeout)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_time, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_time opv.environment = ev opv.save() except: op_time = OptionVip() op_time.tipo_opcao = u'timeout' op_time.nome_opcao_txt = timeout op_time.save() opv = OptionVipEnvironmentVip() opv.option = op_time opv.environment = ev opv.save() finally: try: vro = VipRequestOptionVip.objects.get( optionvip=op_time, vip_request=vp) except: vro = VipRequestOptionVip() vro.optionvip = op_time vro.vip_request = vp vro.save() if mp.get('trafficreturn'): trafficreturn = mp['trafficreturn'] else: trafficreturn = 12 try: op_traffic = OptionVip.objects.filter( tipo_opcao=u'Retorno de trafego', id=trafficreturn)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_traffic, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_traffic opv.environment = ev opv.save() except: op_traffic = OptionVip() op_traffic.tipo_opcao = u'Retorno de trafego' op_traffic.nome_opcao_txt = trafficreturn op_traffic.save() opv = OptionVipEnvironmentVip() opv.option = op_traffic opv.environment = ev opv.save() finally: try: vro = VipRequestOptionVip.objects.get( optionvip=op_traffic, vip_request=vp) except: vro = VipRequestOptionVip() vro.optionvip = op_traffic vro.vip_request = vp vro.save() if int(trafficreturn) == 48: dsrl3 = DsrL3_to_Vip.get_by_vip_id(vip_request.id) try: vp_dsrl3 = VipRequestDSCP.objects.get(vip_request=vp) except: vp_dsrl3 = VipRequestDSCP() vp_dsrl3.vip_request = vp vp_dsrl3.dscp = dsrl3.id_dsrl3 vp_dsrl3.save() else: try: vp_dsrl3 = VipRequestDSCP.objects.get(vip_request=vp) vp_dsrl3.delete() except: pass if mp.get('cache'): cache = mp['cache'] else: cache = '(nenhum)' try: op_cache = OptionVip.objects.filter( tipo_opcao=u'cache', nome_opcao_txt=cache)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_cache, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_cache opv.environment = ev opv.save() except: op_cache = OptionVip() op_cache.tipo_opcao = u'cache' op_cache.nome_opcao_txt = cache op_cache.save() opv = OptionVipEnvironmentVip() opv.option = op_cache opv.environment = ev opv.save() finally: try: vro = VipRequestOptionVip.objects.get( optionvip=op_cache, vip_request=vp) except: vro = VipRequestOptionVip() vro.optionvip = op_cache vro.vip_request = vp vro.save() # delete optionvip(op_cache, op_traffic, op_time, op_per) # in port removed in old table VipRequestOptionVip.objects.filter( vip_request=vp ).exclude( optionvip__id__in=[op_cache.id, op_traffic.id, op_time.id, op_per.id] ).delete() pools = VipPortToPool.get_by_vip_id(vip_request.id) # delete old ports ports_current = VipRequestPort.objects.filter(vip_request=vp) ports_ids = [port.id for port in ports_current] pools_ids = [pl.id for pl in pools] ids_to_del = list(set(ports_ids) - set(pools_ids)) ports_current.filter(id__in=ids_to_del).delete() # delete pools removed in old table # ptid = [ptid.server_pool.id for ptid in pools] # VipRequestPortPool.objects.filter( # vip_request_port=vrp # ).exclude( # server_pool__id__in=ptid # ).delete() for pool in pools: # saving ports of vip vrp = VipRequestPort() vrp.id = pool.id vrp.vip_request = vp vrp.port = pool.port_vip if not pool.identifier: from networkapi.api_equipment import facade as facade_eqpt from networkapi.plugins.factory import PluginFactory eqpts = facade_eqpt.get_eqpt_by_envvip(ev.id) if eqpts: plugin = PluginFactory.factory(eqpts[0]) vrp.identifier = plugin.get_name_eqpt( vp, pool.port_vip) pool.identifier = vrp.identifier pool.save() vrp.save() # descobre protocolo l7 e l4 tipo_opcao = 'l7_rule' nome_opcao_txt = 'default_vip' l4_protocol = 'TCP' l7_protocol = 'Outros' if mp.get('healthcheck_type') == 'HTTP': tipo_opcao = 'l7_rule' nome_opcao_txt = 'default_vip' l4_protocol = 'TCP' l7_protocol = 'HTTP' if mp.get('healthcheck_type') == 'TCP': l4_protocol = 'TCP' l7_protocol = 'Outros' if mp.get('healthcheck_type') == 'UDP': l4_protocol = 'UDP' l7_protocol = 'Outros' if pool.port_vip == 20 or pool.port_vip == 21: l4_protocol = 'TCP' l7_protocol = 'FTP' if pool.port_vip == 443: l4_protocol = 'TCP' l7_protocol = 'HTTPS' # l4_protocol try: op_l4 = OptionVip.objects.filter( tipo_opcao='l4_protocol', nome_opcao_txt=l4_protocol)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_l4, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_l4 opv.environment = ev opv.save() except: op_l4 = OptionVip() op_l4.tipo_opcao = u'l4_protocol' op_l4.nome_opcao_txt = l4_protocol op_l4.save() opv = OptionVipEnvironmentVip() opv.option = op_l4 opv.environment = ev opv.save() finally: try: vro = VipRequestPortOptionVip.objects.filter( optionvip=op_l4, vip_request_port=vrp)[0] except: vro = VipRequestPortOptionVip() vro.optionvip = op_l4 vro.vip_request_port = vrp vro.save() # l7_protocol try: op_l7 = OptionVip.objects.filter( tipo_opcao='l7_protocol', nome_opcao_txt=l7_protocol)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_l7, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_l7 opv.environment = ev opv.save() except: op_l7 = OptionVip() op_l7.tipo_opcao = u'l7_protocol' op_l7.nome_opcao_txt = l7_protocol op_l7.save() opv = OptionVipEnvironmentVip() opv.option = op_l7 opv.environment = ev opv.save() finally: try: vro = VipRequestPortOptionVip.objects.filter( optionvip=op_l7, vip_request_port=vrp)[0] except: vro = VipRequestPortOptionVip() vro.optionvip = op_l7 vro.vip_request_port = vrp vro.save() # delete optionvip(l7 and l4) in port removed in old table VipRequestPortOptionVip.objects.filter( vip_request_port=vrp ).exclude( optionvip__id__in=[op_l7.id, op_l4.id] ).delete() # saving pools of port try: op_pt = OptionVip.objects.filter( tipo_opcao=tipo_opcao, nome_opcao_txt=nome_opcao_txt)[0] try: opv = OptionVipEnvironmentVip.objects.get( option=op_pt, environment=ev) except: opv = OptionVipEnvironmentVip() opv.option = op_pt opv.environment = ev opv.save() except: op_pt = OptionVip() op_pt.tipo_opcao = tipo_opcao op_pt.nome_opcao_txt = nome_opcao_txt op_pt.save() opv = OptionVipEnvironmentVip() opv.option = op_pt opv.environment = ev opv.save() finally: try: vrpp = VipRequestPortPool.objects.filter( server_pool=pool.server_pool, vip_request_port=vrp)[0] except: vrpp = VipRequestPortPool() vrpp.server_pool = pool.server_pool vrpp.vip_request_port = vrp vrpp.optionvip = op_pt vrpp.save() except Exception, e: log.error(e) raise e