53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
from netmiko import Netmiko
|
|
from pythonping import ping
|
|
from ndct.core.device import Device
|
|
from ndct.core.log import log
|
|
|
|
class Connection(Device):
|
|
def __init__(self, name, ip, username, password, os):
|
|
'''
|
|
Takes:
|
|
ip: IP address of the device
|
|
username: Username to authentication against
|
|
password: Password to authenticate with
|
|
os: Operating system of the device
|
|
'''
|
|
super().__init__(name, ip, username, password, os)
|
|
|
|
def get_connection(self):
|
|
'''
|
|
Summary:
|
|
Tests device connectivity then creates an SSH connection if successful.
|
|
|
|
Returns:
|
|
Connection object
|
|
'''
|
|
ping_result = ping(self.ip, count=1)
|
|
|
|
if 'Request timed out' not in str(ping_result):
|
|
log('[{}] Reachable, getting connection...'.format(self.name), 'info')
|
|
|
|
connection = Netmiko(
|
|
self.ip,
|
|
username=self.username,
|
|
password=self.password,
|
|
device_type=self.os
|
|
)
|
|
|
|
log('[{}] Connected'.format(self.name), 'info')
|
|
return connection
|
|
else:
|
|
log('[{}] Not reachable'.format(self.name), 'info')
|
|
return
|
|
|
|
def close_connection(self, connection):
|
|
'''
|
|
Summary:
|
|
Closes an SSH connection to a device.
|
|
|
|
Takes:
|
|
connection: Connection object to close
|
|
'''
|
|
connection.disconnect()
|
|
|
|
log('[{}] Disconnected'.format(self.name), 'info') |