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
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
 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
예제 #6
0
    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"]
예제 #7
0
 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
예제 #8
0
    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")
예제 #11
0
    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
예제 #12
0
    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)
예제 #13
0
    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)