Skip to content

Commit

Permalink
Added support for Arris CER and Casa CMTS platforms. (#2958)
Browse files Browse the repository at this point in the history
* Added support for Arris CER and Casa CMTS platforms.

* Corrected issue with reliably exiting config mode on Casa.

Co-authored-by: Chuck van Gessel <douglas.vangessel@sparklight.biz>
  • Loading branch information
vangesseld and vangesseld authored Sep 30, 2022
1 parent 5b6d5a9 commit 1685b3d
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 0 deletions.
4 changes: 4 additions & 0 deletions PLATFORMS.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@
- Accedian
- Allied Telesis AlliedWare Plus
- Aruba
- Arris CER
- Brocade Fabric OS
- C-DOT CROS
- Casa CMTS
- Ciena SAOS
- Citrix Netscaler
- Cisco Telepresence
Expand Down Expand Up @@ -108,6 +110,7 @@
- allied_telesis_awplus
- apresia_aeos
- arista_eos
- arris_cer
- aruba_os
- aruba_osswitch
- aruba_procurve
Expand All @@ -121,6 +124,7 @@
- brocade_vdx
- brocade_vyos
- calix_b6
- casa_cmts
- cdot_cros
- centec_os
- checkpoint_gaia
Expand Down
3 changes: 3 additions & 0 deletions netmiko/arris/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from netmiko.arris.arris_cer import ArrisCERBase, ArrisCERSSH

__all__ = ["ArrisCERBase", "ArrisCERSSH"]
39 changes: 39 additions & 0 deletions netmiko/arris/arris_cer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from netmiko.cisco_base_connection import CiscoSSHConnection


class ArrisCERBase(CiscoSSHConnection):
"""
Arris CER Support.
Implements methods for interacting with Arris CER platforms.
"""

def config_mode(
self,
config_command: str = "configure",
pattern: str = "",
re_flags: int = 0,
) -> str:
"""Enters configuration mode."""
return super().config_mode(
config_command=config_command,
pattern=pattern,
re_flags=re_flags,
)

def save_config(
self,
cmd: str = "write memory",
confirm: bool = False,
confirm_response: str = "",
) -> str:
"""Saves the running configuration to NVRAM."""
return super().save_config(
cmd=cmd, confirm=confirm, confirm_response=confirm_response
)


class ArrisCERSSH(ArrisCERBase):
"""Arris CER SSH Driver."""

pass
3 changes: 3 additions & 0 deletions netmiko/casa/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from netmiko.casa.casa_cmts import CasaCMTSBase, CasaCMTSSSH

__all__ = ["CasaCMTSBase", "CasaCMTSSSH"]
67 changes: 67 additions & 0 deletions netmiko/casa/casa_cmts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from typing import Optional
from netmiko.cisco_base_connection import CiscoSSHConnection
from netmiko.no_enable import NoEnable


class CasaCMTSBase(NoEnable, CiscoSSHConnection):
"""
Casa CMTS support.
Implements methods for interacting with Casa CMTS platforms.
"""

def disable_paging(
self,
command: str = "page-off",
delay_factor: Optional[float] = None,
cmd_verify: bool = True,
pattern: Optional[str] = None,
) -> str:
"""Disables paging."""
return super().disable_paging(
command=command,
delay_factor=delay_factor,
cmd_verify=cmd_verify,
pattern=pattern,
)

def config_mode(
self,
config_command: str = "config",
pattern: str = "",
re_flags: int = 0,
) -> str:
"""Enters configuration mode."""
return super().config_mode(
config_command=config_command,
pattern=pattern,
re_flags=re_flags,
)

def exit_config_mode(
self, exit_config: str = chr(26), pattern: str = r"#.*"
) -> str:
"""
Exits configuration mode.
Must use CTRL-Z (ASCII 26) to reliably exit from any
tier in the configuration hierarchy.
Since CTRL-Z is a non-printable character, we must temporarily disable
global_cmd_verify to prevent an exception trying to read the
echoed input.
"""
if self.global_cmd_verify is not False and exit_config == chr(26):
global_cmd_verify_tmp = self.global_cmd_verify
self.global_cmd_verify = False
output = super().exit_config_mode(exit_config, pattern)
self.global_cmd_verify = global_cmd_verify_tmp
else:
output = super().exit_config_mode(exit_config, pattern)
return output


class CasaCMTSSSH(CasaCMTSBase):
"""Casa CMTS SSH Driver."""

pass
12 changes: 12 additions & 0 deletions netmiko/ssh_autodetect.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,18 @@
"priority": 99,
"dispatch": "_autodetect_std",
},
"arris_cer": {
"cmd": "show version",
"search_patterns": [r"CER"],
"priority": 99,
"dispatch": "_autodetect_std",
},
"casa_cmts": {
"cmd": "show version",
"search_patterns": [r"Casa"],
"priority": 99,
"dispatch": "_autodetect_std",
},
"ciena_saos": {
"cmd": "software show",
"search_patterns": [r"saos"],
Expand Down
4 changes: 4 additions & 0 deletions netmiko/ssh_dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from netmiko.allied_telesis import AlliedTelesisAwplusSSH
from netmiko.arista import AristaSSH, AristaTelnet
from netmiko.arista import AristaFileTransfer
from netmiko.arris import ArrisCERSSH
from netmiko.apresia import ApresiaAeosSSH, ApresiaAeosTelnet
from netmiko.aruba import ArubaSSH
from netmiko.audiocode import (
Expand All @@ -23,6 +24,7 @@
from netmiko.brocade import BrocadeFOSSSH
from netmiko.broadcom import BroadcomIcosSSH
from netmiko.calix import CalixB6SSH, CalixB6Telnet
from netmiko.casa import CasaCMTSSSH
from netmiko.cdot import CdotCrosSSH
from netmiko.centec import CentecOSSSH, CentecOSTelnet
from netmiko.checkpoint import CheckPointGaiaSSH
Expand Down Expand Up @@ -140,6 +142,7 @@
"allied_telesis_awplus": AlliedTelesisAwplusSSH,
"apresia_aeos": ApresiaAeosSSH,
"arista_eos": AristaSSH,
"arris_cer": ArrisCERSSH,
"aruba_os": ArubaSSH,
"aruba_osswitch": HPProcurveSSH,
"aruba_procurve": HPProcurveSSH,
Expand All @@ -157,6 +160,7 @@
"brocade_vyos": VyOSSSH,
"checkpoint_gaia": CheckPointGaiaSSH,
"calix_b6": CalixB6SSH,
"casa_cmts": CasaCMTSSSH,
"cdot_cros": CdotCrosSSH,
"centec_os": CentecOSSSH,
"ciena_saos": CienaSaosSSH,
Expand Down

0 comments on commit 1685b3d

Please sign in to comment.