def handle_post(self, request, user, *args, **kwargs): '''Handles POST requests to add an IP and associate it to an equipment. URL: ipv4/ ''' self.log.info('Add an IP and associate it to an equipment') try: # Business Validations # 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: msg = u'There is no value to the networkapi tag of XML request.' self.log.error(msg) return self.response_error(3, msg) ip_map = networkapi_map.get('ip') if ip_map is None: msg = u'There is no value to the ip tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data equip_id = ip_map.get('id_equipment') network_ipv4_id = ip_map.get('id_network_ipv4') description = ip_map.get('description') # Valid equip_id if not is_valid_int_greater_zero_param(equip_id): self.log.error( u'Parameter equip_id is invalid. Value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) # Valid network_ipv4_id if not is_valid_int_greater_zero_param(network_ipv4_id): self.log.error( u'Parameter network_ipv4_id is invalid. Value: %s.', network_ipv4_id) raise InvalidValueError( None, 'network_ipv4_id', network_ipv4_id) # Description can NOT be greater than 100 if not is_valid_string_maxsize(description, 100) or not is_valid_string_minsize(description, 3): self.log.error( u'Parameter descricao is invalid. Value: %s.', description) raise InvalidValueError(None, 'descricao', description) # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # Business Rules # New IP ip = Ip() ip.descricao = description # Persist ip.create(user, equip_id, network_ipv4_id, True) # Generate return map ip_map = dict() ip_map['id'] = ip.id ip_map['id_redeipv4'] = ip.networkipv4.id ip_map['oct4'] = ip.oct4 ip_map['oct3'] = ip.oct3 ip_map['oct2'] = ip.oct2 ip_map['oct1'] = ip.oct1 ip_map['descricao'] = ip.descricao return self.response(dumps_networkapi({'ip': ip_map})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def insert_ip(ip_map, user): '''Insere um IP e o relacionamento entre o IP e o equipamento. @param ip_map: Map com as chaves: id_equipamento, id_vlan e descricao @param user: Usuário autenticado na API. @return Em caso de erro retorna a tupla: (código da mensagem de erro, argumento01, argumento02, ...) Em caso de sucesso retorna a tupla: (0, <mapa com os dados do IP>) @raise VlanNotFoundError: VLAN não cadastrada. @raise VlanError: Falha ao pesquisar a VLAN. @raise EquipamentoNotFoundError: Equipamento não cadastrado. @raise EquipamentoError: Falha ao pesquisar o Equipamento. @raise IpNotAvailableError: Não existe um IP disponível para a VLAN. @raise IpError: Falha ao inserir no banco de dados. @raise UserNotAuthorizedError: Usuário sem autorização para executar a operação. ''' log = logging.getLogger('insert_ip') equip_id = ip_map.get('id_equipamento') if not is_valid_int_greater_zero_param(equip_id): log.error(u'The equip_id parameter is not a valid value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) else: equip_id = int(equip_id) if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'Usuário não tem permissão para executar a operação.') vlan_id = ip_map.get('id_vlan') if not is_valid_int_greater_zero_param(vlan_id): log.error(u'The vlan_id parameter is not a valid value: %s.', vlan_id) raise InvalidValueError(None, 'vlan_id', vlan_id) else: vlan_id = int(vlan_id) desc_ip = ip_map.get('descricao') if desc_ip is not None: if not is_valid_string_maxsize( desc_ip, 100) or not is_valid_string_minsize(desc_ip, 3): log.error(u'Parameter desc_ip is invalid. Value: %s.', desc_ip) raise InvalidValueError(None, 'desc_ip', desc_ip) ip = Ip() ip.descricao = desc_ip ip.create(user, equip_id, vlan_id, False) ip_map = dict() ip_map['id'] = ip.id ip_map['id_redeipv4'] = ip.networkipv4.id ip_map['oct4'] = ip.oct4 ip_map['oct3'] = ip.oct3 ip_map['oct2'] = ip.oct2 ip_map['oct1'] = ip.oct1 ip_map['descricao'] = ip.descricao return 0, ip_map
def insert_ip(ip_map, user): '''Insere um IP e o relacionamento entre o IP e o equipamento. @param ip_map: Map com as chaves: id_equipamento, id_vlan e descricao @param user: Usuário autenticado na API. @return Em caso de erro retorna a tupla: (código da mensagem de erro, argumento01, argumento02, ...) Em caso de sucesso retorna a tupla: (0, <mapa com os dados do IP>) @raise VlanNotFoundError: VLAN não cadastrada. @raise VlanError: Falha ao pesquisar a VLAN. @raise EquipamentoNotFoundError: Equipamento não cadastrado. @raise EquipamentoError: Falha ao pesquisar o Equipamento. @raise IpNotAvailableError: Não existe um IP disponível para a VLAN. @raise IpError: Falha ao inserir no banco de dados. @raise UserNotAuthorizedError: Usuário sem autorização para executar a operação. ''' log = logging.getLogger('insert_ip') equip_id = ip_map.get('id_equipamento') if not is_valid_int_greater_zero_param(equip_id): log.error( u'The equip_id parameter is not a valid value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) else: equip_id = int(equip_id) if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'Usuário não tem permissão para executar a operação.') vlan_id = ip_map.get('id_vlan') if not is_valid_int_greater_zero_param(vlan_id): log.error(u'The vlan_id parameter is not a valid value: %s.', vlan_id) raise InvalidValueError(None, 'vlan_id', vlan_id) else: vlan_id = int(vlan_id) desc_ip = ip_map.get('descricao') if desc_ip is not None: if not is_valid_string_maxsize(desc_ip, 100) or not is_valid_string_minsize(desc_ip, 3): log.error(u'Parameter desc_ip is invalid. Value: %s.', desc_ip) raise InvalidValueError(None, 'desc_ip', desc_ip) ip = Ip() ip.descricao = desc_ip ip.create(user, equip_id, vlan_id, False) ip_map = dict() ip_map['id'] = ip.id ip_map['id_redeipv4'] = ip.networkipv4.id ip_map['oct4'] = ip.oct4 ip_map['oct3'] = ip.oct3 ip_map['oct2'] = ip.oct2 ip_map['oct1'] = ip.oct1 ip_map['descricao'] = ip.descricao return 0, ip_map