Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions netmiko/hioso/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from netmiko.hioso.hioso import HiosoTelnet

__all__ = ["HiosoTelnet"]
95 changes: 95 additions & 0 deletions netmiko/hioso/hioso.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import re

from netmiko.cisco_base_connection import CiscoBaseConnection
from netmiko.exceptions import NetmikoAuthenticationException


class HiosoBase(CiscoBaseConnection):
"""
Base class for Hioso devices.
It is fairly similar to Cisco devices.
"""

prompt_pattern = r"[\]>]"
prompt_or_password_change = rf"(?:Change now|Please choose|{prompt_pattern})"

def session_preparation(self) -> None:
"""Prepare the session after the connection is established."""
self.ansi_escape_codes = True
self.set_base_prompt()
self.enable()
self.disable_paging()
self.clear_buffer()
self.exit_enable_mode()

def check_config_mode(
self,
check_string: str = ")#",
pattern: str = r"[>#]",
force_regex: bool = False,
) -> bool:
return super().check_config_mode(check_string, pattern, force_regex)

def exit_config_mode(self, exit_config: str = "exit", pattern: str = r"#") -> str:
"""Exit configuration mode."""
return super().exit_config_mode(exit_config=exit_config, pattern=pattern)

def save_config(
self,
cmd: str = "write file",
confirm: bool = False,
confirm_response: str = "y",
) -> str:
"""Save Config for Hioso Telnet."""
return super().save_config(
cmd=cmd, confirm=confirm, confirm_response=confirm_response
)

def cleanup(self, command: str = "quit") -> None:
"""Cleanup the connection."""
super().cleanup(command=command)


class HiosoTelnet(HiosoBase):
"""Hioso Telnet driver."""

def telnet_login(
self,
pri_prompt_terminator: str = r"",
alt_prompt_terminator: str = r"",
username_pattern: str = r"(?:user:|username|login|user name)",
pwd_pattern: str = r"assword",
delay_factor: float = 1.0,
max_loops: int = 20,
) -> str:
"""Telnet login for Hioso Devices"""
output = ""
return_msg = ""
try:
# Search for username pattern / send username
output = self.read_until_pattern(pattern=username_pattern, re_flags=re.I)
return_msg += output
self.write_channel(self.username + self.TELNET_RETURN)

# Search for password pattern / send password
output = self.read_until_pattern(pattern=pwd_pattern, re_flags=re.I)
return_msg += output
assert self.password is not None
self.write_channel(self.password + self.TELNET_RETURN)

# Waiting for the prompt or password change message
output = self.read_until_pattern(pattern=self.prompt_or_password_change)
return_msg += output

# Wait for the prompt
if re.search(self.prompt_pattern, output):
return return_msg

# Should never be here
raise EOFError

except EOFError:
assert self.remote_conn is not None
self.remote_conn.close()
msg = f"Login failed: {self.host}"
raise NetmikoAuthenticationException(msg)
2 changes: 2 additions & 0 deletions netmiko/ssh_dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
from netmiko.garderos import GarderosGrsSSH
from netmiko.genexis import GenexisSOLT33Telnet
from netmiko.hillstone import HillstoneStoneosSSH
from netmiko.hioso import HiosoTelnet
from netmiko.hp import HPProcurveSSH, HPProcurveTelnet, HPComwareSSH, HPComwareTelnet
from netmiko.huawei import HuaweiSSH, HuaweiVrpv8SSH, HuaweiTelnet
from netmiko.huawei import HuaweiSmartAXSSH
Expand Down Expand Up @@ -357,6 +358,7 @@
CLASS_MAPPER["generic_telnet"] = GenericTelnet
CLASS_MAPPER["generic_termserver_telnet"] = TerminalServerTelnet
CLASS_MAPPER["genexis_solt33_telnet"] = GenexisSOLT33Telnet
CLASS_MAPPER["hioso_telnet"] = HiosoTelnet
CLASS_MAPPER["hp_procurve_telnet"] = HPProcurveTelnet
CLASS_MAPPER["hp_comware_telnet"] = HPComwareTelnet
CLASS_MAPPER["huawei_telnet"] = HuaweiTelnet
Expand Down