def is_ipv4_in_use(self, ipv4, vip_id): is_in_use = True pool_member_count = ServerPoolMember.objects.filter(ip=ipv4).exclude( server_pool__vipporttopool__requisicao_vip__id=vip_id).count() vip_count = RequisicaoVips.get_by_ipv4_id( ipv4.id).exclude(pk=vip_id).count() if vip_count == 0 and pool_member_count == 0: is_in_use = False return is_in_use
class GroupVirtualResource(RestResource): log = logging.getLogger('GroupVirtualResource') def handle_delete(self, request, user, *args, **kwargs): """Trata as requisições de PUT para remover um grupo virtual. URL: /grupovirtual/ """ try: xml_map, attrs_map = loads( request.raw_post_data, ['vip', 'equipamento', 'id_equipamento']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'Não existe valor para a tag networkapi do XML de requisição.' ) vips_map = networkapi_map.get('vips') try: equipments_map = networkapi_map['equipamentos'] except KeyError: return self.response_error(3, u'XML de requisição inválido.') try: with distributedlock(LOCK_GROUP_VIRTUAL): # Vips if vips_map is not None: try: vip_maps = vips_map['vip'] for vip_map in vip_maps: balanceadores_map = vip_map['balanceadores'] if balanceadores_map is None: return self.response_error( 3, u'Valor da tag balanceadores do XML de requisição inválido.' ) ip_id = vip_map['id_ip'] try: ip_id = int(ip_id) except (TypeError, ValueError), e: self.log.error(u'Valor do id_ip inválido: %s.', ip_id) raise IpNotFoundError( e, u'Valor do id_ip inválido: %s.' % ip_id) vip_s = RequisicaoVips.get_by_ipv4_id(ip_id) # Run scripts to remove vips for vip in vip_s: # Make command command = VIP_REMOVE % (vip.id) # Execute command code, stdout, stderr = exec_script(command) if code == 0: vip.vip_criado = 0 vip.save() # SYNC_VIP old_to_new(vip) else: return self.response_error( 2, stdout + stderr) equipment_ids = balanceadores_map['id_equipamento'] for equip_id in equipment_ids: try: equip_id = int(equip_id) except (TypeError, ValueError), e: self.log.error( u'Valor do id_equipamento inválido: %s.', equip_id) raise EquipamentoNotFoundError( e, u'Valor do id_equipamento inválido: %s.' % equip_id) remove_ip_equipment(ip_id, equip_id, user) except KeyError: return self.response_error( 3, u'Valor das tags vips/vip do XML de requisição inválido.' )