def save_device_model(self): """ If nodeshot.networking.hardware module is installed Get device model info and store in DB """ if HARDWARE_INSTALLED: # try getting device model from db try: device_model = DeviceModel.objects.filter(name=self.get_device_model())[0] # if it does not exist create it except IndexError as e: try: manufacturer = Manufacturer.objects.filter(name__icontains='ubiquiti')[0] device_model = DeviceModel( manufacturer=manufacturer, name=self.get_device_model() ) device_model.ram = self.get_device_RAM() except IndexError as e: device_model = False # create relation between device model and device if device_model: device_model.save() rel = DeviceToModelRel(device=self.device, model=device_model) rel.save()
def __create_device(self): """ creates device, internal use only """ # retrieve netengine dictionary from memory or from network device_dict = getattr(self, 'netengine_dict', self.netengine.to_dict()) device = Device() device.node_id = self.node_id device.name = device_dict['name'] device.type = device_dict['type'] device.status = DEVICE_STATUS.get('reachable') device.os = device_dict['os'] device.os_version = device_dict['os_version'] # this is the first time the device is seen by the system because we are just adding it device.first_seen = now() # and is also the latest device.last_seen = now() device.full_clean() device.save() # add routing protocols for routing_protocol in device_dict['routing_protocols']: # retrieve routing protocol from DB try: rp = RoutingProtocol.objects.filter( name__iexact=routing_protocol['name'], version__iexact=routing_protocol['version'] )[0] # create if doesn't exist yet except IndexError: rp = RoutingProtocol( name=routing_protocol['name'], version=routing_protocol['version'] ) rp.full_clean() rp.save() # add to device device.routing_protocols.add(rp) for interface in device_dict['interfaces']: interface_object = False vap_object = False # create interface depending on type if interface['type'] == 'ethernet': interface_object = Ethernet(**{ 'device': device, 'name': interface['name'], 'mac': interface['mac_address'], 'mtu': interface['mtu'], 'standard': interface['standard'], 'duplex': interface['duplex'], 'tx_rate': interface['tx_rate'], 'rx_rate': interface['rx_rate'] }) elif interface['type'] == 'wireless': interface_object = Wireless(**{ 'device': device, 'name': interface['name'], 'mac': interface['mac_address'], 'mtu': interface['mtu'], 'mode': interface['mode'], 'standard': interface['standard'], 'channel': interface['channel'], 'channel_width': interface['channel_width'], 'output_power': interface['output_power'], 'dbm': interface['dbm'], 'noise': interface['noise'], 'tx_rate': interface['tx_rate'], 'rx_rate': interface['rx_rate'] }) for vap in interface['vap']: vap_object = Vap( essid=vap['essid'], bssid=vap['bssid'], encryption=vap['encryption'] ) if interface_object: interface_object.full_clean() interface_object.save() if vap_object: vap_object.interface = interface_object vap_object.full_clean() vap_object.save() for ip in interface['ip']: ip_object = Ip(**{ 'interface': interface_object, 'address': ip['address'], }) ip_object.full_clean() ip_object.save() if HARDWARE_INSTALLED: # try getting device model from db try: device_model = DeviceModel.objects.filter(name__iexact=device_dict['model'])[0] # if it does not exist create it except IndexError as e: # try getting manufacturer from DB try: manufacturer = Manufacturer.objects.filter(name__iexact=device_dict['manufacturer'])[0] # or create except IndexError as e: manufacturer = Manufacturer(name=device_dict['manufacturer']) manufacturer.full_clean() manufacturer.save() device_model = DeviceModel( manufacturer=manufacturer, name=device_dict['model'] ) device_model.ram = device_dict['RAM_total'] device_model.full_clean() device_model.save() # create relation between device model and device rel = DeviceToModelRel(device=device, model=device_model) rel.full_clean() rel.save() return device
def __create_device(self): """ creates device, internal use only """ # retrieve netengine dictionary from memory or from network device_dict = getattr(self, 'netengine_dict', self.netengine.to_dict()) device = Device() device.node_id = self.node_id device.name = device_dict['name'] device.type = device_dict['type'] device.status = DEVICE_STATUS.get('reachable') device.os = device_dict['os'] device.os_version = device_dict['os_version'] # this is the first time the device is seen by the system because we are just adding it device.first_seen = now() # and is also the latest device.last_seen = now() device.full_clean() device.save() # add routing protocols for routing_protocol in device_dict['routing_protocols']: # retrieve routing protocol from DB try: rp = RoutingProtocol.objects.filter( name__iexact=routing_protocol['name'], version__iexact=routing_protocol['version'])[0] # create if doesn't exist yet except IndexError: rp = RoutingProtocol(name=routing_protocol['name'], version=routing_protocol['version']) rp.full_clean() rp.save() # add to device device.routing_protocols.add(rp) for interface in device_dict['interfaces']: interface_object = False vap_object = False # create interface depending on type if interface['type'] == 'ethernet': interface_object = Ethernet( **{ 'device': device, 'name': interface['name'], 'mac': interface['mac_address'], 'mtu': interface['mtu'], 'standard': interface['standard'], 'duplex': interface['duplex'], 'tx_rate': interface['tx_rate'], 'rx_rate': interface['rx_rate'] }) elif interface['type'] == 'wireless': interface_object = Wireless( **{ 'device': device, 'name': interface['name'], 'mac': interface['mac_address'], 'mtu': interface['mtu'], 'mode': interface['mode'], 'standard': interface['standard'], 'channel': interface['channel'], 'channel_width': interface['channel_width'], 'output_power': interface['output_power'], 'dbm': interface['dbm'], 'noise': interface['noise'], 'tx_rate': interface['tx_rate'], 'rx_rate': interface['rx_rate'] }) for vap in interface['vap']: vap_object = Vap(essid=vap['essid'], bssid=vap['bssid'], encryption=vap['encryption']) if interface_object: interface_object.full_clean() interface_object.save() if vap_object: vap_object.interface = interface_object vap_object.full_clean() vap_object.save() for ip in interface['ip']: ip_object = Ip(**{ 'interface': interface_object, 'address': ip['address'], }) ip_object.full_clean() ip_object.save() if HARDWARE_INSTALLED: # try getting device model from db try: device_model = DeviceModel.objects.filter( name__iexact=device_dict['model'])[0] # if it does not exist create it except IndexError as e: # try getting manufacturer from DB try: manufacturer = Manufacturer.objects.filter( name__iexact=device_dict['manufacturer'])[0] # or create except IndexError as e: manufacturer = Manufacturer( name=device_dict['manufacturer']) manufacturer.full_clean() manufacturer.save() device_model = DeviceModel(manufacturer=manufacturer, name=device_dict['model']) device_model.ram = device_dict['RAM_total'] device_model.full_clean() device_model.save() # create relation between device model and device rel = DeviceToModelRel(device=device, model=device_model) rel.full_clean() rel.save() return device