diff --git a/docs/docs/agent/installation.mdx b/docs/docs/agent/installation.mdx index 24c496b..22cafa9 100644 --- a/docs/docs/agent/installation.mdx +++ b/docs/docs/agent/installation.mdx @@ -9,8 +9,8 @@ description: Install hyperglass-agent on your system import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -:::important In Progress -Documentation for [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is in progress! +:::caution Deprecation Warning +[hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/checktheroads/hyperglass/issues/143) and [here](platforms.mdx) for more detail. ::: ## Installation @@ -76,6 +76,6 @@ Now that Python 3.6+ is installed, you can install the hyperglass agent: $ pip3 install hyperglass-agent ``` -:::important More coming soon -Documentation for [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is in progress! +:::caution Deprecation Warning +[hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/checktheroads/hyperglass/issues/143) and [here](platforms.mdx) for more detail. ::: diff --git a/docs/docs/agent/parameters.mdx b/docs/docs/agent/parameters.mdx index bab4df5..ce6bdc5 100644 --- a/docs/docs/agent/parameters.mdx +++ b/docs/docs/agent/parameters.mdx @@ -9,6 +9,10 @@ description: hyperglass-agent configuration parameters. import M from "../../src/components/MiniNote"; import PL from "../../src/components/PageLink"; +:::caution Deprecation Warning +[hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/checktheroads/hyperglass/issues/143) and [here](platforms.mdx) for more detail. +::: +
## Configuration File @@ -62,3 +66,7 @@ By default, hyperglass-agent writes all log messages to a log file located at `/ | `directory` | FilePath | `/tmp/` | Directory at which to write the log file `hyperglass-agent.log`. Use `false` to disable file logging. | | `format` | String | `'text'` | `'text'` for plain text non-structured logging, `'json'` for JSON structured logging. If JSON is enabled, the log file name will be `hyperglass-agent.log.json` | | `max_size` | String | `'50MB'` | Maximum log file size before old logs are overwritten. | + +:::caution Deprecation Warning +[hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/checktheroads/hyperglass/issues/143) and [here](platforms.mdx) for more detail. +::: diff --git a/docs/docs/agent/setup.mdx b/docs/docs/agent/setup.mdx index 28f12ef..f079c51 100644 --- a/docs/docs/agent/setup.mdx +++ b/docs/docs/agent/setup.mdx @@ -8,7 +8,11 @@ description: Configure hyperglass-agent import M from "../../src/components/MiniNote"; -:::caution Time & NTP +:::caution Deprecation Warning +[hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/checktheroads/hyperglass/issues/143) and [here](platforms.mdx) for more detail. +::: + +:::important Time & NTP Before you get too far, check to make sure your hyperglass server and hyperglass-agent system are both properly synchronized with an NTP server. During the setup process and on every interaction, hyperglass and hyperglass-agent exchange [JWT](https://jwt.io/) tokens with a relatively short window (**60 seconds, by default**) in which to validate the payload. If the system clock on either system is askew by too much, this exchange can fail. ::: diff --git a/docs/docs/platforms.mdx b/docs/docs/platforms.mdx index 145f0ac..8038eee 100644 --- a/docs/docs/platforms.mdx +++ b/docs/docs/platforms.mdx @@ -5,104 +5,110 @@ sidebar_label: Supported Platforms description: Platforms supported by hyperglass --- -## HTTP +import Native from "../src/components/Native";
-The following platforms use [hyperglass-agent](agent/installation.mdx) for connection handling. When configuring the `nos` property of a device, use the value in the **Key** column. - -:::caution hyperglass agent is being deprecated -While hyperglass-agent was a cool idea, maintaining the two codebases and protocol sets has proven cumbersome, with very little benefit. As of **v1.0.0-beta.76**, `frr_ssh` and `bird_ssh` are available for use as replacements. -::: - -| Name | Key | -| :-------- | :----- | -| BIRD | `bird` | -| FRRouting | `frr` | - ## SSH The following platforms use [Netmiko](https://github.com/ktbyers/netmiko) or [Scrapli](https://github.com/carlmontanari/scrapli) for connection handling. When configuring the `nos` property of a device, use the value in the **Key** column. -| Name | Key | -| :------------------------ | :-------------------- | -| A10 | `a10` | -| Accedian | `accedian` | -| Alcatel AOS | `alcatel_aos` | -| Alcatel SROS | `alcatel_sros` | -| Apresia Systems AEOS | `apresia_aeos` | -| Arista vEOS | `arista_eos` | -| Aruba | `aruba_os` | -| Avaya ERS | `avaya_ers` | -| Avaya VSP | `avaya_vsp` | -| BIRD | `bird_ssh` | -| Calix B6 | `calix_b6` | -| Check Point GAiA | `checkpoint_gaia` | -| Ciena SAOS | `ciena_saos` | -| Cisco ASA | `cisco_asa` | -| Cisco IOS | `cisco_ios` | -| Cisco NX-OS | `cisco_nxos` | -| Cisco SG-300 | `cisco_s300` | -| Cisco IOS-XE | `cisco_xe` | -| Cisco IOS-XR | `cisco_xr` | -| Citrix Netscaler | `netscaler` | -| CloudGenix ION | `cloudgenix_ion` | -| Coriant | `coriant` | -| Dell OS6 | `dell_os6` | -| Dell OS9 | `dell_os9` | -| Dell OS10 | `dell_os10` | -| Dell PowerConnect | `dell_powerconnect` | -| Endace | `endace` | -| Eltex | `eltex` | -| Eltex ESR | `eltex_esr` | -| Enterasys | `enterasys` | -| Extreme | `extreme` | -| Extreme ERS | `extreme_ers` | -| Extreme EXOS | `extreme_exos` | -| Extreme/Brocade NetIron | `extreme_netiron` | -| Extreme NOS | `extreme_nos` | -| Extreme/Brocade SLX | `extreme_slx` | -| Extreme/Brocade VDX | `extreme_vdx` | -| Extreme VSP | `extreme_vsp` | -| Extreme Wing | `extreme_wing` | -| F5 LTM | `f5_ltm` | -| F5 TMSH | `f5_tmsh` | -| F5 Linux | `f5_linux` | -| Flex VNF | `flexvnf` | -| Fortinet | `fortinet` | -| FRRouting | `frr_ssh` | -| Generic Terminal Server | `generic_termserver` | -| HPE/3COM Comware | `hp_comware` | -| HPE ProCurve | `hp_procurve` | -| Huawei | `huawei` | -| Huawei VRPv8 | `huawei_vrpv8` | -| IPInfusion OcNOS | `ipinfusion_ocnos` | -| Juniper | `juniper` | -| Juniper JunOS | `juniper_junos` | -| Juniper ScreenOS | `juniper_screenos` | -| Keymile | `keymile` | -| Keymile NOS | `keymile_nos` | -| Linux | `linux` | -| Mikrotik RouterOS | `mikrotik_routeros` | -| Mikrotik SwitchOS | `mikrotik_switchos` | -| Mellanox | `mellanox` | -| Mellanox MLNX-OS | `mellanox_mlnxos` | -| MRV LX | `mrv_lx` | -| MRV Optiswitch | `mrv_optiswitch` | -| Nokia SROS | `nokia_sros` | -| OneAccess OneOS | `oneaccess_oneos` | -| OVS Linux | `ovs_linux` | -| Palo Alto Networks PAN-OS | `paloalto_panos` | -| Pluribus | `pluribus` | -| Quanta Mesh | `quanta_mesh` | -| RAD ETX | `rad_etx` | -| Ruckus/Brocade FastIron | `ruckus_fastiron` | -| Ruijie OS | `ruijie_os` | -| TNSR | `tnsr` | -| Ubuiquiti EdgeRouter | `ubiquiti_edge` | -| Ubuiquiti EdgeSwitch | `ubiquiti_edgeswitch` | -| Vyatta VyOS | `vyatta_vyos` | -| VyOS | `vyos` | +Platforms in green are natively supported, which means hyperglass has predefined commands built in. Other platforms should also work, you'll just need to [add a custom command profile](commands.mdx). + +If needed, for troubleshooting purposes or otherwise, the driver for a given device [can be overridden](adding-devices#all-device-paramters) with the `driver` parameter. Generally, Netmiko is more stable, supports more platforms, but is slower; while Scrapli can be less reliable, supports fewer platforms, but is significantly faster. + +| Name | Key | Default Driver | +| :--------------------------------- | :-------------------- | :------------- | +| A10 | `a10` | Netmiko | +| Accedian | `accedian` | Netmiko | +| Alcatel AOS | `alcatel_aos` | Netmiko | +| Alcatel SROS | `alcatel_sros` | Netmiko | +| Apresia Systems AEOS | `apresia_aeos` | Netmiko | +| Arista vEOS | `arista_eos` | Netmiko | +| Aruba | `aruba_os` | Netmiko | +| Avaya ERS | `avaya_ers` | Netmiko | +| Avaya VSP | `avaya_vsp` | Netmiko | +| BIRD | `bird` | Scrapli | +| Calix B6 | `calix_b6` | Netmiko | +| Check Point GAiA | `checkpoint_gaia` | Netmiko | +| Ciena SAOS | `ciena_saos` | Netmiko | +| Cisco ASA | `cisco_asa` | Netmiko | +| Cisco IOS | `cisco_ios` | Scrapli | +| Cisco NX-OS | `cisco_nxos` | Scrapli | +| Cisco SG-300 | `cisco_s300` | Netmiko | +| Cisco IOS-XE | `cisco_xe` | Scrapli | +| Cisco IOS-XR | `cisco_xr` | Scrapli | +| Citrix Netscaler | `netscaler` | Netmiko | +| CloudGenix ION | `cloudgenix_ion` | Netmiko | +| Coriant | `coriant` | Netmiko | +| Dell OS6 | `dell_os6` | Netmiko | +| Dell OS9 | `dell_os9` | Netmiko | +| Dell OS10 | `dell_os10` | Netmiko | +| Dell PowerConnect | `dell_powerconnect` | Netmiko | +| Endace | `endace` | Netmiko | +| Eltex | `eltex` | Netmiko | +| Eltex ESR | `eltex_esr` | Netmiko | +| Enterasys | `enterasys` | Netmiko | +| Extreme | `extreme` | Netmiko | +| Extreme ERS | `extreme_ers` | Netmiko | +| Extreme EXOS | `extreme_exos` | Netmiko | +| Extreme/Brocade NetIron | `extreme_netiron` | Netmiko | +| Extreme NOS | `extreme_nos` | Netmiko | +| Extreme/Brocade SLX | `extreme_slx` | Netmiko | +| Extreme/Brocade VDX | `extreme_vdx` | Netmiko | +| Extreme VSP | `extreme_vsp` | Netmiko | +| Extreme Wing | `extreme_wing` | Netmiko | +| F5 LTM | `f5_ltm` | Netmiko | +| F5 TMSH | `f5_tmsh` | Netmiko | +| F5 Linux | `f5_linux` | Netmiko | +| Flex VNF | `flexvnf` | Netmiko | +| Fortinet | `fortinet` | Netmiko | +| FRRouting | `frr` | Scrapli | +| Generic Terminal Server | `generic_termserver` | Netmiko | +| HPE/3COM Comware | `hp_comware` | Netmiko | +| HPE ProCurve | `hp_procurve` | Netmiko | +| Huawei | `huawei` | Netmiko | +| Huawei VRPv8 | `huawei_vrpv8` | Netmiko | +| IPInfusion OcNOS | `ipinfusion_ocnos` | Netmiko | +| Juniper | `juniper` | Scrapli | +| Juniper JunOS | `juniper_junos` | Scrapli | +| Juniper ScreenOS | `juniper_screenos` | Netmiko | +| Keymile | `keymile` | Netmiko | +| Keymile NOS | `keymile_nos` | Netmiko | +| Linux | `linux` | Netmiko | +| Mikrotik RouterOS | `mikrotik_routeros` | Netmiko | +| Mikrotik SwitchOS | `mikrotik_switchos` | Netmiko | +| Mellanox | `mellanox` | Netmiko | +| Mellanox MLNX-OS | `mellanox_mlnxos` | Netmiko | +| MRV LX | `mrv_lx` | Netmiko | +| MRV Optiswitch | `mrv_optiswitch` | Netmiko | +| Nokia SROS | `nokia_sros` | Netmiko | +| OneAccess OneOS | `oneaccess_oneos` | Netmiko | +| OVS Linux | `ovs_linux` | Netmiko | +| Palo Alto Networks PAN-OS | `paloalto_panos` | Netmiko | +| Pluribus | `pluribus` | Netmiko | +| Quanta Mesh | `quanta_mesh` | Netmiko | +| RAD ETX | `rad_etx` | Netmiko | +| Ruckus/Brocade FastIron | `ruckus_fastiron` | Netmiko | +| Ruijie OS | `ruijie_os` | Netmiko | +| TNSR | `tnsr` | Scrapli | +| Ubuiquiti EdgeRouter | `ubiquiti_edge` | Netmiko | +| Ubuiquiti EdgeSwitch | `ubiquiti_edgeswitch` | Netmiko | +| Vyatta VyOS | `vyatta_vyos` | Netmiko | +| VyOS | `vyos` | Netmiko | + +## HTTP + +The following platforms use [hyperglass-agent](agent/installation.mdx) for connection handling. When configuring the `nos` property of a device, use the value in the **Key** column. + +:::caution hyperglass agent is being deprecated +While hyperglass-agent was a cool idea, maintaining the two codebases and protocol sets has proven cumbersome, with very little benefit. As of **v1.0.0**, `frr_legacy` and `bird_legacy` are temporarily available to mimic previous behavior with hyperglass-agent. +::: + +| Name | Key | +| :-------- | :------------ | +| BIRD | `bird_legacy` | +| FRRouting | `frr_legacy` | ## Caveats diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index b55689c..d937196 100755 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -24,6 +24,13 @@ --ifm-color-primary-light: #ff807e; --ifm-color-primary-lighter: #ff918f; --ifm-color-primary-lightest: #ffc4c3; + --ifm-color-success: #35b246; + --ifm-color-success-dark: #30a03f; + --ifm-color-success-darker: #2d973b; + --ifm-color-success-darkest: #257d31; + --ifm-color-success-light: #3ac44d; + --ifm-color-success-lighter: #43c755; + --ifm-color-success-lightest: #5dcf6d; --ifm-code-font-size: 95%; --ifm-font-family-base: "Nunito", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, "Segoe UI", diff --git a/hyperglass/constants.py b/hyperglass/constants.py index 072cc68..e8a3636 100644 --- a/hyperglass/constants.py +++ b/hyperglass/constants.py @@ -62,7 +62,7 @@ FUNC_COLOR_MAP = { "danger": "red", } -TRANSPORT_REST = ("frr", "bird") +TRANSPORT_REST = ("frr_legacy", "bird_legacy") SCRAPE_HELPERS = { "arista": "arista_eos", @@ -76,14 +76,14 @@ SCRAPE_HELPERS = { DRIVER_MAP = { # TODO: Troubleshoot Arista with Scrapli, broken after upgrading to 2021.1.30. # "arista_eos": "scrapli", # noqa: E800 - "bird_ssh": "scrapli", + "bird": "scrapli", "cisco_ios": "scrapli", "cisco_xe": "scrapli", "cisco_xr": "scrapli", "cisco_nxos": "scrapli", "juniper": "scrapli", "tnsr": "scrapli", - "frr_ssh": "scrapli", - "frr": "hyperglass_agent", - "bird": "hyperglass_agent", + "frr": "scrapli", + "frr_legacy": "hyperglass_agent", + "bird_legacy": "hyperglass_agent", } diff --git a/hyperglass/execution/drivers/ssh_scrapli.py b/hyperglass/execution/drivers/ssh_scrapli.py index 8a58402..935dbeb 100644 --- a/hyperglass/execution/drivers/ssh_scrapli.py +++ b/hyperglass/execution/drivers/ssh_scrapli.py @@ -37,11 +37,11 @@ from .ssh import SSHConnection SCRAPLI_DRIVER_MAP = { "arista_eos": AsyncEOSDriver, - "bird_ssh": AsyncGenericDriver, + "bird": AsyncGenericDriver, "cisco_ios": AsyncIOSXEDriver, "cisco_nxos": AsyncNXOSDriver, "cisco_xr": AsyncIOSXRDriver, - "frr_ssh": AsyncGenericDriver, + "frr": AsyncGenericDriver, "juniper": AsyncJunosDriver, "tnsr": AsyncGenericDriver, } @@ -49,6 +49,8 @@ SCRAPLI_DRIVER_MAP = { driver_global_args = { # Per-NOS driver keyword arguments "tnsr": {"comms_prompt_pattern": r"\S+\s\S+[\#\>]"}, + "frr": {"comms_ansi": True}, + "bird": {"comms_ansi": True}, } @@ -112,7 +114,6 @@ class ScrapliConnection(SSHConnection): driver.logger = log.bind( logger_name=f"scrapli.{driver.host}:{driver.port}-driver" ) - try: responses = () async with driver as connection: diff --git a/hyperglass/models/commands/__init__.py b/hyperglass/models/commands/__init__.py index 5f3f0be..7a49b0b 100644 --- a/hyperglass/models/commands/__init__.py +++ b/hyperglass/models/commands/__init__.py @@ -19,11 +19,11 @@ from .mikrotik_switchos import MikrotikSwitchOS _NOS_MAP = { "arista_eos": AristaEOSCommands, - "bird_ssh": BIRDCommands, + "bird": BIRDCommands, "cisco_ios": CiscoIOSCommands, "cisco_nxos": CiscoNXOSCommands, "cisco_xr": CiscoXRCommands, - "frr_ssh": FRRCommands, + "frr": FRRCommands, "huawei": HuaweiCommands, "juniper": JuniperCommands, "mikrotik_routeros": MikrotikRouterOS, @@ -38,11 +38,11 @@ class Commands(HyperglassModelExtra): """Base class for command definitions.""" arista_eos: CommandGroup = AristaEOSCommands() - bird_ssh: CommandGroup = BIRDCommands() + bird: CommandGroup = BIRDCommands() cisco_ios: CommandGroup = CiscoIOSCommands() cisco_nxos: CommandGroup = CiscoNXOSCommands() cisco_xr: CommandGroup = CiscoXRCommands() - frr_ssh: CommandGroup = FRRCommands() + frr: CommandGroup = FRRCommands() huawei: CommandGroup = HuaweiCommands() juniper: CommandGroup = JuniperCommands() mikrotik_routeros: CommandGroup = MikrotikRouterOS()