class TestDevice(unittest.TestCase): def setUp(self): # Create device for testing login, connectivity, etc. self.device = NetworkDeviceIOS(device_name,device_ip,device_user,device_pw) def test_attributes(self): print '\n**** Testing device object creation and values ****' # Test to make sure that the device object has correct values as set up self.assertEqual(self.device.name, device_name, "Incorrect device name") self.assertEqual(self.device.ip_address, device_ip, "Incorrect IP address") self.assertEqual(self.device.username, device_user, "Incorrect username") self.assertEqual(self.device.password, device_pw, "Incorrect password") def test_connect(self): print '\n**** Testing device object connectivity to real device ****' # Test that we can connect to the device (login) session = self.device.connect() self.assertNotEqual(session, 0, "Failed connection to device") self.device.disconnect() # Clean up the session
def read_devices_info(devices_file): devices_list = [] file = open(devices_file,'r') # Open the CSV file csv_devices = csv.reader(file) # Create the CSV reader for file # Iterate through all devices in our CSV file for device_info in csv_devices: # Create a device object with this data if device_info[1] == 'ios': device = NetworkDeviceIOS(device_info[0],device_info[2], device_info[3],device_info[4]) elif device_info[1] == 'ios-xr': device = NetworkDeviceXR(device_info[0],device_info[2], device_info[3],device_info[4]) else: device = NetworkDevice(device_info[0],device_info[2], device_info[3],device_info[4]) devices_list.append(device) # Append this device object to list return devices_list
def read_devices_info(devices_file): devices_list = [] # Open the device file with JSON data and read into string json_file = open(devices_file,'r') # open the JSON file json_device_data = json_file.read() # read in the JSON data from file # Convert JSAON string into Python data structure devices_info_list = json.loads(json_device_data) for device_info in devices_info_list: # Create a device object with this data if device_info['os'] == 'ios': device = NetworkDeviceIOS(device_info['name'],device_info['ip'], device_info['user'],device_info['password']) elif device_info['os'] == 'ios-xr': device = NetworkDeviceXR(device_info['name'],device_info['ip'], device_info['user'],device_info['password']) else: device = NetworkDevice(device_info['name'],device_info['ip'], device_info['user'],device_info['password']) devices_list.append(device) # Append this device object to list return devices_list
def get_device(devices_from_db, device_ip): for device_info in devices_from_db: # Create a device object with this data if device_info[1] == device_ip and device_info[2] == 'ios': return NetworkDeviceIOS(device_info[0],device_info[1], device_info[3],device_info[4]) return None
def read_devices_lista_CSV(devices_file, user, pw): logger.info('util: read_devices_lista_CSV arquivo: %s', devices_file) devices_list = [] try: file = open(devices_file, 'r') # Open the CSV file csv_devices = csv.reader(file) # Create the CSV reader for file # Iterate through all devices in our CSV file for device_info in csv_devices: device = NetworkDeviceIOS(device_info[0], device_info[1], user, pw) devices_list.append(device) logger.info('util: successful read_devices_lista_CSV arquivo: %s', devices_file) return devices_list except Exception as err: logger.error('util: read_devices_lista_CSV - Erro ao ler arquivo: %s', devices_file) print('Ocorreu um Erro: ' + str(err)) raise Exception('Erro em util.read_devices_lista_CSV')
def read_devices_info(devices_file): devices_list = [] file = open(devices_file, 'r') for line in file: device_info = line.strip().split(',') # Create a device object with this data if device_info[1] == 'ios': device = NetworkDeviceIOS(device_info[0], device_info[2], device_info[3], device_info[4]) else: device = NetworkDevice(device_info[0], device_info[2], device_info[3], device_info[4]) devices_list.append(device) return devices_list
def read_devices_filtra_CSV(devices_file, criterio, user, pw): logger.info('util: read_devices_filtra_CSV arquivo: %s', devices_file) devices_list = [] regex_criterio = re.compile(r'%s' % criterio, re.IGNORECASE) logger.debug('util: read_devices_filtra_CSV regex: %s', regex_criterio) try: file = open(devices_file, 'r') # Open the CSV file csv_devices = csv.reader(file) # Create the CSV reader for file # Iterate through all devices in our CSV file for device_info in csv_devices: if regex_criterio.search(device_info[0]) is not None: device = NetworkDeviceIOS(device_info[0], device_info[1], user, pw) devices_list.append(device) logger.info('util: successful read_devices_filtra_CSV arquivo: %s', devices_file) return devices_list except Exception as err: logger.error('util: read_devices_filtra_CSV - Erro ao ler arquivo: %s', devices_file) print('Ocorreu um Erro: ' + str(err)) raise Exception('Erro em util.read_devices_filtra_CSV')
def read_devices_info(devices_file): devices_list = [] # Open the device file with JSON data and read into string json_file = open(devices_file,'r') # open the JSON file json_device_data = json_file.read() # read in the JSON data from file # Convert JSAON string into Python data structure devices_info_list = json.loads(json_device_data) for device_info in devices_info_list: # Create a device object with this data if device_info['os'] == 'ios': device = NetworkDeviceIOS(device_info['name'],device_info['ip'], device_info['user'],device_info['password']) elif device_info['os'] == 'ios-xr': device = NetworkDeviceXR(device_info['name'],device_info['ip'], device_info['user'],device_info['password']) else: device = NetworkDevice(device_info['name'],device_info['ip'], device_info['user'],device_info['password']) # Open SSH key file for this device key_file_path = "sshkeys/"+device_info['ip']+"/"+device_info['key'] key_file = open(key_file_path,'rb') key_data = key_file.read() # read ssh key data device.set_sshkey(key_data) # store ssh key data in device object devices_list.append(device) # Append this device object to list return devices_list
devices_filename = 'csv-devices' logging.basicConfig(filename='prne.log', format='%(asctime)s %(message)s', level=logging.INFO) devices_list_in = read_devices_info(devices_filename) # read CSV info for devices logging.info('main: read %s devices from %s', len(devices_list_in), devices_filename) # Iterate through all devices from the file, creating device objects for each devices_list = [] for device_in in devices_list_in: device = NetworkDeviceIOS(device_in[0], # Device name device_in[2], # Device IP address device_in[3], # Device username device_in[4]) # Device password logging.info('main: created device: %s IP: %s', device.name, device.ip_address) print '----- device: name: ',device.name,' IP: ',device.ip_address devices_list.append(device) # Iterate through all devices, connecting and getting interface and routing info for device in devices_list: session = device.connect() if session == 0: logging.error('main: unable to connect: %s, %s', device.name, device.ip_address)
#--- Read in devices from file and put it in a Device List --------- devices_list_in = read_devices_info( devices_filename ) # read CSV info for all devices from the file "devices_filename" mentioned above logger.info('read %s devices from %s', len(devices_list_in), devices_filename) # Iterate through all devices from the file, creating device objects for each devices_list = [] for device_in in devices_list_in: device = NetworkDeviceIOS( device_in[0], # Device name device_in[2], # Device IP address device_in[3], # Device username device_in[4]) # Device password logger.info('created device: %s IP: %s', device.name, device.ip_address) devices_list.append(device) # Iterate through all devices, connecting and getting interface and routing info for device in devices_list: session = device.connect() if session == 0: logger.error('unable to connect: %s, %s', device.name, device.ip_address) continue
def setUp(self): # Create device for testing login, connectivity, etc. self.device = NetworkDeviceIOS(device_name,device_ip,device_user,device_pw)
class TestDevice(unittest.TestCase): def setUp(self): # Create device for testing login, connectivity, etc. self.device = NetworkDeviceIOS(device_name,device_ip,device_user,device_pw) def test_attributes(self): print('\n**** Testing device object creation and values ****') # Test to make sure that the device object has correct values as set up self.assertEqual(self.device.name, device_name, "Incorrect device name") self.assertEqual(self.device.ip_address, device_ip, "Incorrect IP address") self.assertEqual(self.device.username, device_user, "Incorrect username") self.assertEqual(self.device.password, device_pw, "Incorrect password") def test_connect(self): print('\n**** Testing device object connectivity to real device ****') # Test that we can connect to the device (login) session = self.device.connect() self.assertNotEqual(session, 0, "Failed connection to device") self.device.disconnect() # Clean up the session def test_show_interfaces(self): print('\n**** Testing device show interfaces command ****') # First must connect to the device session = self.device.connect() self.assertNotEqual(session, 0, "Failed connection to device") # Set terminal length to 0 for long replies self.assertTrue(self.device.set_terminal_length()) # Run show interfaces command intf_output = self.device.get_interfaces() # Test the command ran successfully self.assertNotEqual(intf_output, 0, "Failed show interfaces command") # Test the data returned from the command # Note we test for 'Loopback', which will be present always self.assertNotEqual(len(intf_output), 0, "Show interfaces: no data") self.assertNotEqual(intf_output.find('Loopback'), -1, "Show interfaces: incorrect data") self.device.disconnect() # Clean up the session def test_show_routes(self): print('\n**** Testing device show routes command ****') # First must connect to the device session = self.device.connect() self.assertNotEqual(session, 0, "Failed connection to device") # Set terminal length to 0 for long replies self.assertTrue(self.device.set_terminal_length()) # Run show ip route command routes_output = self.device.get_routes() # Test the command ran successfully self.assertNotEqual(routes_output, 0, "Failed show ip route command") # Test the data returned from the command # Note we test for 'OSPF' just part of the legend for the command output self.assertNotEqual(len(routes_output), 0, "Show ip routes: no data") self.assertNotEqual(routes_output.find('OSPF'), -1, "Show ip routes: incorrect data") self.device.disconnect() # Clean up the session def tearDown(self): pass