def post(self, request, format=None): serializer = PoolSerializer(data=request.data) if serializer.is_valid(): col_object = Pool() col_object.type = serializer.data['type'] col_object.name = serializer.data['name'] col_object.scope = serializer.data['scope'] col_object.save() type = serializer.data['type'] coll_range=[{'start':0,'end':1}] if type == 'AutoGenerate': start = 10 end = 20 for flag in range(start,end + 1): coll = PoolDetail() coll.index = col_object coll.value = flag coll.save() coll_range[0]['start'] = start coll_range[0]['end'] = end col_object.range = json.dumps(coll_range) else: col_object.range = json.dumps(serializer.data['range']) col_object.save() if type == 'Integer' or type =='Vlan': for i in range(0,len(serializer.data['range'])): start = int(serializer.data['range'][i]['start']) end = int(serializer.data['range'][i]['end']) for flag in range(start,end + 1): coll = PoolDetail() coll.index = col_object coll.value = flag coll.save() if type == 'IP' or type == 'MgmtIP' or type == 'IPv6': for i in range(0,len(serializer.data['range'])): start_ip = IPNetwork(str(serializer.data['range'][i]['start'])) end_ip = IPNetwork(str(serializer.data['range'][i]['end'])) for ip_val in range (start_ip.ip,end_ip.ip+1): coll = PoolDetail() coll.index = col_object coll.value = IPAddress(ip_val).__str__()+"/"+start_ip.prefixlen.__str__() coll.save() # if type == 'IPv6': # start_ip = IPNetwork(str(serializer.data['range'][0]['start'])) # end_ip = IPNetwork(str(serializer.data['range'][0]['end'])) # for ip_val in range (start_ip.ip,end_ip.ip+1): # coll = PoolDetail() # coll.index = col_object # coll.value = IPAddress(ip_val).__str__()+"/"+start_ip.prefixlen.__str__() # coll.save() get_coll_detail = PoolDetail.objects.filter(index = col_object.id,assigned ='') available = len(get_coll_detail) col_object.available = available col_object.used = len(PoolDetail.objects.filter(index = col_object.id)) - available col_object.save() serializer = PoolGetSerializer(col_object) collect_details = serializer.data collect_details['range'] = json.loads(collect_details['range']) return Response(collect_details, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self,request,id,format=None): col_object = self.get_object(id) serializer = PoolGetSerializer(col_object) collect_details = serializer.data collect_details['range'] = json.loads(collect_details['range']) if request.data['scope'] != self.get_object(id).scope: logger.error("Edit for pool failed: Scope change is not allowed") return Response(status=status.HTTP_400_BAD_REQUEST) if request.data['name'] == self.get_object(id).name: serializer = PoolPutSerializer(data=request.data) else: serializer = PoolSerializer(data = request.data) if serializer.is_valid(): type = serializer.data['type'] col_object.name = serializer.data['name'] if type == 'AutoGenerate': return Response(status=status.HTTP_400_BAD_REQUEST) if type == 'Integer' or type =='Vlan': for i in range(0,len(serializer.data['range'])): start = int(serializer.data['range'][i]['start']) end = int(serializer.data['range'][i]['end']) diff = end - start for flag in range(start,end + 1): coll = PoolDetail() coll.index = col_object coll.value = flag coll.save() collect_details['range'].append(serializer.data['range'][i]) col_object.available = int(col_object.available) + diff + 1 col_object.range = json.dumps(collect_details['range']) col_object.save() serializer = PoolGetSerializer(col_object) collect_details = serializer.data collect_details['range'] = json.loads(collect_details['range']) return Response(collect_details, status=status.HTTP_206_PARTIAL_CONTENT) if type =='IP' or type =='MgmtIP' or type =='IPv6': for i in range(0,len(serializer.data['range'])): start_ip = IPNetwork(str(serializer.data['range'][0]['start'])) end_ip = IPNetwork(str(serializer.data['range'][0]['end'])) for ip_val in range (start_ip.ip,end_ip.ip+1): coll = PoolDetail() coll.index = col_object coll.value = IPAddress(ip_val).__str__()+"/"+start_ip.prefixlen.__str__() coll.save() diff = int(end_ip.ip-start_ip.ip) + 1 collect_details['range'].append(serializer.data['range'][i]) col_object.available = int(col_object.available) + diff col_object.range = json.dumps(collect_details['range']) col_object.save() serializer = PoolGetSerializer(col_object) collect_details = serializer.data collect_details['range'] = json.loads(collect_details['range']) return Response(collect_details, status=status.HTTP_206_PARTIAL_CONTENT) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)