示例#1
0
    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
    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
示例#3
0
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.'
                        )