Source code for networkapiclient.Interface

# -*- coding:utf-8 -*-
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import urllib

from networkapiclient.exception import InvalidParameterError
from networkapiclient.GenericClient import GenericClient
from networkapiclient.utils import get_list_map
from networkapiclient.utils import is_valid_0_1
from networkapiclient.utils import is_valid_int_param


[docs]class Interface(GenericClient): def __init__(self, networkapi_url, user, password, user_ldap=None): """Class constructor receives parameters to connect to the networkAPI. :param networkapi_url: URL to access the network API. :param user: User for authentication. :param password: Password for authentication. """ super( Interface, self).__init__( networkapi_url, user, password, user_ldap)
[docs] def listar_por_equipamento(self, id_equipamento): """List all interfaces of an equipment. :param id_equipamento: Equipment identifier. :return: Dictionary with the following: :: {'interface': [{'protegida': < protegida >, 'nome': < nome >, 'id_ligacao_front': < id_ligacao_front >, 'id_equipamento': < id_equipamento >, 'id': < id >, 'descricao': < descricao >, 'id_ligacao_back': < id_ligacao_back >}, ... other interfaces ...]} :raise InvalidParameterError: Equipment identifier is invalid or none. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_equipamento): raise InvalidParameterError( u'Equipment id is invalid or was not informed.') url = 'interface/equipamento/' + str(id_equipamento) + '/' code, map = self.submit(None, 'GET', url) key = 'interface' return get_list_map(self.response(code, map, [key]), key)
[docs] def list_all_by_equip(self, id_equipamento): """List all interfaces of an equipment. :param id_equipamento: Equipment identifier. :return: Following dictionary: :: {'interfaces': [ {'id': < id >, 'interface': < interface >, 'descricao': < descricao >, 'protegida': < protegida >, 'tipo_equip': < id_tipo_equipamento >, 'equipamento': < id_equipamento >, 'equipamento_nome': < nome_equipamento > 'ligacao_front': < id_ligacao_front >, 'nome_ligacao_front': < interface_name >, 'nome_equip_l_front': < equipment_name >, 'ligacao_back': < id_ligacao_back >, 'nome_ligacao_back': < interface_name >, 'nome_equip_l_back': < equipment_name > }, ... other interfaces ...]} :raise InvalidParameterError: Equipment identifier is invalid or none. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_equipamento): raise InvalidParameterError( u'Equipment id is invalid or was not informed.') url = 'interface/equipment/' + str(id_equipamento) + '/' code, map = self.submit(None, 'GET', url) key = 'interfaces' return get_list_map(self.response(code, map, [key]), key)
[docs] def get_by_id(self, id_interface): """Get an interface by id. :param id_interface: Interface identifier. :return: Following dictionary: :: {'interface': {'id': < id >, 'interface': < interface >, 'descricao': < descricao >, 'protegida': < protegida >, 'tipo_equip': < id_tipo_equipamento >, 'equipamento': < id_equipamento >, 'equipamento_nome': < nome_equipamento > 'ligacao_front': < id_ligacao_front >, 'nome_ligacao_front': < interface_name >, 'nome_equip_l_front': < equipment_name >, 'ligacao_back': < id_ligacao_back >, 'nome_ligacao_back': < interface_name >, 'nome_equip_l_back': < equipment_name > }} :raise InvalidParameterError: Interface identifier is invalid or none. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_interface): raise InvalidParameterError( u'Interface id is invalid or was not informed.') url = 'interface/' + str(id_interface) + '/get/' code, map = self.submit(None, 'GET', url) return self.response(code, map)
[docs] def inserir( self, nome, protegida, descricao, id_ligacao_front, id_ligacao_back, id_equipamento, tipo=None, vlan=None): """Insert new interface for an equipment. :param nome: Interface name. :param protegida: Indication of protected ('0' or '1'). :param descricao: Interface description. :param id_ligacao_front: Front end link interface identifier. :param id_ligacao_back: Back end link interface identifier. :param id_equipamento: Equipment identifier. :return: Dictionary with the following: {'interface': {'id': < id >}} :raise EquipamentoNaoExisteError: Equipment does not exist. :raise InvalidParameterError: The parameters nome, protegida and/or equipment id are none or invalid. :raise NomeInterfaceDuplicadoParaEquipamentoError: There is already an interface with this name for this equipment. :raise InterfaceNaoExisteError: Front link interface and/or back link interface doesn't exist. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ interface_map = dict() interface_map['nome'] = nome interface_map['protegida'] = protegida interface_map['descricao'] = descricao interface_map['id_ligacao_front'] = id_ligacao_front interface_map['id_ligacao_back'] = id_ligacao_back interface_map['id_equipamento'] = id_equipamento interface_map['tipo'] = tipo interface_map['vlan'] = vlan code, xml = self.submit( {'interface': interface_map}, 'POST', 'interface/') return self.response(code, xml)
[docs] def alterar( self, id_interface, nome, protegida, descricao, id_ligacao_front, id_ligacao_back, tipo=None, vlan=None): """Edit an interface by its identifier. Equipment identifier is not changed. :param nome: Interface name. :param protegida: Indication of protected ('0' or '1'). :param descricao: Interface description. :param id_ligacao_front: Front end link interface identifier. :param id_ligacao_back: Back end link interface identifier. :param id_interface: Interface identifier. :return: None :raise InvalidParameterError: The parameters interface id, nome and protegida are none or invalid. :raise NomeInterfaceDuplicadoParaEquipamentoError: There is already an interface with this name for this equipment. :raise InterfaceNaoExisteError: Front link interface and/or back link interface doesn't exist. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_interface): raise InvalidParameterError( u'Interface id is invalid or was not informed.') url = 'interface/' + str(id_interface) + '/' interface_map = dict() interface_map['nome'] = nome interface_map['protegida'] = protegida interface_map['descricao'] = descricao interface_map['id_ligacao_front'] = id_ligacao_front interface_map['id_ligacao_back'] = id_ligacao_back interface_map['tipo'] = tipo interface_map['vlan'] = vlan code, xml = self.submit({'interface': interface_map}, 'PUT', url) return self.response(code, xml)
[docs] def remover(self, id_interface): """Remove an interface by its identifier. :param id_interface: Interface identifier. :return: None :raise InterfaceNaoExisteError: Interface doesn't exist. :raise InterfaceError: Interface is linked to another interface. :raise InvalidParameterError: The interface identifier is invalid or none. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_interface): raise InvalidParameterError( u'Interface id is invalid or was not informed.') url = 'interface/' + str(id_interface) + '/' code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)
[docs] def remove_connection(self, id_interface, back_or_front): """ Remove a connection between two interfaces :param id_interface: One side of relation :param back_or_front: This side of relation is back(0) or front(1) :return: None :raise InterfaceInvalidBackFrontError: Front or Back of interfaces not match to remove connection :raise InvalidParameterError: Interface id or back or front indicator is none or invalid. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ msg_err = u'Parameter %s is invalid. Value: %s.' if not is_valid_0_1(back_or_front): raise InvalidParameterError( msg_err % ('back_or_front', back_or_front)) if not is_valid_int_param(id_interface): raise InvalidParameterError( msg_err % ('id_interface', id_interface)) url = 'interface/%s/%s/' % (str(id_interface), str(back_or_front)) code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)
[docs] def listar_ligacoes(self, nome_interface, id_equipamento): """List interfaces linked to back and front of specified interface. :param nome_interface: Interface name. :param id_equipamento: Equipment identifier. :return: Dictionary with the following: :: {'interface': [{'protegida': < protegida >, 'nome': < nome >, 'id_ligacao_front': < id_ligacao_front >, 'id_equipamento': < id_equipamento >, 'id': < id >, 'descricao': < descricao >, 'id_ligacao_back': < id_ligacao_back >}, ... other interfaces ...]} :raise InterfaceNaoExisteError: Interface doesn't exist or is not associated with this equipment. :raise EquipamentoNaoExisteError: Equipment doesn't exist. :raise InvalidParameterError: Interface name and/or equipment identifier are none or invalid. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_equipamento): raise InvalidParameterError( u'Equipment identifier is none or was not informed.') if (nome_interface is None) or (nome_interface == ''): raise InvalidParameterError(u'Interface name was not informed.') url = 'interface/' + \ urllib.quote(nome_interface) + '/equipamento/' + \ str(id_equipamento) + '/' code, map = self.submit(None, 'GET', url) key = 'interface' return get_list_map(self.response(code, map, [key]), key)
[docs] def list_connections(self, nome_interface, id_equipamento): """List interfaces linked to back and front of specified interface. :param nome_interface: Interface name. :param id_equipamento: Equipment identifier. :return: Dictionary with the following: :: {'interfaces':[ {'id': < id >, 'interface': < nome >, 'descricao': < descricao >, 'protegida': < protegida >, 'equipamento': < id_equipamento >, 'tipo_equip': < id_tipo_equipamento >, 'ligacao_front': < id_ligacao_front >, 'nome_ligacao_front': < interface_name >, 'nome_equip_l_front': < equipment_name >, 'ligacao_back': < id_ligacao_back >, 'nome_ligacao_back': < interface_name >, 'nome_equip_l_back': < equipment_name > }, ... other interfaces ...]} :raise InterfaceNaoExisteError: Interface doesn't exist or is not associated with this equipment. :raise EquipamentoNaoExisteError: Equipment doesn't exist. :raise InvalidParameterError: Interface name and/or equipment identifier are none or invalid. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(id_equipamento): raise InvalidParameterError( u'Equipment identifier is none or was not informed.') if (nome_interface is None) or (nome_interface == ''): raise InvalidParameterError(u'Interface name was not informed.') # Temporário, remover. Fazer de outra forma. nome_interface = nome_interface.replace('/', 's2it_replace') url = 'interface/' + \ urllib.quote(nome_interface) + '/equipment/' + \ str(id_equipamento) + '/' code, map = self.submit(None, 'GET', url) key = 'interfaces' return get_list_map(self.response(code, map, [key]), key)
[docs] def listar_switch_router(self, id_equipamento): url = 'int/getbyidequip/' + str(id_equipamento) + '/' code, xml = self.submit(None, 'GET', url) key = 'interfaces' return get_list_map(self.response(code, xml, [key]), key)
[docs] def list_all_interface_types(self): url = 'interfacetype/get-type/' code, xml = self.submit(None, 'GET', url) key = 'tipo_interface' return get_list_map(self.response(code, xml, [key]), key)
[docs] def associar_ambiente(self, ambiente, interface): interface_map = dict() interface_map['ambiente'] = ambiente interface_map['interface'] = interface code, xml = self.submit( {'interface': interface_map}, 'POST', 'int/associar-ambiente/') return self.response(code, xml)
[docs] def dissociar(self, interface): interface_map = dict() interface_map['interface'] = interface code, xml = self.submit( {'interface': interface_map}, 'DELETE', 'int/associar-ambiente/') return self.response(code, xml)
[docs] def inserir_channel(self, interfaces, nome, lacp, int_type, vlan, envs): channel_map = dict() channel_map['interfaces'] = interfaces channel_map['nome'] = nome channel_map['lacp'] = lacp channel_map['int_type'] = int_type channel_map['vlan'] = vlan channel_map['envs'] = envs code, xml = self.submit( {'channel': channel_map}, 'POST', 'channel/inserir/') return self.response(code, xml)
[docs] def get_env_by_id(self, id_interface): if not is_valid_int_param(id_interface): raise InvalidParameterError( u'Interface id is invalid or was not informed.') url = 'int/get-env-by-interface/' + str(id_interface) code, map = self.submit(None, 'GET', url) return self.response(code, map)
[docs] def delete_channel(self, channel_name): url = 'channel/delete/' + str(channel_name) + '/' code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)
[docs] def get_interface_by_channel(self, channel_name, equip_name): url = 'interface/get-by-channel/' + \ str(channel_name) + '/' + str(equip_name) + '/' code, map = self.submit(None, 'GET', url) return self.response(code, map)
[docs] def editar_channel(self, id_channel, nome, lacp, int_type, vlan, envs, ids_interface): channel_map = dict() channel_map['id_channel'] = id_channel channel_map['nome'] = nome channel_map['lacp'] = lacp channel_map['int_type'] = int_type channel_map['vlan'] = vlan channel_map['envs'] = envs channel_map['ids_interface'] = ids_interface code, xml = self.submit( {'channel': channel_map}, 'PUT', 'channel/editar/') return self.response(code, xml)
[docs] def list_available_interfaces(self, channel_name, id_equip): url = 'interface/get/' + str(channel_name) + '/' + str(id_equip) + '/' code, map = self.submit(None, 'GET', url) return self.response(code, map)