def __init__(self, hostname, username, password, timeout=60, optional_args=None): """NAPALM Dell Force10 FTOS Handler.""" self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} self.netmiko_optional_args = netmiko_args(optional_args) # Allow old key exchange algorithms in paramiko. Old FTOS devices don't get # patches any more. lst = list(paramiko.Transport._preferred_kex) more = ( "diffie-hellman-group-exchange-sha1", "diffie-hellman-group14-sha1", "diffie-hellman-group1-sha1", ) for x in more: if x not in lst: lst.insert(0, x) paramiko.Transport._preferred_kex = tuple(lst)
def guess_netmiko_device_type(self): """Guess the device type of host, based on Netmiko.""" guessed_device_type = None netmiko_optional_args = netmiko_args(self.optional_args) remote_device = { "device_type": "autodetect", "host": self.hostname, "username": self.username, "password": self.password, **netmiko_optional_args, } if self.secret: remote_device["secret"] = self.secret if self.port: remote_device["port"] = self.port if self.timeout: remote_device["timeout"] = self.timeout try: logger.info("INFO guessing device type: %s", self.hostname) guesser = SSHDetect(**remote_device) guessed_device_type = guesser.autodetect() logger.info("INFO guessed device type: %s", guessed_device_type) except NetMikoAuthenticationException as err: logger.error("ERROR %s", err) raise OnboardException(reason="fail-login", message=f"ERROR: {str(err)}") except (NetMikoTimeoutException, SSHException) as err: logger.error("ERROR: %s", str(err)) raise OnboardException(reason="fail-connect", message=f"ERROR: {str(err)}") except Exception as err: logger.error("ERROR: %s", str(err)) raise OnboardException(reason="fail-general", message=f"ERROR: {str(err)}") else: if guessed_device_type is None: logger.error( "ERROR: Could not detect device type with SSHDetect") raise OnboardException( reason="fail-general", message="ERROR: Could not detect device type with SSHDetect" ) return guessed_device_type
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """NAPALM Dell Force10 FTOS Handler.""" self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} self.netmiko_optional_args = netmiko_args(optional_args)
def __init__(self, hostname, username, password, timeout=60, optional_args=None): self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout self.changed = False self.loaded = False if optional_args is None: optional_args = {} self.netmiko_optional_args = netmiko_args(optional_args)
def __init__(self, hostname, username, password, timeout=60, optional_args=None): if optional_args is None: optional_args = {} self.hostname = hostname self.username = username self.password = password self.timeout = timeout self.replace = True self.loaded = False self.changed = False self.merge_candidate = '' self.candidate_cfg = 'candidate_config.txt' self.rollback_cfg = 'rollback_config.txt' self._dest_file_system = optional_args.pop('dest_file_system', "bootflash:") self.netmiko_optional_args = netmiko_args(optional_args) self.device = None
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """Constructor.""" self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} self.netmiko_optional_args = netmiko_args(optional_args) self.netmiko_optional_args.setdefault('port', 22) self.profile = ["cisco_wlc"]
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """Initialization function for ONYXSSHDriver Class.""" if optional_args is None: optional_args = {} self.hostname = hostname self.username = username self.password = password self.timeout = timeout self.replace = True self.loaded = False self.changed = False self.up = False self.replace_file = None self.merge_candidate = '' self.netmiko_optional_args = netmiko_args(optional_args) self.device = None
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """NAPALM Dell Force10 FTOS Handler.""" self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} self.netmiko_optional_args = netmiko_args(optional_args) # Retrieve file names self.candidate_cfg = optional_args.get('candidate_cfg', 'candidate_config.txt') self.merge_cfg = optional_args.get('merge_cfg', 'merge_config.txt') self.rollback_cfg = optional_args.get('rollback_cfg', 'rollback_config.txt') self.merge_cfg = optional_args.get('merge_cfg', 'merge_config.txt') self.config_replace = False
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """Constructor.""" self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} self.netmiko_optional_args = netmiko_args(optional_args) self.transport = optional_args.get("transport", "ssh") # Set the default port if not set default_port = {"ssh": 22, "telnet": 23} self.netmiko_optional_args.setdefault("port", default_port[self.transport]) if self.transport == "telnet": # Telnet only supports inline_transfer self.inline_transfer = True self.profile = [ "oneaccess_oneos_ssh" ]
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """NAPALM Dlink Handler..""" self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} self.transport = optional_args.get("transport", "ssh") # Retrieve file names self.candidate_cfg = optional_args.get("candidate_cfg", "candidate_config.txt") self.merge_cfg = optional_args.get("merge_cfg", "merge_config.txt") self.rollback_cfg = optional_args.get("rollback_cfg", "rollback_config.txt") self.inline_transfer = optional_args.get("inline_transfer", True) self.netmiko_optional_args = netmiko_args(optional_args) # Set the default port if not set default_port = {"ssh": 22, "telnet": 23} self.netmiko_optional_args.setdefault("port", default_port[self.transport]) self.config_replace = False self.tftp_server = optional_args.get("tftp_server")
def __init__(self, hostname, username, password, timeout=60, optional_args=None): """Constructor. :param hostname: :param username: :param password: :param timeout: :param optional_args: """ self.device = None self.hostname = hostname self.username = username self.password = password self.timeout = timeout if optional_args is None: optional_args = {} # Netmiko possible arguments netmiko_argument_map = { 'port': None, 'verbose': False, 'timeout': self.timeout, 'global_delay_factor': 1, 'use_keys': False, 'key_file': None, 'ssh_strict': False, 'system_host_keys': False, 'alt_host_keys': False, 'alt_key_file': '', 'ssh_config_file': None, 'allow_agent': False, 'keepalive': 30 } # Build dict of any optional Netmiko args self.netmiko_optional_args = { k: optional_args.get(k, v) for k, v in netmiko_argument_map.items() } self.transport = optional_args.get('transport', 'ssh') self.port = optional_args.get('port', 22) self.changed = False self.loaded = False self.backup_file = '' self.replace = False self.merge_candidate = '' self.replace_file = '' self.profile = ["vrp"] # netmiko args self.netmiko_optional_args = netmiko_args(optional_args) # Set the default port if not set default_port = {"ssh": 22, "telnet": 23} self.netmiko_optional_args.setdefault("port", default_port[self.transport]) # Control automatic execution of 'file prompt quiet' for file operations self.auto_file_prompt = optional_args.get("auto_file_prompt", True) # Track whether 'file prompt quiet' has been changed by NAPALM. self.prompt_quiet_changed = False # Track whether 'file prompt quiet' is known to be configured self.prompt_quiet_configured = None
def test_netmiko_arguments(self): """Test the netmiko argument processing.""" self.assertEqual(netmiko_args(optional_args={}), {}) test_case = {'secret': 'whatever'} self.assertEqual(netmiko_args(test_case), test_case) test_case = { 'secret': 'whatever', 'use_keys': True, } self.assertEqual(netmiko_args(test_case), test_case) test_case = { 'secret': 'whatever', 'use_keys': True, 'ssh_config_file': '~/.ssh/config', } self.assertEqual(netmiko_args(test_case), test_case) test_case = { 'secret': 'whatever', 'transport': 'telnet', } self.assertEqual(netmiko_args(test_case), {'secret': 'whatever'}) test_case = { 'secret': 'whatever', 'transport': 'telnet', 'port': 8022, } self.assertEqual(netmiko_args(test_case), { 'secret': 'whatever', 'port': 8022 }) test_case = { 'secret': '', 'port': None, 'verbose': False, 'global_delay_factor': 1, 'use_keys': False, 'key_file': None, 'allow_agent': False, 'ssh_strict': False, 'system_host_keys': False, 'alt_host_keys': False, 'alt_key_file': '', 'ssh_config_file': None, 'session_timeout': 60, 'blocking_timeout': 8, 'keepalive': 0, 'default_enter': None, 'response_return': None, 'serial_settings': None } self.assertEqual(netmiko_args(test_case), test_case) test_case = { 'inline_transfer': True, 'transport': 'ssh', 'secret': '', 'port': None, 'verbose': False, 'global_delay_factor': 1, 'use_keys': False, 'key_file': None, 'allow_agent': False, 'ssh_strict': False, 'system_host_keys': False, 'alt_host_keys': False, 'alt_key_file': '', 'ssh_config_file': None, 'session_timeout': 60, 'blocking_timeout': 8, 'keepalive': 0, 'default_enter': None, 'response_return': None, 'serial_settings': None } result_dict = {} result_dict.update(test_case) result_dict.pop('inline_transfer') result_dict.pop('transport') self.assertEqual(netmiko_args(test_case), result_dict)
def test_netmiko_arguments(self): """Test the netmiko argument processing.""" self.assertEqual(netmiko_args(optional_args={}), {}) test_case = {"secret": "whatever"} self.assertEqual(netmiko_args(test_case), test_case) test_case = {"secret": "whatever", "use_keys": True} self.assertEqual(netmiko_args(test_case), test_case) test_case = { "secret": "whatever", "use_keys": True, "ssh_config_file": "~/.ssh/config", } self.assertEqual(netmiko_args(test_case), test_case) test_case = {"secret": "whatever", "transport": "telnet"} self.assertEqual(netmiko_args(test_case), {"secret": "whatever"}) test_case = {"secret": "whatever", "transport": "telnet", "port": 8022} self.assertEqual(netmiko_args(test_case), {"secret": "whatever", "port": 8022}) test_case = { "secret": "", "port": None, "verbose": False, "global_delay_factor": 1, "use_keys": False, "key_file": None, "allow_agent": False, "ssh_strict": False, "system_host_keys": False, "alt_host_keys": False, "alt_key_file": "", "ssh_config_file": None, "session_timeout": 60, "blocking_timeout": 8, "keepalive": 0, "default_enter": None, "response_return": None, "serial_settings": None, } self.assertEqual(netmiko_args(test_case), test_case) test_case = { "inline_transfer": True, "transport": "ssh", "secret": "", "port": None, "verbose": False, "global_delay_factor": 1, "use_keys": False, "key_file": None, "allow_agent": False, "ssh_strict": False, "system_host_keys": False, "alt_host_keys": False, "alt_key_file": "", "ssh_config_file": None, "session_timeout": 60, "blocking_timeout": 8, "keepalive": 0, "default_enter": None, "response_return": None, "serial_settings": None, } result_dict = {} result_dict.update(test_case) result_dict.pop("inline_transfer") result_dict.pop("transport") self.assertEqual(netmiko_args(test_case), result_dict)