def handle_get(self, request, user, *args, **kwargs): """Handles GET requests to get a ipv6. URLs: ipv6/get/id_ip6 """ try: # Commons Validations # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Valid id access id_ip = kwargs.get('id_ipv6') if not is_valid_int_greater_zero_param(id_ip): raise InvalidValueError(None, 'id_ip', id_ip) # Business Rules ip = Ipv6() ip = ip.get_by_pk(id_ip) EquipIps = [] mapa = dict() # lista = [] try: EquipIps = [] equipsIp = Ipv6Equipament.list_by_ip6(ip.id) for eIp in equipsIp: EquipIps.append(eIp) mapa[ip.id] = EquipIps # lista.append(mapa) except IpEquipmentNotFoundError: EquipIps.append(None) except IpError: EquipIps.append(None) network_map = dict() list_ips = [] lequips = [] lequips = [] ip_maps = dict() ip_maps['id'] = ip.id ip_maps['block1'] = ip.block1 ip_maps['block2'] = ip.block2 ip_maps['block3'] = ip.block3 ip_maps['block4'] = ip.block4 ip_maps['block5'] = ip.block5 ip_maps['block6'] = ip.block6 ip_maps['block7'] = ip.block7 ip_maps['block8'] = ip.block8 ip_maps['descricao'] = ip.description for equip in mapa.get(ip.id): equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ips.append(ip_maps) list_ips network_map['ips'] = list_ips # Return XML return self.response(dumps_networkapi(network_map)) except InvalidValueError, e: self.log.error( u'Parameter %s is invalid. Value: %s.', e.param, e.value) return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to add an IP6 and associate it to an equipment. URL: ipv6/save/ """ self.log.info('Add an IP6 and associate it to an equipment') try: # 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_map') 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_equip') network_ipv6_id = ip_map.get('id_net') description = ip_map.get('descricao') ip6 = ip_map.get('ip6') # 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_ipv6_id): self.log.error( u'Parameter network_ipv6_id is invalid. Value: %s.', network_ipv6_id) raise InvalidValueError(None, 'network_ipv6_id', network_ipv6_id) # Description can NOT be greater than 100 if not is_valid_string_maxsize(ip6, 39): self.log.error(u'Parameter ip6 is invalid. Value: %s.', ip6) raise InvalidValueError(None, 'ip6', ip6) if description is not None: if not is_valid_string_maxsize( description, 100) or not is_valid_string_minsize( description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', 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 ipv6 = Ipv6() net = NetworkIPv6.get_by_pk(network_ipv6_id) with distributedlock(LOCK_NETWORK_IPV6 % network_ipv6_id): # Caso haja erro para retornar o ip corretamente ip_error = ip6 ip6 = ip6.split(':') # Ip informado de maneira incorreta if len(ip6) is not 8: raise InvalidValueError(None, 'ip6', ip_error) ipv6.description = description ipv6.block1 = ip6[0] ipv6.block2 = ip6[1] ipv6.block3 = ip6[2] ipv6.block4 = ip6[3] ipv6.block5 = ip6[4] ipv6.block6 = ip6[5] ipv6.block7 = ip6[6] ipv6.block8 = ip6[7] # Persist equip = Equipamento.get_by_pk(equip_id) listaVlansDoEquip = [] for ipequip in equip.ipv6equipament_set.all(): vlan = ipequip.ip.networkipv6.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) for ipequip in equip.ipequipamento_set.all(): vlan = ipequip.ip.networkipv4.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) vlan_atual = net.vlan ambiente_aux = None vlan_aux = None for vlan in listaVlansDoEquip: if vlan.num_vlan == vlan_atual.num_vlan: if vlan.id != vlan_atual.id: # Filter case 3 - Vlans with same number cannot # share equipments ## flag_vlan_error = False # Filter testing if vlan.ambiente.filter is None or vlan_atual.ambiente.filter is None: flag_vlan_error = True else: # Test both environment's filters tp_equip_list_one = list() for fet in FilterEquipType.objects.filter( filter=vlan_atual.ambiente.filter.id): tp_equip_list_one.append(fet.equiptype) tp_equip_list_two = list() for fet in FilterEquipType.objects.filter( filter=vlan.ambiente.filter.id): tp_equip_list_two.append(fet.equiptype) if equip.tipo_equipamento not in tp_equip_list_one or equip.tipo_equipamento not in tp_equip_list_two: flag_vlan_error = True ## Filter case 3 - end ## if flag_vlan_error: vlan_aux = vlan ambiente_aux = vlan.ambiente nome_ambiente = '%s - %s - %s' % ( vlan.ambiente.divisao_dc.nome, vlan.ambiente.ambiente_logico.nome, vlan.ambiente.grupo_l3.nome) raise VlanNumberNotAvailableError( None, """O ip informado não pode ser cadastrado, pois o equipamento %s, faz parte do ambiente %s (id %s), que possui a Vlan de id %s, que também possui o número %s, e não é permitido que vlans que compartilhem o mesmo ambiente, por meio de equipamentos, possuam o mesmo número, edite o número de uma das Vlans ou adicione um filtro no ambiente para efetuar o cadastro desse IP no Equipamento Informado. """ % (equip.nome, nome_ambiente, ambiente_aux.id, vlan_aux.id, vlan_atual.num_vlan)) ipv6.save_ipv6(equip_id, user, net) list_ip = [] lequips = list() if ipv6.id is None: ipv6 = Ipv6.get_by_blocks_and_net(ipv6.block1, ipv6.block2, ipv6.block3, ipv6.block4, ipv6.block5, ipv6.block6, ipv6.block7, ipv6.block8, net.id) equips = Ipv6Equipament.list_by_ip6(ipv6.id) ip_maps = dict() ip_maps['id'] = ipv6.id ip_maps['block1'] = ipv6.block1 ip_maps['block2'] = ipv6.block2 ip_maps['block3'] = ipv6.block3 ip_maps['block4'] = ipv6.block4 ip_maps['block5'] = ipv6.block5 ip_maps['block6'] = ipv6.block6 ip_maps['block7'] = ipv6.block7 ip_maps['block8'] = ipv6.block8 ip_maps['descricao'] = ipv6.description list_id_equip = [] for equip in equips: list_id_equip.append(equip.equipamento.id) equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ip.append(ip_maps) network_map = dict() network_map['ipv6'] = list_ip # Delete vlan's cache destroy_cache_function([net.vlan_id]) # Delete equipment's cache destroy_cache_function(list_id_equip, True) return self.response(dumps_networkapi(network_map)) except IpRangeAlreadyAssociation, e: return self.response_error(347)
def handle_post(self, request, user, *args, **kwargs): '''Handles POST requests to add an IP6 and associate it to an equipment. URL: ipv6/save/ ''' self.log.info('Add an IP6 and associate it to an equipment') try: # 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_map') 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_equip') network_ipv6_id = ip_map.get('id_net') description = ip_map.get('descricao') ip6 = ip_map.get('ip6') # 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_ipv6_id): self.log.error( u'Parameter network_ipv6_id is invalid. Value: %s.', network_ipv6_id) raise InvalidValueError( None, 'network_ipv6_id', network_ipv6_id) # Description can NOT be greater than 100 if not is_valid_string_maxsize(ip6, 39): self.log.error(u'Parameter ip6 is invalid. Value: %s.', ip6) raise InvalidValueError(None, 'ip6', ip6) if description is not None: if not is_valid_string_maxsize(description, 100) or not is_valid_string_minsize(description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', 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 ipv6 = Ipv6() net = NetworkIPv6.get_by_pk(network_ipv6_id) with distributedlock(LOCK_NETWORK_IPV6 % network_ipv6_id): # Caso haja erro para retornar o ip corretamente ip_error = ip6 ip6 = ip6.split(":") # Ip informado de maneira incorreta if len(ip6) is not 8: raise InvalidValueError(None, 'ip6', ip_error) ipv6.description = description ipv6.block1 = ip6[0] ipv6.block2 = ip6[1] ipv6.block3 = ip6[2] ipv6.block4 = ip6[3] ipv6.block5 = ip6[4] ipv6.block6 = ip6[5] ipv6.block7 = ip6[6] ipv6.block8 = ip6[7] # Persist equip = Equipamento.get_by_pk(equip_id) listaVlansDoEquip = [] for ipequip in equip.ipv6equipament_set.all(): vlan = ipequip.ip.networkipv6.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) for ipequip in equip.ipequipamento_set.all(): vlan = ipequip.ip.networkipv4.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) vlan_atual = net.vlan ambiente_aux = None vlan_aux = None for vlan in listaVlansDoEquip: if vlan.num_vlan == vlan_atual.num_vlan: if vlan.id != vlan_atual.id: # Filter case 3 - Vlans with same number cannot # share equipments ## flag_vlan_error = False # Filter testing if vlan.ambiente.filter is None or vlan_atual.ambiente.filter is None: flag_vlan_error = True else: # Test both environment's filters tp_equip_list_one = list() for fet in FilterEquipType.objects.filter(filter=vlan_atual.ambiente.filter.id): tp_equip_list_one.append(fet.equiptype) tp_equip_list_two = list() for fet in FilterEquipType.objects.filter(filter=vlan.ambiente.filter.id): tp_equip_list_two.append(fet.equiptype) if equip.tipo_equipamento not in tp_equip_list_one or equip.tipo_equipamento not in tp_equip_list_two: flag_vlan_error = True ## Filter case 3 - end ## if flag_vlan_error: vlan_aux = vlan ambiente_aux = vlan.ambiente nome_ambiente = "%s - %s - %s" % ( vlan.ambiente.divisao_dc.nome, vlan.ambiente.ambiente_logico.nome, vlan.ambiente.grupo_l3.nome) raise VlanNumberNotAvailableError(None, '''O ip informado não pode ser cadastrado, pois o equipamento %s, faz parte do ambiente %s (id %s), que possui a Vlan de id %s, que também possui o número %s, e não é permitido que vlans que compartilhem o mesmo ambiente, por meio de equipamentos, possuam o mesmo número, edite o número de uma das Vlans ou adicione um filtro no ambiente para efetuar o cadastro desse IP no Equipamento Informado. ''' % (equip.nome, nome_ambiente, ambiente_aux.id, vlan_aux.id, vlan_atual.num_vlan)) ipv6.save_ipv6(equip_id, user, net) list_ip = [] lequips = list() if ipv6.id is None: ipv6 = Ipv6.get_by_blocks_and_net( ipv6.block1, ipv6.block2, ipv6.block3, ipv6.block4, ipv6.block5, ipv6.block6, ipv6.block7, ipv6.block8, net.id) equips = Ipv6Equipament.list_by_ip6(ipv6.id) ip_maps = dict() ip_maps['id'] = ipv6.id ip_maps['block1'] = ipv6.block1 ip_maps['block2'] = ipv6.block2 ip_maps['block3'] = ipv6.block3 ip_maps['block4'] = ipv6.block4 ip_maps['block5'] = ipv6.block5 ip_maps['block6'] = ipv6.block6 ip_maps['block7'] = ipv6.block7 ip_maps['block8'] = ipv6.block8 ip_maps['descricao'] = ipv6.description list_id_equip = [] for equip in equips: list_id_equip.append(equip.equipamento.id) equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ip.append(ip_maps) network_map = dict() network_map['ipv6'] = list_ip # Delete vlan's cache destroy_cache_function([net.vlan_id]) # Delete equipment's cache destroy_cache_function(list_id_equip, True) return self.response(dumps_networkapi(network_map)) except IpRangeAlreadyAssociation, e: return self.response_error(347)
def handle_get(self, request, user, *args, **kwargs): """Handles GET requests to list all network IPv6 by network ipv6 id. URLs: ip/id_network_ipv6/id_rede """ try: # Commons Validations # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Valid id access id_network = kwargs.get('id_rede') if not is_valid_int_greater_zero_param(id_network): raise InvalidValueError(None, 'id_rede', id_network) # Business Rules NetworkIPv6.get_by_pk(id_network) ips = Ipv6.list_by_network(id_network) try: len(ips) except Exception, e: raise InvalidValueError(None, 'id_rede', id_network) if ips == None or len(ips) <= 0: raise IpNotFoundError(305, id_network) EquipIps = [] mapa = dict() #lista = [] try: for ip in ips: EquipIps = [] equipsIp = Ipv6Equipament.list_by_ip6(ip.id) for eIp in equipsIp: EquipIps.append(eIp) mapa[ip.id] = EquipIps # lista.append(mapa)bora pegar cafe except IpEquipmentNotFoundError: EquipIps.append(None) except IpError: EquipIps.append(None) network_map = dict() list_ips = [] lequips = [] for ip in ips: lequips = [] ip_maps = dict() ip_maps['id'] = ip.id ip_maps['block1'] = ip.block1 ip_maps['block2'] = ip.block2 ip_maps['block3'] = ip.block3 ip_maps['block4'] = ip.block4 ip_maps['block5'] = ip.block5 ip_maps['block6'] = ip.block6 ip_maps['block7'] = ip.block7 ip_maps['block8'] = ip.block8 ip_maps['descricao'] = ip.description for equip in mapa.get(ip.id): equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ips.append(ip_maps) network_map['ips'] = list_ips network_map # Return XML return self.response(dumps_networkapi(network_map))
def handle_get(self, request, user, *args, **kwargs): """Handles GET requests to get a ipv6. URLs: ipv6/get/id_ip6 """ try: # Commons Validations # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Valid id access id_ip = kwargs.get('id_ipv6') if not is_valid_int_greater_zero_param(id_ip): raise InvalidValueError(None, 'id_ip', id_ip) # Business Rules ip = Ipv6() ip = ip.get_by_pk(id_ip) EquipIps = [] mapa = dict() #lista = [] try: EquipIps = [] equipsIp = Ipv6Equipament.list_by_ip6(ip.id) for eIp in equipsIp: EquipIps.append(eIp) mapa[ip.id] = EquipIps # lista.append(mapa) except IpEquipmentNotFoundError: EquipIps.append(None) except IpError: EquipIps.append(None) network_map = dict() list_ips = [] lequips = [] lequips = [] ip_maps = dict() ip_maps['id'] = ip.id ip_maps['block1'] = ip.block1 ip_maps['block2'] = ip.block2 ip_maps['block3'] = ip.block3 ip_maps['block4'] = ip.block4 ip_maps['block5'] = ip.block5 ip_maps['block6'] = ip.block6 ip_maps['block7'] = ip.block7 ip_maps['block8'] = ip.block8 ip_maps['descricao'] = ip.description for equip in mapa.get(ip.id): equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ips.append(ip_maps) list_ips network_map['ips'] = list_ips # Return XML return self.response(dumps_networkapi(network_map)) except InvalidValueError, e: self.log.error( u'Parameter %s is invalid. Value: %s.', e.param, e.value) return self.response_error(269, e.param, e.value)
def handle_get(self, request, user, *args, **kwargs): """Handles GET requests to list all network IPv6 by network ipv6 id. URLs: ip/id_network_ipv6/id_rede """ try: # Commons Validations # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Valid id access id_network = kwargs.get('id_rede') if not is_valid_int_greater_zero_param(id_network): raise InvalidValueError(None, 'id_rede', id_network) # Business Rules NetworkIPv6.get_by_pk(id_network) ips = Ipv6.list_by_network(id_network) try: len(ips) except Exception, e: raise InvalidValueError(None, 'id_rede', id_network) if ips is None or len(ips) <= 0: raise IpNotFoundError(305, id_network) EquipIps = [] mapa = dict() # lista = [] try: for ip in ips: EquipIps = [] equipsIp = Ipv6Equipament.list_by_ip6(ip.id) for eIp in equipsIp: EquipIps.append(eIp) mapa[ip.id] = EquipIps # lista.append(mapa)bora pegar cafe except IpEquipmentNotFoundError: EquipIps.append(None) except IpError: EquipIps.append(None) network_map = dict() list_ips = [] lequips = [] for ip in ips: lequips = [] ip_maps = dict() ip_maps['id'] = ip.id ip_maps['block1'] = ip.block1 ip_maps['block2'] = ip.block2 ip_maps['block3'] = ip.block3 ip_maps['block4'] = ip.block4 ip_maps['block5'] = ip.block5 ip_maps['block6'] = ip.block6 ip_maps['block7'] = ip.block7 ip_maps['block8'] = ip.block8 ip_maps['descricao'] = ip.description for equip in mapa.get(ip.id): equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ips.append(ip_maps) network_map['ips'] = list_ips network_map # Return XML return self.response(dumps_networkapi(network_map))