예제 #1
0
def create_interface_environments(interface_environment):

    try:
        interface_envs_obj = EnvironmentInterface()
        interface_envs_obj.create_v3(interface_environment)
    except models.InterfaceError, e:
        raise ValidationAPIException(e.message)
예제 #2
0
def create_interface_environments(interface_environment):

    try:
        interface_envs_obj = EnvironmentInterface()
        interface_envs_obj.create_v3(interface_environment)
    except models.InterfaceError, e:
        raise ValidationAPIException(e.message)
    def handle_get(self, request, user, *args, **kwargs):
        """Handles GET requests to find EnvironmentInterface.

        URLs: int/get-env-by-interface/<id_interface>
        """
        self.log.info('buscando os ambientes associados a uma interface')

        try:

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            # Get XML data
            interface = kwargs.get('id_interface')

            int_ambiente = EnvironmentInterface.get_by_interface(
                int(interface))

            ambiente_map = []

            for ids in int_ambiente:
                ambiente_map.append(
                    self.get_environment_map(ids.ambiente, ids.vlans))

            return self.response(dumps_networkapi({'ambiente': ambiente_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_get(self, request, user, *args, **kwargs):
        """Handles GET requests to find EnvironmentInterface.

        URLs: int/get-env-by-interface/<id_interface>
        """
        self.log.info('buscando os ambientes associados a uma interface')

        try:

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT , AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            # Get XML data
            interface = kwargs.get('id_interface')

            int_ambiente = EnvironmentInterface.get_by_interface(int(interface))

            ambiente_map = []

            for ids in int_ambiente:
                ambiente_map.append(self.get_environment_map(ids.ambiente))

            return self.response(dumps_networkapi({'ambiente': ambiente_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
예제 #5
0
def get_vlan_range(interface):
    # TODO Generate vlan range
    env_ints = EnvironmentInterface.get_by_interface(interface.id)
    vlan_range = ''
    vlan_range_list = []
    for env_int in env_ints:
        if env_int.vlans:
            vlan_range_temp = env_int.vlans
            vlan_range_list_temp = [vlan_range_temp]
        else:
            vlan_range_1 = str(env_int.ambiente.min_num_vlan_1) + \
                '-' + str(env_int.ambiente.max_num_vlan_1)
            vlan_range_2 = str(env_int.ambiente.min_num_vlan_2) + \
                '-' + str(env_int.ambiente.max_num_vlan_2)
            if vlan_range_1 is not vlan_range_2:
                vlan_range_temp = vlan_range_1 + ',' + vlan_range_2
                vlan_range_list_temp = [vlan_range_1, vlan_range_2]
            else:
                vlan_range_temp = vlan_range_1
                vlan_range_list_temp = [vlan_range_1]
        if vlan_range is '':
            vlan_range = vlan_range_temp
            vlan_range_list.extend(vlan_range_list_temp)
        elif vlan_range_temp not in vlan_range:
            vlan_range += ',' + vlan_range_temp
            vlan_range_list.extend(vlan_range_list_temp)

    if vlan_range == '':
        raise exceptions.InterfaceTrunkAllowedVlanException()

    return [vlan_range, vlan_range_list]
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add Rack.

        URL: interface/associar-ambiente/
        """
        try:
            self.log.info("Associa interface aos ambientes")

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            interface_map = networkapi_map.get('interface')
            if interface_map is None:
                return self.response_error(3, u'There is no value to the interface tag  of XML request.')

            # Get XML data
            env = interface_map.get('ambiente')
            interface = interface_map.get('interface')

            amb_int = EnvironmentInterface()
            interfaces = Interface()
            amb = Ambiente()

            amb_int.interface = interfaces.get_by_pk(int(interface))
            amb_int.ambiente = amb.get_by_pk(int(env))

            amb_int.create(user)

            amb_int_map = dict()
            amb_int_map['interface_ambiente'] = amb_int

            return self.response(dumps_networkapi(amb_int_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
예제 #7
0
    def _create_ifaces_on_trunks(self, sw_router, envs_vlans):

        interface_list = EnvironmentInterface.objects.all().filter(
            interface=sw_router.id)

        for int_env in interface_list:
            int_env.delete()

        if type(envs_vlans) is not list:
            envs_vlans = [envs_vlans]

        for i in envs_vlans:

            environment = Ambiente.get_by_pk(int(i.get('env')))
            env_iface = EnvironmentInterface()
            env_iface.interface = sw_router
            env_iface.ambiente = environment

            range_vlans = i.get('vlans')
            if range_vlans:
                api_interface_facade.verificar_vlan_range(
                    environment, range_vlans)

                env_iface.vlans = range_vlans

            env_iface.create()
def alterar_interface(var, interface, port_channel, int_type, vlan, user, envs, amb):

    cont = []

    var = interface.get_by_pk(int(var))

    if var.channel is None:
        var.channel = port_channel
    elif not var.channel.id==port_channel.id:
        raise InterfaceError("Interface %s já está em um Channel" % var.interface)

    # for i in interface.search(var.equipamento.id):
    #     if i.channel is not None and not i.channel.id==port_channel.id:
    #         raise InterfaceError("Equipamento %s já possui um Channel" % var.equipamento.nome)

    if cont is []:
        cont.append(int(var.equipamento.id))
    elif not var.equipamento.id in cont:
        cont.append(int(var.equipamento.id))
        if len(cont) > 2:
            raise InterfaceError("Mais de dois equipamentos foram selecionados")

    var.tipo = int_type
    var.vlan_nativa = vlan
    var.save()

    if "trunk" in int_type.tipo:
        interface_list = EnvironmentInterface.objects.all().filter(interface=var.id)
        for int_env in interface_list:
            int_env.delete()
        if envs is not None:
            if not type(envs)==unicode:
                for env in envs:
                    amb_int = EnvironmentInterface()
                    amb_int.interface = var
                    amb_int.ambiente = amb.get_by_pk(int(env))
                    amb_int.create(user)
            else:
                amb_int = EnvironmentInterface()
                amb_int.interface = var
                amb_int.ambiente = amb.get_by_pk(int(envs))
                amb_int.create(user)
예제 #9
0
    def _create_ifaces_on_trunks(self, iface, envs_vlans):
        log.debug("_create_ifaces_on_trunks")

        for i in envs_vlans:

            environment = Ambiente.get_by_pk(int(i.get('env')))
            env_iface = EnvironmentInterface()
            env_iface.interface = iface
            env_iface.ambiente = environment
            env_iface.vlans = i.get('vlans')
            env_iface.create()
예제 #10
0
def alterar_interface(var, interface, port_channel, int_type, vlan_nativa,
                      user, envs_vlans, amb):

    cont = []

    var = interface.get_by_pk(int(var))

    if var.channel is None:
        var.channel = port_channel
    elif not var.channel.id == port_channel.id:
        raise InterfaceError('Interface %s já está em um Channel' %
                             var.interface)

    if cont is []:
        cont.append(int(var.equipamento.id))
    elif not var.equipamento.id in cont:
        cont.append(int(var.equipamento.id))
        if len(cont) > 2:
            raise InterfaceError(
                'Mais de dois equipamentos foram selecionados')

    var.tipo = int_type
    var.vlan_nativa = vlan_nativa
    var.save()

    interface_list = EnvironmentInterface.objects.all().filter(
        interface=var.id)
    for int_env in interface_list:
        int_env.delete()

    if 'trunk' in int_type.tipo:
        if type(envs_vlans) is not list:
            d = envs_vlans
            envs_vlans = []
            envs_vlans.append(d)
        for i in envs_vlans:
            amb = amb.get_by_pk(int(i.get('env')))
            amb_int = EnvironmentInterface()
            amb_int.interface = var
            amb_int.ambiente = amb
            try:
                range_vlans = i.get('vlans')
            except:
                range_vlans = None
                pass
            if range_vlans:
                api_interface_facade.verificar_vlan_range(amb, range_vlans)
                amb_int.vlans = range_vlans
            try:
                amb_int.create(user)
            except Exception, e:
                logger.error(e)
                pass
예제 #11
0
def get_vlan_range(interface):
    log.info("get_vlan_range")

    # TODO Generate vlan range
    env_ints = EnvironmentInterface.get_by_interface(interface.id)
    vlan_range = ''
    vlan_range_list = []
    for env_int in env_ints:
        #This test is not good. Has to be treated elsewhere with plugins
        if interface.equipamento.modelo.marca.nome == "HP":
            separator = ' to '
            range_list_separator = ' '
        else:
            separator = '-'
            range_list_separator = ','

        if env_int.vlans:
            vlan_range_temp = env_int.vlans
            vlan_range_temp = vlan_range_temp.replace('-', separator)
            vlan_range_list_temp = [vlan_range_temp]
        else:

            vlan_range_1 = str(env_int.ambiente.min_num_vlan_1) + \
                           separator + str(env_int.ambiente.max_num_vlan_1)
            vlan_range_2 = str(env_int.ambiente.min_num_vlan_2) + \
                           separator + str(env_int.ambiente.max_num_vlan_2)

            if vlan_range_1 is not vlan_range_2:
                vlan_range_temp = vlan_range_1 + range_list_separator + vlan_range_2
                vlan_range_list_temp = [vlan_range_1, vlan_range_2]
            else:
                vlan_range_temp = vlan_range_1
                vlan_range_list_temp = [vlan_range_1]

        if vlan_range is '':
            vlan_range = vlan_range_temp
            vlan_range_list.extend(vlan_range_list_temp)
        elif vlan_range_temp not in vlan_range:
            vlan_range += range_list_separator + vlan_range_temp
            vlan_range_list.extend(vlan_range_list_temp)

    if vlan_range == '':
        raise exceptions.InterfaceTrunkAllowedVlanException()

    return [vlan_range, vlan_range_list]
예제 #12
0
def get_vlan_range(interface):
    log.info("get_vlan_range")

    # TODO Generate vlan range
    env_ints = EnvironmentInterface.get_by_interface(interface.id)
    vlan_range = ''
    vlan_range_list = []
    for env_int in env_ints:
        #This test is not good. Has to be treated elsewhere with plugins
        if interface.equipamento.modelo.marca.nome == "HP":
            separator = ' to '
            range_list_separator = ' '
        else:
            separator = '-'
            range_list_separator = ','

        if env_int.vlans:
            vlan_range_temp = env_int.vlans
            vlan_range_temp = vlan_range_temp.replace('-', separator)
            vlan_range_list_temp = [vlan_range_temp]
        else:

            vlan_range_1 = str(env_int.ambiente.min_num_vlan_1) + \
                           separator + str(env_int.ambiente.max_num_vlan_1)
            vlan_range_2 = str(env_int.ambiente.min_num_vlan_2) + \
                           separator + str(env_int.ambiente.max_num_vlan_2)

            if vlan_range_1 is not vlan_range_2:
                vlan_range_temp = vlan_range_1 + range_list_separator + vlan_range_2
                vlan_range_list_temp = [vlan_range_1, vlan_range_2]
            else:
                vlan_range_temp = vlan_range_1
                vlan_range_list_temp = [vlan_range_1]

        if vlan_range is '':
            vlan_range = vlan_range_temp
            vlan_range_list.extend(vlan_range_list_temp)
        elif vlan_range_temp not in vlan_range:
            vlan_range += range_list_separator + vlan_range_temp
            vlan_range_list.extend(vlan_range_list_temp)

    if vlan_range == '':
        raise exceptions.InterfaceTrunkAllowedVlanException()

    return [vlan_range, vlan_range_list]
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add Rack.

        URL: interface/associar-ambiente/
        """
        try:
            self.log.info('Associa interface aos ambientes')

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the networkapi tag  of XML request.'
                )

            interface_map = networkapi_map.get('interface')
            if interface_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the interface tag  of XML request.')

            # Get XML data
            env = interface_map.get('ambiente')
            interface = interface_map.get('interface')

            amb_int = EnvironmentInterface()
            interfaces = Interface()
            amb = Ambiente()

            amb_int.interface = interfaces.get_by_pk(int(interface))
            amb_int.ambiente = amb.get_by_pk(int(env))

            amb_int.create(user)

            amb_int_map = dict()
            amb_int_map['interface_ambiente'] = amb_int

            return self.response(dumps_networkapi(amb_int_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
예제 #14
0
def get_vlan_range(interface):
    #TODO Generate vlan range
    env_ints = EnvironmentInterface.get_by_interface(interface.id)
    vlan_range = ""
    for env_int in env_ints:
        vlan_range_1 = str(env_int.ambiente.min_num_vlan_1)+"-"+str(env_int.ambiente.max_num_vlan_1)
        vlan_range_2 = str(env_int.ambiente.min_num_vlan_2)+"-"+str(env_int.ambiente.max_num_vlan_2)
        if vlan_range_1 is not vlan_range_2:
            vlan_range_temp = vlan_range_1+","+vlan_range_2
        else:
            vlan_range_temp = vlan_range_1
            
        if vlan_range is "":
            vlan_range = vlan_range_temp
        elif vlan_range_temp not in vlan_range:
            vlan_range += ","+vlan_range_temp

    return vlan_range
def alterar_interface(var, interface, port_channel, int_type, vlans, user, envs, amb):

    cont = []

    var = interface.get_by_pk(int(var))

    if var.channel is None:
        var.channel = port_channel
    elif not var.channel.id==port_channel.id:
        raise InterfaceError("Interface %s já está em um Channel" % var.interface)

    # for i in interface.search(var.equipamento.id):
    #     if i.channel is not None and not i.channel.id==port_channel.id:
    #         raise InterfaceError("Equipamento %s já possui um Channel" % var.equipamento.nome)

    if cont is []:
        cont.append(int(var.equipamento.id))
    elif not var.equipamento.id in cont:
        cont.append(int(var.equipamento.id))
        if len(cont) > 2:
            raise InterfaceError("Mais de dois equipamentos foram selecionados")

    var.tipo = int_type
    var.vlan_nativa = vlans.get('vlan_nativa')
    var.save()

    if "trunk" in int_type.tipo:
        interface_list = EnvironmentInterface.objects.all().filter(interface=var.id)
        for int_env in interface_list:
            int_env.delete()
        if envs is not None:
            amb = amb.get_by_pk(int(envs))
            amb_int = EnvironmentInterface()
            amb_int.interface = var
            amb_int.ambiente = amb
            try:
                range_vlans = vlans.get('range')
            except:
                range_vlans = None
                pass
            if range_vlans:
                api_interface_facade.verificar_vlan_range(amb, range_vlans)
                amb_int.vlans = range_vlans
            amb_int.create(user)
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add Rack.
        URL: channel/inserir/
        """
        try:
            self.log.info("Inserir novo Channel")

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                self.log.error(u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            channel_map = networkapi_map.get('channel')
            if channel_map is None:
                return self.response_error(3, u'There is no value to the channel tag  of XML request.')

            # Get XML data
            interfaces = channel_map.get('interfaces')
            nome = channel_map.get('nome')
            lacp = channel_map.get('lacp')
            int_type = channel_map.get('int_type')
            vlans = channel_map.get('vlan')
            envs = channel_map.get('envs')

            port_channel = PortChannel()
            interface = Interface()
            amb = Ambiente()

            cont = []

            interfaces = str(interfaces).split('-')
            interface_id = None

            # verifica a vlan_nativa
            vlan = vlans.get('vlan_nativa')
            if vlan is not None:
                if int(vlan) < 1 or int(vlan) > 4096:
                    raise InvalidValueError(None, "Vlan Nativa", "Range valido: 1 - 4096.")
                if int(vlan) < 1 or 3967 < int(vlan) < 4048 or int(vlan)==4096:
                    raise InvalidValueError(None, "Vlan Nativa" ,"Range reservado: 3968-4047;4094.")

            # verifica se o nome do port channel já existe no equipamento
            channels = PortChannel.objects.filter(nome=nome)
            channels_id = []
            for ch in channels:
                channels_id.append(int(ch.id))
            if channels_id:
                for var in interfaces:
                    if not var=="" and not var==None:
                        interface_id = int(var)
                interface_id = interface.get_by_pk(interface_id)
                equip_id = interface_id.equipamento.id
                equip_interfaces = interface.search(equip_id)
                for i in equip_interfaces:
                    try:
                        sw = i.get_switch_and_router_interface_from_host_interface(i.protegida)
                    except:
                        sw = None
                        pass
                    if sw.channel is not None:
                        if sw.channel.id in channels_id:
                            raise InterfaceError("O nome do port channel ja foi utilizado no equipamento")

            #cria o port channel
            port_channel.nome = str(nome)
            port_channel.lacp = convert_string_or_int_to_boolean(lacp)
            port_channel.create(user)

            int_type = TipoInterface.get_by_name(str(int_type))

            for var in interfaces:
                if not var=="" and not var==None:
                    interf = interface.get_by_pk(int(var))

                    try:
                        sw_router = interf.get_switch_and_router_interface_from_host_interface(interf.protegida)
                    except:
                        raise InterfaceError("Interface não conectada")

                    if sw_router.channel is not None:
                        raise InterfaceError("Interface %s já está em um Channel" % sw_router.interface)

                    if cont is []:
                        cont.append(int(sw_router.equipamento.id))
                    elif not sw_router.equipamento.id in cont:
                        cont.append(int(sw_router.equipamento.id))
                        if len(cont) > 2:
                            raise InterfaceError("Mais de dois equipamentos foram selecionados")

                    if sw_router.ligacao_front is not None:
                        ligacao_front_id = sw_router.ligacao_front.id
                    else:
                        ligacao_front_id = None
                    if sw_router.ligacao_back is not None:
                        ligacao_back_id = sw_router.ligacao_back.id
                    else:
                        ligacao_back_id = None

                    Interface.update(user,
                                     sw_router.id,
                                     interface=sw_router.interface,
                                     protegida=sw_router.protegida,
                                     descricao=sw_router.descricao,
                                     ligacao_front_id=ligacao_front_id,
                                     ligacao_back_id=ligacao_back_id,
                                     tipo=int_type,
                                     vlan_nativa=vlans.get('vlan_nativa'),
                                     channel=port_channel)

                    if "trunk" in int_type.tipo:
                        interface_list = EnvironmentInterface.objects.all().filter(interface=sw_router.id)
                        for int_env in interface_list:
                            int_env.delete()
                        if envs is not None:
                            amb = amb.get_by_pk(int(envs))
                            amb_int = EnvironmentInterface()
                            amb_int.interface = sw_router
                            amb_int.ambiente = amb
                            try:
                                range_vlans = vlans.get('range')
                            except:
                                range_vlans = None
                                pass
                            if range_vlans:
                                api_interface_facade.verificar_vlan_range(amb, range_vlans)
                                amb_int.vlans = range_vlans
                            amb_int.create(user)

            port_channel_map = dict()
            port_channel_map['port_channel'] = port_channel

            return self.response(dumps_networkapi({'port_channel': port_channel_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add Rack.

        URL: channel/inserir/
        """
        try:
            self.log.info("Inserir novo Channel")

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            channel_map = networkapi_map.get('channel')
            if channel_map is None:
                return self.response_error(3, u'There is no value to the channel tag  of XML request.')

            # Get XML data
            interfaces = channel_map.get('interfaces')
            nome = channel_map.get('nome')
            lacp = channel_map.get('lacp')
            int_type = channel_map.get('int_type')
            vlan = channel_map.get('vlan')
            envs = channel_map.get('envs')
            port_channel = PortChannel()
            interface = Interface()
            amb = Ambiente()

            cont = []

            port_channel.nome = str(nome)
            port_channel.lacp = convert_string_or_int_to_boolean(lacp)
            port_channel.create(user)

            interfaces = str(interfaces).split('-')

            int_type = TipoInterface.get_by_name(str(int_type))
            for var in interfaces:
                if not var=="" and not var==None:
                    interf = interface.get_by_pk(int(var))
                    try:
                        sw_router = interf.get_switch_and_router_interface_from_host_interface(interf.protegida)
                    except:
                        raise InterfaceError("Interface não conectada")

                    if sw_router.channel is not None:
                        raise InterfaceError("Interface %s já está em um Channel" % sw_router.interface)

                    for i in interface.search(sw_router.equipamento.id):
                        if i.channel is not None:
                            raise InterfaceError("Equipamento %s já possui um Channel" % sw_router.equipamento.nome)

                    if cont is []:
                        cont.append(int(sw_router.equipamento.id))
                    elif not sw_router.equipamento.id in cont:
                        cont.append(int(sw_router.equipamento.id))
                        if len(cont) > 2:
                            raise InterfaceError("Mais de dois equipamentos foram selecionados")

                    if sw_router.ligacao_front is not None:
                        ligacao_front_id = sw_router.ligacao_front.id
                    else:
                        ligacao_front_id = None
                    if sw_router.ligacao_back is not None:
                        ligacao_back_id = sw_router.ligacao_back.id
                    else:
                        ligacao_back_id = None

                    Interface.update(user,
                                     sw_router.id,
                                     interface=sw_router.interface,
                                     protegida=sw_router.protegida,
                                     descricao=sw_router.descricao,
                                     ligacao_front_id=ligacao_front_id,
                                     ligacao_back_id=ligacao_back_id,
                                     tipo=int_type,
                                     vlan_nativa=vlan,
                                     channel=port_channel)

                    if "trunk" in int_type.tipo:
                        interface_list = EnvironmentInterface.objects.all().filter(interface=sw_router.id)
                        for int_env in interface_list:
                            int_env.delete(user)
                        if envs is not None:
                            if not type(envs)==unicode:
                                for env in envs:
                                    amb_int = EnvironmentInterface()
                                    amb_int.interface = sw_router
                                    amb_int.ambiente = amb.get_by_pk(int(env))
                                    amb_int.create(user)
                            else:
                                amb_int = EnvironmentInterface()
                                amb_int.interface = sw_router
                                amb_int.ambiente = amb.get_by_pk(int(envs))
                                amb_int.create(user)

            port_channel_map = dict()
            port_channel_map['port_channel'] = port_channel

            return self.response(dumps_networkapi({'port_channel': port_channel_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
예제 #18
0
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add Rack.
        URL: channel/inserir/
        """
        try:
            self.log.info('Inserir novo Channel')

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            channel_map = networkapi_map.get('channel')
            if channel_map is None:
                return self.response_error(3, u'There is no value to the channel tag  of XML request.')

            # Get XML data
            interfaces = channel_map.get('interfaces')
            nome = channel_map.get('nome')
            lacp = channel_map.get('lacp')
            int_type = channel_map.get('int_type')
            vlan_nativa = channel_map.get('vlan')
            envs_vlans = channel_map.get('envs')

            port_channel = PortChannel()
            interface = Interface()
            amb = Ambiente()
            cont = []

            api_interface_facade.verificar_vlan_nativa(vlan_nativa)

            # verifica se o nome do port channel já existe no equipamento
            interfaces = str(interfaces).split('-')
            api_interface_facade.verificar_nome_channel(nome, interfaces)

            # cria o port channel
            port_channel.nome = str(nome)
            port_channel.lacp = convert_string_or_int_to_boolean(lacp)
            port_channel.create(user)

            int_type = TipoInterface.get_by_name(str(int_type))

            for var in interfaces:
                if not var == '' and not var is None:
                    interf = interface.get_by_pk(int(var))

                    try:
                        sw_router = interf.get_switch_and_router_interface_from_host_interface(
                            interf.protegida)
                    except:
                        raise InterfaceError('Interface não conectada')

                    if sw_router.channel is not None:
                        raise InterfaceError(
                            'Interface %s já está em um Channel' % sw_router.interface)

                    if cont is []:
                        cont.append(int(sw_router.equipamento.id))
                    elif not sw_router.equipamento.id in cont:
                        cont.append(int(sw_router.equipamento.id))
                        if len(cont) > 2:
                            raise InterfaceError(
                                'Mais de dois equipamentos foram selecionados')

                    if sw_router.ligacao_front is not None:
                        ligacao_front_id = sw_router.ligacao_front.id
                    else:
                        ligacao_front_id = None
                    if sw_router.ligacao_back is not None:
                        ligacao_back_id = sw_router.ligacao_back.id
                    else:
                        ligacao_back_id = None

                    Interface.update(user,
                                     sw_router.id,
                                     interface=sw_router.interface,
                                     protegida=sw_router.protegida,
                                     descricao=sw_router.descricao,
                                     ligacao_front_id=ligacao_front_id,
                                     ligacao_back_id=ligacao_back_id,
                                     tipo=int_type,
                                     vlan_nativa=vlan_nativa,
                                     channel=port_channel)

                    if 'trunk' in int_type.tipo:
                        interface_list = EnvironmentInterface.objects.all().filter(interface=sw_router.id)
                        for int_env in interface_list:
                            int_env.delete()
                        if type(envs_vlans) is not list:
                            d = envs_vlans
                            envs_vlans = []
                            envs_vlans.append(d)
                        for i in envs_vlans:
                            amb = amb.get_by_pk(int(i.get('env')))
                            amb_int = EnvironmentInterface()
                            amb_int.interface = sw_router
                            amb_int.ambiente = amb
                            try:
                                range_vlans = i.get('vlans')
                            except:
                                range_vlans = None
                                pass
                            if range_vlans:
                                api_interface_facade.verificar_vlan_range(
                                    amb, range_vlans)
                                amb_int.vlans = range_vlans
                            amb_int.create(user)

            port_channel_map = dict()
            port_channel_map['port_channel'] = port_channel

            return self.response(dumps_networkapi({'port_channel': port_channel_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)