def put(self, request, id, format=None): fabric_obj = self.get_object(id) topology_id = fabric_obj.topology.id serializer = FabricPutSerializer(data=request.data) if serializer.is_valid(): if ((request.data['topology_id'] != topology_id) or (fabric_obj.name != request.data['name'])): logger.error("Failed to Update Fabric id " + str(id)\ +" cannot change base Topology or Fabric Name") else: topology = Topology.objects.get(id=request.data['topology_id']) topology_json = json.loads(topology.topology_json) me = RequestValidator(request.META) fabric_obj.user_id = me.user_is_exist().user_id fabric_obj.validate = request.data['validate'] fabric_obj.locked = request.data['locked'] fabric_obj.config_json = json.dumps(request.data['config_json']) fabric_obj.submit = request.data['submit'] fabric_obj.instance = request.data['instance'] if delete_fabric_rules(id): if (generate_fabric_rules(request.data['name'],\ request.data['instance'], fabric_obj, request.data['config_json'],\ topology_json)): logger.error("Failed to update Fabric id: " + str(id)) logger.info("Successfully update Fabric id: " + str(id)) serializer = FabricGetDetailSerializer(fabric_obj) resp = serializer.data resp['config_json'] = json.loads(resp['config_json']) fabric_obj.save() return Response(resp) else: logger.error("Failed to update Fabric id: " + str(id)) else: logger.error("Failed to delete Rules from fabric Rule DB for Fabric id: " + str(id)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, id, format=None): success = True resp = {} resp['Error'] = ' ' fabric_obj = self.get_object(id) topology_id = fabric_obj.topology.id serializer = FabricPutSerializer(data=request.data) if serializer.is_valid(): if ((request.data['topology_id'] != topology_id) or (fabric_obj.name != request.data['name'])): logger.error("Failed to Update Fabric id " + str(id)\ +" cannot change base Topology or Fabric Name") else: topology = Topology.objects.get(id=request.data['topology_id']) topology_json = json.loads(topology.topology_json) me = RequestValidator(request.META) fabric_obj.user_id = me.user_is_exist().user_id fabric_obj.validate = request.data['validate'] fabric_obj.locked = request.data['locked'] try: sysId_list = [] fabric_obj.system_id = json.dumps( request.data['system_id']) for swtch in request.data['system_id']: sysId_list.append(swtch['system_id']) dup_items = [ k for k, v in Counter(sysId_list).items() if v > 1 ] if len(dup_items) > 0: error_string = ','.join( str(item) for item in dup_items) resp[ 'Error'] = 'System id: ' + error_string + ' repeated.' logger.error(resp['Error']) return Response(resp, status=status.HTTP_400_BAD_REQUEST) except: fabric_obj.system_id = [] config_in_fabric = json.loads(fabric_obj.config_json) for config in config_in_fabric: config_obj = Configuration.objects.get( id=config['configuration_id']) config_obj.used -= 1 config_obj.save() fabric_obj.config_json = json.dumps( request.data['config_json']) for config in request.data['config_json']: config_obj = Configuration.objects.get( id=config['configuration_id']) config_obj.used += 1 config_obj.save() fabric_obj.submit = request.data['submit'] fabric_obj.instance = request.data['instance'] # filling discovery rule db try: dis_bulkObject_list = [] config_obj = request.data['config_json'] regex = fabric_obj.name + "(_)([1-9][0-9]*)(_)([a-zA-Z]*-[1-9])" for switch_systemId_info in request.data['system_id']: if not success: break switch_name = (re.search( regex, switch_systemId_info['name'])).group(4) replica_num = int( (re.search(regex, switch_systemId_info['name'])).group(2)) for config in config_obj: if switch_name == config['name']: discoveryrule_name = 'serial_' + switch_systemId_info[ 'system_id'] old_dis_rule_name = DiscoveryRule.objects.filter(fabric_id =fabric_obj.id).\ filter(switch_name=switch_systemId_info['name']) if old_dis_rule_name: try: find_obj = DiscoveryRule.objects.filter( name=discoveryrule_name) if find_obj: obj = DiscoveryRule.objects.get( name=discoveryrule_name) if obj.switch_name != switch_systemId_info[ 'name']: success = False if obj.fabric_id == fabric_obj.id: resp['Error'] = 'Serial id: '+switch_systemId_info['system_id']\ +' is repeated in this fabric' resp['Error'] = 'switch: '+obj.switch_name+' is assigned with: '\ +switch_systemId_info['system_id'] logger.error(resp['Error']) break except: pass try: dis_obj = DiscoveryRule.objects.get( switch_name=switch_systemId_info[ 'name']) if dis_obj.config_id != config[ 'configuration_id']: dis_obj.config_id = config[ 'configuration_id'] dis_bulkObject_list.append(dis_obj) # dis_obj.save() if dis_obj.name != discoveryrule_name: dis_obj.name = discoveryrule_name dis_obj.subrules = [ switch_systemId_info[ 'system_id'] ] dis_bulkObject_list.append(dis_obj) # dis_obj.save() except: pass else: dis_rule_obj = DiscoveryRule() dis_rule_obj.priority = 100 dis_rule_obj.name = discoveryrule_name dis_rule_obj.config_id = config[ 'configuration_id'] dis_rule_obj.match = 'serial_id' dis_rule_obj.subrules = [ switch_systemId_info['system_id'] ] dis_rule_obj.fabric_id = fabric_obj.id dis_rule_obj.replica_num = replica_num dis_rule_obj.switch_name = switch_systemId_info[ 'name'] dis_bulkObject_list.append(dis_obj) # saving objects as bulk at the end # dis_rule_obj.save() except: success = False logger.error( 'Failed to fill discoveryRule DB with fabric_id: ' + str(fabric_obj.id)) if success: if delete_fabric_rules(id): if (generate_fabric_rules(request.data['name'],\ request.data['instance'], fabric_obj, request.data['config_json'],\ topology_json)): logger.info("Successfully update Fabric id: " + str(id)) serializer = FabricGetDetailSerializer(fabric_obj) data = serializer.data data['config_json'] = json.loads( data['config_json']) try: data['system_id'] = json.loads( data['system_id']) except: data['system_id'] = [] for obj in dis_bulkObject_list: obj.save() fabric_obj.save() return Response(data) else: success = False resp['Error'] = 'Failed to update Fabric' logger.error("Failed to update Fabric id: " + str(id)) else: success = False resp['Error'] = 'Failed to update Fabric Rule DB' logger.error( "Failed to delete Rules from fabric Rule DB for Fabric id: " + str(id)) if not success: return Response(resp, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, id, format=None): success = True resp = {} resp['Error'] = ' ' fabric_obj = self.get_object(id) topology_id = fabric_obj.topology.id serializer = FabricPutSerializer(data=request.data) if serializer.is_valid(): if ((request.data['topology_id'] != topology_id) or (fabric_obj.name != request.data['name'])): logger.error("Failed to Update Fabric id " + str(id)\ +" cannot change base Topology or Fabric Name") else: topology = Topology.objects.get(id=request.data['topology_id']) topology_json = json.loads(topology.topology_json) me = RequestValidator(request.META) fabric_obj.user_id = me.user_is_exist().user_id fabric_obj.validate = request.data['validate'] fabric_obj.locked = request.data['locked'] find_dup_data = {'system_id':['system_id','name'], 'config_json':['name']} for key,val in find_dup_data.iteritems(): for value in val: err_msg, isError = findDuplicate(request.data[key], value) if isError: resp['Error'] = err_msg return Response(resp, status=status.HTTP_400_BAD_REQUEST) err = uniqueSystenmId(request.data['system_id'], fabric_obj.id) if err !="": resp['Error'] = err return Response(resp, status=status.HTTP_400_BAD_REQUEST) config_in_fabric = json.loads(fabric_obj.config_json) for config in config_in_fabric: config_obj = Configuration.objects.get(id = config['configuration_id']) config_obj.used -= 1 config_obj.save() fabric_obj.config_json = json.dumps(request.data['config_json']) for config in request.data['config_json']: config_obj = Configuration.objects.get(id = config['configuration_id']) config_obj.used += 1 config_obj.save() fabric_obj.submit = request.data['submit'] fabric_obj.instance = request.data['instance'] # filling image details try: fabric_obj.image_details = json.dumps(request.data['image_details']) except: pass # filling profiles """ try: fabric_obj.profiles = json.loads(request.data['profiles']) except:pass """ # filling discovery rule db try: DiscoveryRule.objects.filter(fabric_id=id).delete() except: logger.error('Failed to delete Discovery rules with fabric_id:'+str(id)) resp['Error'] = ['Failed to delete Discovery rules'] return Response(resp, status=status.HTTP_400_BAD_REQUEST) success, resp, dis_bulk_obj = add_dis_rule(request.data,success,resp,fabric_obj.id) if success: if delete_fabric_rules(id): if (generate_fabric_rules(request.data['name'],\ request.data['instance'], fabric_obj, request.data['config_json'],\ topology_json)): logger.info("Successfully update Fabric id: " + str(id)) serializer = FabricGetDetailSerializer(fabric_obj) data = serializer.data data['config_json'] = json.loads(data['config_json']) try: data['system_id'] = json.loads(data['system_id']) except: data['system_id'] = [] try: # image details data['image_details'] = json.loads(data['image_details']) except: data['image_details'] = [] for obj in dis_bulk_obj: obj.save() fabric_obj.save() return Response(data) else: success = False resp['Error'] = 'Failed to update Fabric' logger.error("Failed to update Fabric id: " + str(id)) else: success = False resp['Error'] = 'Failed to update Fabric Rule DB' logger.error("Failed to delete Rules from fabric Rule DB for Fabric id: " + str(id)) if not success: return Response(resp, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, id, format=None): success = True resp = {} resp['Error'] = ' ' fabric_obj = self.get_object(id) topology_id = fabric_obj.topology.id serializer = FabricPutSerializer(data=request.data) if serializer.is_valid(): if ((request.data['topology_id'] != topology_id) or (fabric_obj.name != request.data['name'])): logger.error("Failed to Update Fabric id " + str(id)\ +" cannot change base Topology or Fabric Name") else: topology = Topology.objects.get(id=request.data['topology_id']) topology_json = json.loads(topology.topology_json) me = RequestValidator(request.META) fabric_obj.user_id = me.user_is_exist().user_id fabric_obj.validate = request.data['validate'] fabric_obj.locked = request.data['locked'] find_dup_data = { 'system_id': ['system_id', 'name'], 'config_json': ['name'] } for key, val in find_dup_data.iteritems(): for value in val: err_msg, isError = findDuplicate( request.data[key], value) if isError: resp['Error'] = err_msg return Response(resp, status=status.HTTP_400_BAD_REQUEST) err = uniqueSystenmId(request.data['system_id'], fabric_obj.id) if err != "": resp['Error'] = err return Response(resp, status=status.HTTP_400_BAD_REQUEST) config_in_fabric = json.loads(fabric_obj.config_json) for config in config_in_fabric: config_obj = Configuration.objects.get( id=config['configuration_id']) config_obj.used -= 1 config_obj.save() fabric_obj.config_json = json.dumps( request.data['config_json']) for config in request.data['config_json']: config_obj = Configuration.objects.get( id=config['configuration_id']) config_obj.used += 1 config_obj.save() fabric_obj.submit = request.data['submit'] fabric_obj.instance = request.data['instance'] # filling image details try: fabric_obj.image_details = json.dumps( request.data['image_details']) except: pass # filling profiles """ try: fabric_obj.profiles = json.loads(request.data['profiles']) except:pass """ # filling discovery rule db try: DiscoveryRule.objects.filter(fabric_id=id).delete() except: logger.error( 'Failed to delete Discovery rules with fabric_id:' + str(id)) resp['Error'] = ['Failed to delete Discovery rules'] return Response(resp, status=status.HTTP_400_BAD_REQUEST) success, resp, dis_bulk_obj = add_dis_rule( request.data, success, resp, fabric_obj.id) if success: if delete_fabric_rules(id): if (generate_fabric_rules(request.data['name'],\ request.data['instance'], fabric_obj, request.data['config_json'],\ topology_json)): logger.info("Successfully update Fabric id: " + str(id)) serializer = FabricGetDetailSerializer(fabric_obj) data = serializer.data data['config_json'] = json.loads( data['config_json']) try: data['system_id'] = json.loads( data['system_id']) except: data['system_id'] = [] try: # image details data['image_details'] = json.loads( data['image_details']) except: data['image_details'] = [] for obj in dis_bulk_obj: obj.save() fabric_obj.save() return Response(data) else: success = False resp['Error'] = 'Failed to update Fabric' logger.error("Failed to update Fabric id: " + str(id)) else: success = False resp['Error'] = 'Failed to update Fabric Rule DB' logger.error( "Failed to delete Rules from fabric Rule DB for Fabric id: " + str(id)) if not success: return Response(resp, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)