diff --git a/netmiko/adva/adva_aos_fsp_150_f2.py b/netmiko/adva/adva_aos_fsp_150_f2.py index c1f9af8f4..7a8bc480a 100644 --- a/netmiko/adva/adva_aos_fsp_150_f2.py +++ b/netmiko/adva/adva_aos_fsp_150_f2.py @@ -56,15 +56,37 @@ def session_preparation(self) -> None: def set_base_prompt( self, - pri_prompt_terminator: str = r"(^.+?)-->$", + pri_prompt_terminator: str = r"-->", alt_prompt_terminator: str = "", delay_factor: float = 1.0, pattern: Optional[str] = None, ) -> str: + if pattern is None: + if pri_prompt_terminator and alt_prompt_terminator: + pri_term = re.escape(pri_prompt_terminator) + alt_term = re.escape(alt_prompt_terminator) + pattern = rf"({pri_term}|{alt_term})" + elif pri_prompt_terminator: + pattern = re.escape(pri_prompt_terminator) + elif alt_prompt_terminator: + pattern = re.escape(alt_prompt_terminator) - prompt = self.find_prompt() - match = re.search(pri_prompt_terminator, prompt) - if not match: + if pattern: + prompt = self.find_prompt(delay_factor=delay_factor, pattern=pattern) + else: + prompt = self.find_prompt(delay_factor=delay_factor) + + if not prompt[-3:] in (pri_prompt_terminator, alt_prompt_terminator): raise ValueError(f"Router prompt not found: {repr(prompt)}") - self.base_prompt = match[1] + + # If all we have is the 'terminator' just use that :-( + if len(prompt) == 1: + self.base_prompt = prompt + else: + # Strip off trailing terminator + self.base_prompt = prompt[-3:] return self.base_prompt + + def cleanup(self, command: str = "logout") -> None: + """Gracefully exit the SSH session.""" + return super().cleanup(command=command) diff --git a/netmiko/adva/adva_aos_fsp_150_f3.py b/netmiko/adva/adva_aos_fsp_150_f3.py index 6576392e3..d9676fca0 100644 --- a/netmiko/adva/adva_aos_fsp_150_f3.py +++ b/netmiko/adva/adva_aos_fsp_150_f3.py @@ -63,8 +63,13 @@ def session_preparation(self) -> None: else: self.write_channel(f"home{self.RETURN}") - data = self.read_until_pattern(pattern=r"-->") + data = self.read_until_pattern(pattern=r"-->|--More--") + + if "--More--" in data: + self.write_channel(self.RETURN) + self.set_base_prompt() + self.write_channel(self.RETURN) self.disable_paging(cmd_verify=False) def disable_paging( @@ -87,29 +92,49 @@ def disable_paging( "home", ] return self.send_config_set( - commands, delay_factor=delay_factor, cmd_verify=cmd_verify + commands, + delay_factor=delay_factor, + cmd_verify=cmd_verify, ) def set_base_prompt( self, - pri_prompt_terminator: str = r"(^.+?)-->$", + pri_prompt_terminator: str = r"-->", alt_prompt_terminator: str = "", delay_factor: float = 1.0, pattern: Optional[str] = None, ) -> str: + if pattern is None: + if pri_prompt_terminator and alt_prompt_terminator: + pri_term = re.escape(pri_prompt_terminator) + alt_term = re.escape(alt_prompt_terminator) + pattern = rf"({pri_term}|{alt_term})" + elif pri_prompt_terminator: + pattern = re.escape(pri_prompt_terminator) + elif alt_prompt_terminator: + pattern = re.escape(alt_prompt_terminator) + + if pattern: + prompt = self.find_prompt(delay_factor=delay_factor, pattern=pattern) + else: + prompt = self.find_prompt(delay_factor=delay_factor) - prompt = self.find_prompt() - match = re.search(pri_prompt_terminator, prompt) - if not match: + if not prompt[-3:] in (pri_prompt_terminator, alt_prompt_terminator): raise ValueError(f"Router prompt not found: {repr(prompt)}") - self.base_prompt = match[1] + + # If all we have is the 'terminator' just use that :-( + if len(prompt) == 1: + self.base_prompt = prompt + else: + # Strip off trailing terminator + self.base_prompt = prompt[-3:] return self.base_prompt def send_config_set( self, config_commands: Union[str, Sequence[str], Iterator[str], TextIO, None] = None, *, - exit_config_mode: bool = True, + exit_config_mode: bool = False, read_timeout: Optional[float] = 2.0, delay_factor: Optional[float] = None, max_loops: Optional[int] = None, @@ -117,9 +142,9 @@ def send_config_set( strip_command: bool = False, config_mode_command: Optional[str] = None, cmd_verify: bool = True, - enter_config_mode: bool = True, + enter_config_mode: bool = False, error_pattern: str = "", - terminator: str = r"#", + terminator: str = r"-->", bypass_commands: Optional[str] = None, ) -> str: @@ -144,3 +169,7 @@ def send_config_set( terminator=terminator, bypass_commands=bypass_commands, ) + + def cleanup(self, command: str = "logout") -> None: + """Gracefully exit the SSH session.""" + return super().cleanup(command=command)