diff --git a/CHANGELOG.md b/CHANGELOG.md index ff9f40c..53dc977 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -# 1.0.1 - 2021-06-17 +# 1.0.4 - 2021-07-03 ### Fixed -- [#150](https://github.com/checktheroads/hyperglass/issues/150): Fix handling of BIRD AS_PATH/Community targets. +- [#148](https://github.com/thatmattlove/hyperglass/issues/148): Update Debian/Ubuntu Python package name in installer and documentation. +- [#151](https://github.com/thatmattlove/hyperglass/issues/151): Fix issue with Junos structured output parsing from d1160fe where hyperglass would always query both IPv4 and IPv6 for any query type. + +### Changed +- Improve handling of Junos XML errors. When a Junos device returns an error in the XML output, it will be displayed in the UI. +- Improve `hyperglass system-info` output. NodeJS version is now included in the output. + +# 1.0.3 - 2021-06-23 + +_1.0.3 is a cosmetic release to factor in code-level changes related to the repository name change from checktheroads to thatmattlove._ + +# 1.0.2 - 2021-06-18 + +### Fixed +- [#150](https://github.com/thatmattlove/hyperglass/issues/150): Fix handling of BIRD AS_PATH/Community targets. # 1.0.1 - 2021-06-17 @@ -21,13 +35,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - The transitionary `frr_ssh` and `bird_ssh` NOS parameters no longer exist — `frr` and `bird` can now be used for SSH-based connectivity. hyperglass-agent users must now use `frr_legacy` and `bird_legacy` until hyperglass-agent is fully deprecated. ### Fixed -- [#139](https://github.com/checktheroads/hyperglass/issues/139): Fix an issue where the API cannot be queried by device name. +- [#139](https://github.com/thatmattlove/hyperglass/issues/139): Fix an issue where the API cannot be queried by device name. ### Changed - Updated UI dependencies ### Added -- [#140](https://github.com/checktheroads/hyperglass/issues/140): Genericize links and menus so that multiple links and/or menus can be defined and fully customized. +- [#140](https://github.com/thatmattlove/hyperglass/issues/140): Genericize links and menus so that multiple links and/or menus can be defined and fully customized. # 1.0.0-beta.82 - 2021-04-22 @@ -35,13 +49,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), **NodeJS 14.15 or later is required**. See [the docs](https://hyperglass.dev/docs/getting-started) for installation instructions. ### Fixed -- [#135](https://github.com/checktheroads/hyperglass/issues/135): Fix an issue where Juniper indirect next-hops were empty. +- [#135](https://github.com/thatmattlove/hyperglass/issues/135): Fix an issue where Juniper indirect next-hops were empty. - Fix an issue where Juniper structured AS_PATH or Community queries would appear to fail if one address family (IPv4 or IPv6) had an empty response. For example, if an AS_PATH query for `.* 29414 .*` was made (which only returns IPv4 routes), the query would fail. ### Changed - Updated major Python dependencies (FastAPI, Scrapli, Netmiko, Pydantic, Uvicorn, Gunicorn, etc.) - Updated UI dependencies -- [#128](https://github.com/checktheroads/hyperglass/pull/128): Add `best` to all Juniper BGP Route queries. See [Juniper docs](https://www.juniper.net/documentation/us/en/software/junos/bgp/topics/ref/command/show-route-best.html) for more details. +- [#128](https://github.com/thatmattlove/hyperglass/pull/128): Add `best` to all Juniper BGP Route queries. See [Juniper docs](https://www.juniper.net/documentation/us/en/software/junos/bgp/topics/ref/command/show-route-best.html) for more details. ### Added - The driver for devices can now be overridden with the `driver` parameter. @@ -49,17 +63,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), # 1.0.0-beta.81 - 2021-04-10 ### Fixed -- [#124](https://github.com/checktheroads/hyperglass/issues/124): Fix an issue where networks weren't always sorted alphabetically. -- [#126](https://github.com/checktheroads/hyperglass/issues/126): Fix rendering of markdown tables. -- [#132](https://github.com/checktheroads/hyperglass/issues/132): Fix an issue where iBGP routes on Arista devices caused output parsing to fail. -- [#133](https://github.com/checktheroads/hyperglass/issues/133): Use body styles for background/foreground color, allowing the user to override the `light` and `dark` colors per the docs. +- [#124](https://github.com/thatmattlove/hyperglass/issues/124): Fix an issue where networks weren't always sorted alphabetically. +- [#126](https://github.com/thatmattlove/hyperglass/issues/126): Fix rendering of markdown tables. +- [#132](https://github.com/thatmattlove/hyperglass/issues/132): Fix an issue where iBGP routes on Arista devices caused output parsing to fail. +- [#133](https://github.com/thatmattlove/hyperglass/issues/133): Use body styles for background/foreground color, allowing the user to override the `light` and `dark` colors per the docs. - Fix an issue with select menu list style. ## 1.0.0-beta.80 - 2021-03-03 ### Fixed - Fix an issue where the UI did not properly filter and detect the correct Query VRF when only one was defined. -- [#121](https://github.com/checktheroads/hyperglass/issues/121): Fix issue with select menu styling in light mode. +- [#121](https://github.com/thatmattlove/hyperglass/issues/121): Fix issue with select menu styling in light mode. ## 1.0.0-beta.79 - 2021-02-26 @@ -92,14 +106,14 @@ Moving forward, the `name` field is only used to define the name of the VRF **as **POTENTIALLY BREAKING CHANGE**: The device `display_name` field is being deprecated, in favor of a single `name` field, which will be displayed to the end user. The `display_name` field still works, but you should migrate away from it as soon as possible. ### Fixed -- [#117](https://github.com/checktheroads/hyperglass/issues/117): Fix naming and mapping of the Arista EOS driver. `arista` and `arista_eos` will both work now. +- [#117](https://github.com/thatmattlove/hyperglass/issues/117): Fix naming and mapping of the Arista EOS driver. `arista` and `arista_eos` will both work now. ### Changed - Removed `display_name` field from device model. The `name` field will be used in the UI. If a `display_name` is defined, it will be used, for backwards compatibility. ## 1.0.0-beta.76 - 2021-02-06 -**NOTICE**: *[hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) will be deprecated soon. Use `frr_ssh` or `bird_ssh` for SSH connectivity in the meantime.* +**NOTICE**: *[hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) will be deprecated soon. Use `frr_ssh` or `bird_ssh` for SSH connectivity in the meantime.* ### Added - FRR & BIRD may now be accessed via standard SSH using the `frr_ssh` and `bird_ssh` NOS. [See the docs](https://hyperglass.dev/docs/platforms#caveats) for important caveats. @@ -124,24 +138,24 @@ Moving forward, the `name` field is only used to define the name of the VRF **as - Updated UI dependencies. ### Fixed -- [#109](https://github.com/checktheroads/hyperglass/issues/109): Remove the custom error page, because it doesn't work and doesn't really add much. +- [#109](https://github.com/thatmattlove/hyperglass/issues/109): Remove the custom error page, because it doesn't work and doesn't really add much. ## 1.0.0-beta.73 - 2021-01-18 ### Added -- [#106](https://github.com/checktheroads/hyperglass/issues/106): Add built-in support for Nokia SR OS (thanks @paunadeu!). +- [#106](https://github.com/thatmattlove/hyperglass/issues/106): Add built-in support for Nokia SR OS (thanks @paunadeu!). ### Changed -- [#105](https://github.com/checktheroads/hyperglass/issues/105): Check NodeJS version on startup to ensure the minimum supported version is present. +- [#105](https://github.com/thatmattlove/hyperglass/issues/105): Check NodeJS version on startup to ensure the minimum supported version is present. - Update UI dependencies. ### Fixed -- [#107](https://github.com/checktheroads/hyperglass/issues/107): Fix footer menu styling so it doesn't overflow the viewport, especially on mobile. +- [#107](https://github.com/thatmattlove/hyperglass/issues/107): Fix footer menu styling so it doesn't overflow the viewport, especially on mobile. ## 1.0.0-beta.72 - 2021-01-16 ### Fixed -- [#104](https://github.com/checktheroads/hyperglass/issues/104): Handle the usage of `juniper_junos` as a NOS. `juniper_junos` will now automatically be mapped to `juniper`. +- [#104](https://github.com/thatmattlove/hyperglass/issues/104): Handle the usage of `juniper_junos` as a NOS. `juniper_junos` will now automatically be mapped to `juniper`. - Fix an issue with dual RP juniper devices and structured output, where output containing `{master}` outside of the XML output was improperly stripped out, causing a parsing failure. ### Changed @@ -159,7 +173,7 @@ Moving forward, the `name` field is only used to define the name of the VRF **as ### Fixed -- [#100](https://github.com/checktheroads/hyperglass/issues/100): Fix result panel bug where incorrect panels would open, or panels would not open at all. Resolved by accessing internal state of the `Accordion />` component via `useAccordionContext()` instead of directly changing the index prop via state. +- [#100](https://github.com/thatmattlove/hyperglass/issues/100): Fix result panel bug where incorrect panels would open, or panels would not open at all. Resolved by accessing internal state of the `Accordion />` component via `useAccordionContext()` instead of directly changing the index prop via state. ### Changed - Query results now automatically cancel when each result panel unmounts (e.g. when one clicks the back button). @@ -197,7 +211,7 @@ Moving forward, the `name` field is only used to define the name of the VRF **as ### Added -- [#72](https://github.com/checktheroads/hyperglass/issues/72): _EXPERIMENTAL_ BGP map support for devices supporting structured output (Juniper Junos, currently). +- [#72](https://github.com/thatmattlove/hyperglass/issues/72): _EXPERIMENTAL_ BGP map support for devices supporting structured output (Juniper Junos, currently). ### Fixed @@ -212,7 +226,7 @@ Moving forward, the `name` field is only used to define the name of the VRF **as ### Added -- [#87](https://github.com/checktheroads/hyperglass/issues/87): [TNSR] Support. To add a TNSR device, use the `tnsr` [NOS key](https://hyperglass.dev/docs/adding-devices#all-device-parameters). +- [#87](https://github.com/thatmattlove/hyperglass/issues/87): [TNSR] Support. To add a TNSR device, use the `tnsr` [NOS key](https://hyperglass.dev/docs/adding-devices#all-device-parameters). ### Fixed @@ -236,17 +250,17 @@ When hyperglass starts up, it will check to see if `~/hyperglass` or `/etc/hyper ### Added -- [#81](https://github.com/checktheroads/hyperglass/issues/81): Add support for SSH key authentication. See [the docs](https://hyperglass.dev/docs/adding-devices#credential) for more details. +- [#81](https://github.com/thatmattlove/hyperglass/issues/81): Add support for SSH key authentication. See [the docs](https://hyperglass.dev/docs/adding-devices#credential) for more details. ## 1.0.0-beta.60 - 2020-10-10 ### Fixed -- [#90](https://github.com/checktheroads/hyperglass/issues/90): Fix a typing error that caused ping & traceroute queries to fail for certain devices. +- [#90](https://github.com/thatmattlove/hyperglass/issues/90): Fix a typing error that caused ping & traceroute queries to fail for certain devices. ### Added -- [#82](https://github.com/checktheroads/hyperglass/issues/82): Add support for Redis password authentication. Authentication can be configured in the following manner: +- [#82](https://github.com/thatmattlove/hyperglass/issues/82): Add support for Redis password authentication. Authentication can be configured in the following manner: ```yaml # hyperglass.yaml @@ -276,7 +290,7 @@ requirepass examplepassword ### Changed -- [#79](https://github.com/checktheroads/hyperglass/issues/79): Run the UI build on startup & clarify docs. +- [#79](https://github.com/thatmattlove/hyperglass/issues/79): Run the UI build on startup & clarify docs. - Removed all f-strings from log messages. - Migrate icon library to [@meronex/icons](https://github.com/meronex/meronex-icons) for better tree-shaking. - Improve console (stdout) logging @@ -284,16 +298,16 @@ requirepass examplepassword ### Fixed -- [#74](https://github.com/checktheroads/hyperglass/issues/74): Fix UI build failures caused by `.alias.js`. -- [#75](https://github.com/checktheroads/hyperglass/issues/75): Fix whitespace stripping of query target. -- [#77](https://github.com/checktheroads/hyperglass/issues/77): Allow dashes in FQDN validation pattern. -- [#83](https://github.com/checktheroads/hyperglass/issues/83): Fix lack of support for `protocol-nh` field in Juniper XML BGP table. +- [#74](https://github.com/thatmattlove/hyperglass/issues/74): Fix UI build failures caused by `.alias.js`. +- [#75](https://github.com/thatmattlove/hyperglass/issues/75): Fix whitespace stripping of query target. +- [#77](https://github.com/thatmattlove/hyperglass/issues/77): Allow dashes in FQDN validation pattern. +- [#83](https://github.com/thatmattlove/hyperglass/issues/83): Fix lack of support for `protocol-nh` field in Juniper XML BGP table. ## 1.0.0-beta.57 - 2020-07-30 ### BREAKING CHANGE -If you use [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent), you must upgrade your version of hyperglass-agent to 0.1.6 or later. If using hyperglass-agent with SSL, this release will require you to re-generate & re-send your SSL certificates to hyperglass: +If you use [hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent), you must upgrade your version of hyperglass-agent to 0.1.6 or later. If using hyperglass-agent with SSL, this release will require you to re-generate & re-send your SSL certificates to hyperglass: ```console $ hyperglass-agent certificate @@ -316,13 +330,13 @@ $ hyperglass-agent send-certificate ### Fixed -- [#56](https://github.com/checktheroads/hyperglass/issues/56): Fix a silent Redis connection error if the Redis server was anything other than `localhost`, preventing hyperglass from starting. +- [#56](https://github.com/thatmattlove/hyperglass/issues/56): Fix a silent Redis connection error if the Redis server was anything other than `localhost`, preventing hyperglass from starting. ## 1.0.0-beta.55 - 2020-07-27 ### Changed -- Removed JS favicon build process in favor of native Python implementation ([favicons](https://github/checktheroads/favicons)) +- Removed JS favicon build process in favor of native Python implementation ([favicons](https://github/thatmattlove/favicons)) ## 1.0.0-beta.54 - 2020-07-25 @@ -334,7 +348,7 @@ $ hyperglass-agent send-certificate ### Added -- **BREAKING CHANGE**: [Scrapli](https://github.com/carlmontanari/scrapli) is now used for SSH connectivity to Cisco IOS, Cisco IOS-XE, Cisco IOS-XR, Cisco NX-OS Juniper Junos, and Arista EOS, which should improve the speed at which output is gathered from devices. _As of this release, Cisco IOS/IOS-XE and Juniper Junos have been directly tested and worked without issue. However, if you discover any anomalies with any of these operating systems, please [open an issue](https://github.com/checktheroads/hyperglass/issues)._ +- **BREAKING CHANGE**: [Scrapli](https://github.com/carlmontanari/scrapli) is now used for SSH connectivity to Cisco IOS, Cisco IOS-XE, Cisco IOS-XR, Cisco NX-OS Juniper Junos, and Arista EOS, which should improve the speed at which output is gathered from devices. _As of this release, Cisco IOS/IOS-XE and Juniper Junos have been directly tested and worked without issue. However, if you discover any anomalies with any of these operating systems, please [open an issue](https://github.com/thatmattlove/hyperglass/issues)._ ### Changed @@ -352,23 +366,23 @@ $ hyperglass-agent send-certificate - API route `/api/info`, which displays general system information such as the name of the organization and version of hyperglass. - API docs configuration parameters for the `/api/info` route. -- [#63](https://github.com/checktheroads/hyperglass/issues/63): Minimum RAM requirements. +- [#63](https://github.com/thatmattlove/hyperglass/issues/63): Minimum RAM requirements. - `hyperglass system-info` CLI command to gather system CPU, Memory, Disk, Python Version, hyperglass Version, & OS info. _Note: this information is only gathered if you run the command, and even then, is printed to the console and not otherwise shared or exported_. ### Changed - Updated docs dependencies. - Improved YAML alias & anchor docs. -- [#55](https://github.com/checktheroads/hyperglass/issues/55): Removed YAML alias & anchors from default examples to avoid confusion. +- [#55](https://github.com/thatmattlove/hyperglass/issues/55): Removed YAML alias & anchors from default examples to avoid confusion. ### Fixed - API docs logo URL now displays correctly. -- [#62](https://github.com/checktheroads/hyperglass/issues/62): Added `epel-release` to CentOS installation instructions. -- [#59](https://github.com/checktheroads/hyperglass/issues/59): Fixed copy output for Juniper devices on non-table output query types. +- [#62](https://github.com/thatmattlove/hyperglass/issues/62): Added `epel-release` to CentOS installation instructions. +- [#59](https://github.com/thatmattlove/hyperglass/issues/59): Fixed copy output for Juniper devices on non-table output query types. - [hyperglass-agent #6](https://github.com/hyperglass-agent/issues/6): Fixed hyperglass-agent documentation issues. - Improve command customization docs. -- [#61](https://github.com/checktheroads/hyperglass/issues/61): Fixed copy output for table data. Output is now a bulleted list of parsed data. +- [#61](https://github.com/thatmattlove/hyperglass/issues/61): Fixed copy output for table data. Output is now a bulleted list of parsed data. ## 1.0.0-beta.51 - 2020-07-13 @@ -379,7 +393,7 @@ $ hyperglass-agent send-certificate ### Fixed -- [#54](https://github.com/checktheroads/hyperglass/issues/54): A Junos parsing error caused routes with no communities to raise an error. +- [#54](https://github.com/thatmattlove/hyperglass/issues/54): A Junos parsing error caused routes with no communities to raise an error. - Pre-validated config files are no longer logged on startup unless debugging is enabled. ## 1.0.0-beta.50 - 2020-07-12 @@ -399,7 +413,7 @@ $ hyperglass-agent send-certificate ### Fixed -- [#54](https://github.com/checktheroads/hyperglass/issues/54): A Junos structured/table output parsing error caused routes with multiple next-hops to raise an error. +- [#54](https://github.com/thatmattlove/hyperglass/issues/54): A Junos structured/table output parsing error caused routes with multiple next-hops to raise an error. - RPKI validation no longer occurs twice (once on serialization of the output, once on validation of the API response). ## 1.0.0-beta.49 - 2020-07-05 @@ -451,7 +465,7 @@ $ hyperglass-agent send-certificate ### Added -- Support for hyperglass-agent [0.1.5](https://github.com/checktheroads/hyperglass-agent) +- Support for hyperglass-agent [0.1.5](https://github.com/thatmattlove/hyperglass-agent) ## 1.0.0-beta.45 - 2020-06-27 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cb84717..f060ade 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -hyperglass is primarily maintained by me, [Matt Love](https://github.com/checktheroads). This is my first ever open source application, and as such, it's kind of my "baby". When I first started writing hyperglass, I knew _nothing_ about development, Python, Javascript, or Github. I was a network engineer trying to solve a problem and learn a few things while I was at it. +hyperglass is primarily maintained by me, [Matt Love](https://github.com/thatmattlove). This is my first ever open source application, and as such, it's kind of my "baby". When I first started writing hyperglass, I knew _nothing_ about development, Python, Javascript, or Github. I was a network engineer trying to solve a problem and learn a few things while I was at it. Because I've been solo-maintaining and building hyperglass since around April 2019, I've become pretty particular about things that might seem trivial to someone just trying to help out. While I **absolutely welcome development contributions**, please don't be offended if pull requests are denied, or if I request things to be done a certain way. To help understand why, here are some of the development design goals for hyperglass: diff --git a/README.md b/README.md index b86c240..f934340 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,11 @@ [![PyPI](https://img.shields.io/pypi/v/hyperglass?style=for-the-badge)](https://pypi.org/project/hyperglass/) ![PyPI - Downloads](https://img.shields.io/pypi/dm/hyperglass?color=%2340798C&style=for-the-badge) -[![GitHub Contributors](https://img.shields.io/github/contributors/checktheroads/hyperglass?color=40798C&style=for-the-badge)](https://github.com/checktheroads/hyperglass) +[![GitHub Contributors](https://img.shields.io/github/contributors/thatmattlove/hyperglass?color=40798C&style=for-the-badge)](https://github.com/thatmattlove/hyperglass) -[![Frontend Tests](https://img.shields.io/github/workflow/status/checktheroads/hyperglass/Frontend%20Testing?label=Frontend%20Tests&style=for-the-badge)](https://github.com/checktheroads/hyperglass/actions?query=workflow%3A%Frontend+Testing%22) -[![Backend Tests](https://img.shields.io/github/workflow/status/checktheroads/hyperglass/Backend%20Testing?label=Backend%20Tests&style=for-the-badge)](https://github.com/checktheroads/hyperglass/actions?query=workflow%3A%Backend+Testing%22) -[![Installer Tests](https://img.shields.io/github/workflow/status/checktheroads/hyperglass/Installer%20Testing?label=Installer%20Tests&style=for-the-badge)](https://github.com/checktheroads/hyperglass/actions?query=workflow%3A%Installer+Testing%22) +[![Frontend Tests](https://img.shields.io/github/workflow/status/thatmattlove/hyperglass/Frontend%20Testing?label=Frontend%20Tests&style=for-the-badge)](https://github.com/thatmattlove/hyperglass/actions?query=workflow%3A%Frontend+Testing%22) +[![Backend Tests](https://img.shields.io/github/workflow/status/thatmattlove/hyperglass/Backend%20Testing?label=Backend%20Tests&style=for-the-badge)](https://github.com/thatmattlove/hyperglass/actions?query=workflow%3A%Backend+Testing%22) +[![Installer Tests](https://img.shields.io/github/workflow/status/thatmattlove/hyperglass/Installer%20Testing?label=Installer%20Tests&style=for-the-badge)](https://github.com/thatmattlove/hyperglass/actions?query=workflow%3A%Installer+Testing%22)
@@ -27,7 +27,7 @@ hyperglass is intended to make implementing a looking glass too easy not to do, -### [Changelog](https://github.com/checktheroads/hyperglass/blob/v1.0.0/CHANGELOG.md) +### [Changelog](https://github.com/thatmattlove/hyperglass/blob/v1.0.0/CHANGELOG.md) ## Features @@ -56,7 +56,7 @@ hyperglass is intended to make implementing a looking glass too easy not to do, - Query multiple devices simultaneously - Browser-based DNS-over-HTTPS resolution of FQDN queries -*To request support for a specific platform, please [submit a Github Issue](https://github.com/checktheroads/hyperglass/issues/new) with the **feature** label.* +*To request support for a specific platform, please [submit a Github Issue](https://github.com/thatmattlove/hyperglass/issues/new) with the **feature** label.* ### [Get Started →](https://hyperglass.dev/docs/introduction) @@ -83,4 +83,4 @@ hyperglass is built entirely on open-source software. Here are some of the aweso - [Pydantic](https://pydantic-docs.helpmanual.io/) - [Chakra UI](https://chakra-ui.com/) -[![GitHub](https://img.shields.io/github/license/checktheroads/hyperglass?color=330036&style=for-the-badge)](https://github.com/checktheroads/hyperglass/blob/v1.0.0/LICENSE) +[![GitHub](https://img.shields.io/github/license/thatmattlove/hyperglass?color=330036&style=for-the-badge)](https://github.com/thatmattlove/hyperglass/blob/v1.0.0/LICENSE) diff --git a/docs/docs/adding-devices.mdx b/docs/docs/adding-devices.mdx index bc8be79..ea9a5d6 100644 --- a/docs/docs/adding-devices.mdx +++ b/docs/docs/adding-devices.mdx @@ -41,19 +41,19 @@ routers: ## All Device Parameters -| Parameter | Type | Description | -| :------------------ | :-----: | :----------------------------------------------------------------------------------------------------------------- | -| `name` | String | Device's user-facing name. | -| `address` | String | Device management hostname or IP address. | -| `network` | String | [Network Configuration](#network) | -| `port` | Integer | TCP port used to connect to the device. `22` by default. | -| `nos` | String | Network Operating System. Must be a supported platform. | -| `structured_output` | Boolean | Disabled output parsing to structured data. | -| `driver` | String | Override the device driver. Must be 'scrapli' or 'netmiko'. | -| `credential` | | [Device Credential Configuration](#credential) | -| `vrfs` | | [Device VRF Configuration](#vrfs) | -| `proxy` | | [SSH Proxy Configuration](#proxy) | -| `ssl` | | [SSL Configuration](#ssl) for devices using [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent). | +| Parameter | Type | Description | +| :------------------ | :-----: | :---------------------------------------------------------------------------------------------------------------- | +| `name` | String | Device's user-facing name. | +| `address` | String | Device management hostname or IP address. | +| `network` | String | [Network Configuration](#network) | +| `port` | Integer | TCP port used to connect to the device. `22` by default. | +| `nos` | String | Network Operating System. Must be a supported platform. | +| `structured_output` | Boolean | Disabled output parsing to structured data. | +| `driver` | String | Override the device driver. Must be 'scrapli' or 'netmiko'. | +| `credential` | | [Device Credential Configuration](#credential) | +| `vrfs` | | [Device VRF Configuration](#vrfs) | +| `proxy` | | [SSH Proxy Configuration](#proxy) | +| `ssl` | | [SSL Configuration](#ssl) for devices using [hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent). | ### `network` @@ -84,7 +84,7 @@ Currently, only `linux_ssh` has been tested and validated for use as an SSH prox While all devices require a credential mapping, the credential values themselves may be used in different ways depending on the device NOS. For SSH devices, the credential is used as a typical SSH username and password. -For HTTP devices (i.e. devices using [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent)), the username is ignored and the password is used as a secret for [JSON Web Token](https://tools.ietf.org/html/rfc7519) encoding/decoding. +For HTTP devices (i.e. devices using [hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent)), the username is ignored and the password is used as a secret for [JSON Web Token](https://tools.ietf.org/html/rfc7519) encoding/decoding. | Parameter | Type | Description | | :-------------- | :----- | :----------------------------------------------------------- | diff --git a/docs/docs/agent/installation.mdx b/docs/docs/agent/installation.mdx index 22cafa9..3585bd7 100644 --- a/docs/docs/agent/installation.mdx +++ b/docs/docs/agent/installation.mdx @@ -10,7 +10,7 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; :::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. +[hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/thatmattlove/hyperglass/issues/143) and [here](platforms.mdx) for more detail. ::: ## Installation @@ -77,5 +77,5 @@ $ pip3 install hyperglass-agent ``` :::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. +[hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/thatmattlove/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 ce6bdc5..8bdacfa 100644 --- a/docs/docs/agent/parameters.mdx +++ b/docs/docs/agent/parameters.mdx @@ -10,7 +10,7 @@ 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. +[hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/thatmattlove/hyperglass/issues/143) and [here](platforms.mdx) for more detail. :::
@@ -68,5 +68,5 @@ By default, hyperglass-agent writes all log messages to a log file located at `/ | `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. +[hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/thatmattlove/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 f079c51..18db315 100644 --- a/docs/docs/agent/setup.mdx +++ b/docs/docs/agent/setup.mdx @@ -9,7 +9,7 @@ description: Configure hyperglass-agent import M from "../../src/components/MiniNote"; :::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. +[hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) is going to be deprecated soon. See [Issue #143](https://github.com/thatmattlove/hyperglass/issues/143) and [here](platforms.mdx) for more detail. ::: :::important Time & NTP @@ -55,5 +55,5 @@ Options: ::: :::important More coming soon -Documentation for [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent) is in progress! +Documentation for [hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent) is in progress! ::: diff --git a/docs/docs/getting-started.mdx b/docs/docs/getting-started.mdx index e820a44..a598773 100755 --- a/docs/docs/getting-started.mdx +++ b/docs/docs/getting-started.mdx @@ -24,7 +24,7 @@ $ curl https://install.hyperglass.dev | sudo bash ``` :::caution Piping to bash -You should be very worried when someone asks you to do what I just did. Downloading a bash script from the internet and piping it to `bash` with root privileges is a terrible idea, unless you fully trust the source. Please don't trust me - go [look at the code](https://github.com/checktheroads/hyperglass/blob/v1.0.0/install.sh) and determine for your self if it's safe to execute. If you feel it's not, please proceed with the manual installation (and [tell me why](https://github.com/checktheroads/hyperglass/issues), so I can fix it). +You should be very worried when someone asks you to do what I just did. Downloading a bash script from the internet and piping it to `bash` with root privileges is a terrible idea, unless you fully trust the source. Please don't trust me - go [look at the code](https://github.com/thatmattlove/hyperglass/blob/v1.0.0/install.sh) and determine for your self if it's safe to execute. If you feel it's not, please proceed with the manual installation (and [tell me why](https://github.com/thatmattlove/hyperglass/issues), so I can fix it). ::: ## Manual Installation @@ -46,7 +46,7 @@ If you're confident upgrading your system's version of Python won't break your s ```shell-session -$ sudo apt install -y python3.6-dev python3-pip +$ sudo apt install -y python3-dev python3-pip ``` diff --git a/docs/docs/production.mdx b/docs/docs/production.mdx index 00912af..bf65c32 100644 --- a/docs/docs/production.mdx +++ b/docs/docs/production.mdx @@ -25,7 +25,7 @@ When [debug](parameters.mdx#global-settings) is set to `true`, the number of wor ### Memory -Testing shows that hyperglass is extremely memory efficient at runtime. For example, running 4 simulations BGP Route queries, with two devices utilizing [hyperglass-agent](https://github.com/checktheroads/hyperglass-agent), and two devices utilizing SSH, the server increased RAM utilization by about 20MB during execution, and went back down afterwards. +Testing shows that hyperglass is extremely memory efficient at runtime. For example, running 4 simulations BGP Route queries, with two devices utilizing [hyperglass-agent](https://github.com/thatmattlove/hyperglass-agent), and two devices utilizing SSH, the server increased RAM utilization by about 20MB during execution, and went back down afterwards. However, at build time, there are some fairly memory-intensive tasks which _will_ time out or cause strange errors without the proper amount of RAM. Testing suggests **2GB of RAM is sufficient**, however **4GB is the ideal minimum amount of RAM**. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 12c0947..a04fb45 100755 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -1,4 +1,4 @@ -const githubURL = "https://github.com/checktheroads/hyperglass"; +const githubURL = "https://github.com/thatmattlove/hyperglass"; const { googleTrackingId, algoliaKey } = process.env; @@ -8,7 +8,7 @@ const docusaurusConfig = { url: "https://hyperglass.dev", baseUrl: "/", favicon: "img/favicon.ico", - organizationName: "checktheroads", + organizationName: "thatmattlove", projectName: "hyperglass", themeConfig: { image: "opengraph.jpg", @@ -77,7 +77,7 @@ const docusaurusConfig = { }, { label: "Twitter", - href: "https://twitter.com/checktheroads", + href: "https://twitter.com/thatmattlove", }, ], }, diff --git a/hyperglass/__init__.py b/hyperglass/__init__.py index b0ab6ba..d19fd10 100644 --- a/hyperglass/__init__.py +++ b/hyperglass/__init__.py @@ -1,10 +1,10 @@ """hyperglass is a modern, customizable network looking glass written in Python 3. -https://github.com/checktheroads/hyperglass +https://github.com/thatmattlove/hyperglass The Clear BSD License -Copyright (c) 2020 Matthew Love +Copyright (c) 2021 Matthew Love All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/hyperglass/cli/commands.py b/hyperglass/cli/commands.py index dfdbd4c..c2c1e93 100644 --- a/hyperglass/cli/commands.py +++ b/hyperglass/cli/commands.py @@ -169,7 +169,9 @@ def setup(unattended): success( """Completed hyperglass installation. -After adding your hyperglass.yaml file, you should run the `hyperglass build-ui` command.""" # noqa: E501 +After adding your {devices} file, you should run the {build_cmd} command.""", # noqa: E501 + devices="devices.yaml", + build_cmd="hyperglass build-ui", ) diff --git a/hyperglass/cli/util.py b/hyperglass/cli/util.py index 981b84b..1a6759a 100644 --- a/hyperglass/cli/util.py +++ b/hyperglass/cli/util.py @@ -148,12 +148,12 @@ def write_to_file(file, data) -> bool: return True -def system_info() -> bool: +def system_info() -> None: """Create a markdown table of various system information.""" # Project from hyperglass.util.system_info import get_system_info - values = get_system_info() + data = get_system_info() def _code(val): return f"`{str(val)}`" @@ -161,39 +161,21 @@ def system_info() -> bool: def _bold(val): return f"**{str(val)}**" - def _suffix(val, suffix): - return f"{str(val)}{str(suffix)}" + md_table_lines = ("| Metric | Value |", "| :----- | :---- |") - columns = ( - ("hyperglass Version", _bold), - ("hyperglass Path", _code), - ("Python Version", _code), - ("Platform Info", _code), - ("CPU Info", None), - ("Logical Cores", _code), - ("Physical Cores", _code), - ("Processor Speed", "GHz"), - ("Total Memory", " GB"), - ("Memory Utilization", "%"), - ("Total Disk Space", " GB"), - ("Disk Utilization", "%"), - ) - md_table_lines = ("| Metric | Value |", "| ------ | ----- |") + for title, metric in data.items(): + value, mod = metric - for i, metric in enumerate(values): - title, mod = columns[i] - value = metric + title = _bold(title) - if isinstance(mod, str): - value = _suffix(value, mod) - elif callable(mod): - value = mod(value) + if mod == "code": + value = _code(value) - md_table_lines += (f"| **{title}** | {value} |",) + md_table_lines += (f"| {title} | {value} |",) md_table = "\n".join(md_table_lines) info("Please copy & paste this table in your bug report:\n") echo(md_table + "\n") - return True + return None diff --git a/hyperglass/constants.py b/hyperglass/constants.py index 9d84b95..85584b9 100644 --- a/hyperglass/constants.py +++ b/hyperglass/constants.py @@ -4,7 +4,7 @@ from datetime import datetime __name__ = "hyperglass" -__version__ = "1.0.2" +__version__ = "1.0.4" __author__ = "Matt Love" __copyright__ = f"Copyright {datetime.now().year} Matthew Love" __license__ = "BSD 3-Clause Clear License" diff --git a/hyperglass/execution/drivers/_construct.py b/hyperglass/execution/drivers/_construct.py index c9961a2..ad3f41c 100644 --- a/hyperglass/execution/drivers/_construct.py +++ b/hyperglass/execution/drivers/_construct.py @@ -41,7 +41,6 @@ class Construct: # Set AFIs for based on query type if self.query_data.query_type in ("bgp_route", "ping", "traceroute"): - # For IP queries, AFIs are enabled (not null/None) VRF -> AFI definitions # where the IP version matches the IP version of the target. self.afis = [ @@ -52,8 +51,7 @@ class Construct: ) if v is not None and self.query_data.query_target.version == v.version ] - - with Formatter(self.device.nos, self.query_data.query_type) as formatter: + elif self.query_data.query_type in ("bgp_aspath", "bgp_community"): # For AS Path/Community queries, AFIs are just enabled VRF -> AFI # definitions, no IP version checking is performed (since there is no IP). self.afis = [ @@ -64,6 +62,8 @@ class Construct: ) if v is not None ] + + with Formatter(self.device.nos, self.query_data.query_type) as formatter: self.target = formatter(self.query_data.query_target) def json(self, afi): diff --git a/hyperglass/main.py b/hyperglass/main.py index 7edf673..4741481 100644 --- a/hyperglass/main.py +++ b/hyperglass/main.py @@ -23,9 +23,9 @@ if sys.version_info < MIN_PYTHON_VERSION: raise RuntimeError(f"Python {pretty_version}+ is required.") # Ensure the NodeJS version meets the minimum requirements. -node_version = get_node_version() +node_major, _, __ = get_node_version() -if node_version != MIN_NODE_VERSION: +if node_major != MIN_NODE_VERSION: raise RuntimeError(f"NodeJS {MIN_NODE_VERSION}+ is required.") diff --git a/hyperglass/parsing/juniper.py b/hyperglass/parsing/juniper.py index 83c9fb1..3f2ad9b 100644 --- a/hyperglass/parsing/juniper.py +++ b/hyperglass/parsing/juniper.py @@ -65,6 +65,11 @@ def parse_juniper(output: Sequence) -> Dict: # noqa: C901 log.debug("Initially Parsed Response: \n{}", parsed) if "rpc-reply" in parsed.keys(): + if "xnm:error" in parsed["rpc-reply"]: + if "message" in parsed["rpc-reply"]["xnm:error"]: + err = parsed["rpc-reply"]["xnm:error"]["message"] + raise ParsingError('Error from device: "{}"', err) + parsed_base = parsed["rpc-reply"]["route-information"] elif "route-information" in parsed.keys(): parsed_base = parsed["route-information"] diff --git a/hyperglass/ui/README.md b/hyperglass/ui/README.md index f8edd2a..7bb61f2 100644 --- a/hyperglass/ui/README.md +++ b/hyperglass/ui/README.md @@ -1,3 +1,3 @@ # hyperglass-ui -[hyperglass](https://github.com/checktheroads/hyperglass) UI, written in [React](https://reactjs.org/), on [Next.js](https://nextjs.org/), with [Chakra UI](https://chakra-ui.com/). +[hyperglass](https://github.com/thatmattlove/hyperglass) UI, written in [React](https://reactjs.org/), on [Next.js](https://nextjs.org/), with [Chakra UI](https://chakra-ui.com/). diff --git a/hyperglass/util/frontend.py b/hyperglass/util/frontend.py index 130bb6f..1d2480a 100644 --- a/hyperglass/util/frontend.py +++ b/hyperglass/util/frontend.py @@ -7,7 +7,7 @@ import math import shutil import asyncio import subprocess -from typing import Dict, Optional +from typing import Dict, Tuple, Optional from pathlib import Path # Project @@ -17,7 +17,7 @@ from hyperglass.log import log from .files import copyfiles, check_path -def get_node_version() -> int: +def get_node_version() -> Tuple[int, int, int]: """Get the system's NodeJS version.""" node_path = shutil.which("node") @@ -28,9 +28,7 @@ def get_node_version() -> int: # Node returns the version as 'v14.5.0', for example. Remove the v. version = raw_version.replace("v", "") # Parse the version parts. - major, minor, patch = version.split(".") - - return int(major) + return tuple((int(v) for v in version.split("."))) def get_ui_build_timeout() -> Optional[int]: diff --git a/hyperglass/util/system_info.py b/hyperglass/util/system_info.py index 82ded69..10994b6 100644 --- a/hyperglass/util/system_info.py +++ b/hyperglass/util/system_info.py @@ -3,6 +3,7 @@ # Standard Library import os import platform +from typing import Dict, Tuple, Union # Third Party import psutil as _psutil @@ -11,8 +12,13 @@ from cpuinfo import get_cpu_info as _get_cpu_info # Project from hyperglass.constants import __version__ +# Local +from .frontend import get_node_version -def _cpu(): +SystemData = Dict[str, Tuple[Union[str, int], str]] + + +def _cpu() -> SystemData: """Construct CPU Information.""" cpu_info = _get_cpu_info() brand = cpu_info.get("brand_raw", "") @@ -22,7 +28,7 @@ def _cpu(): return (brand, cores_logical, cores_raw, cpu_ghz) -def _memory(): +def _memory() -> SystemData: """Construct RAM Information.""" mem_info = _psutil.virtual_memory() total_gb = round(mem_info.total / 1e9, 2) @@ -30,7 +36,7 @@ def _memory(): return (total_gb, usage_percent) -def _disk(): +def _disk() -> SystemData: """Construct Disk Information.""" disk_info = _psutil.disk_usage("/") total_gb = round(disk_info.total / 1e9, 2) @@ -38,19 +44,25 @@ def _disk(): return (total_gb, usage_percent) -def get_system_info(): +def get_system_info() -> SystemData: """Get system info.""" - yield __version__ - yield os.environ["hyperglass_directory"] + cpu_info, cpu_logical, cpu_physical, cpu_speed = _cpu() + mem_total, mem_usage = _memory() + disk_total, disk_usage = _disk() - yield platform.python_version() - - yield platform.platform() - - for c in _cpu(): - yield c - for m in _memory(): - yield m - for d in _disk(): - yield d + return { + "hyperglass Version": (__version__, "text"), + "hyperglass Path": (os.environ["hyperglass_directory"], "code"), + "Python Version": (platform.python_version(), "code"), + "Node Version": (".".join(str(v) for v in get_node_version()), "code"), + "Platform Info": (platform.platform(), "code"), + "CPU Info": (cpu_info, "text"), + "Logical Cores": (cpu_logical, "code"), + "Physical Cores": (cpu_physical, "code"), + "Processor Speed": (f"{cpu_speed}GHz", "code"), + "Total Memory": (f"{mem_total} GB", "text"), + "Memory Utilization": (f"{mem_usage}%", "text"), + "Total Disk Space": (f"{disk_total} GB", "text"), + "Disk Utilization": (f"{disk_usage}%", "text"), + } diff --git a/install.sh b/install.sh index fcbde44..6de2057 100755 --- a/install.sh +++ b/install.sh @@ -27,8 +27,8 @@ NEEDS_NODE="1" NEEDS_YARN="1" NEEDS_REDIS="1" -has_cmd () { - which $1 > /dev/null +has_cmd() { + which $1 >/dev/null if [[ $? == 0 ]]; then echo "0" @@ -37,30 +37,30 @@ has_cmd () { fi } -clean_temp () { +clean_temp() { echo "Cleaning up temporary files..." rm -rf /tmp/yarnkey.gpg rm -rf /tmp/nodesetup.sh } -catch_interrupt () { +catch_interrupt() { echo "Stopping..." exit 1 } -semver () { +semver() { local ver_raw=$(echo "$1" | egrep -o '[0-9]+\.[0-9]+\.[0-9]+') - local ver_digits=( ${ver_raw//./ } ) + local ver_digits=(${ver_raw//./ }) echo ${ver_digits[@]} } -parse_redis_version () { +parse_redis_version() { local one=$(echo "$@" | egrep -o 'v=[0-9]+\.[0-9]+\.[0-9]+') local two=$(echo $one | egrep -o '[0-9]+\.[0-9]+\.[0-9]+') echo $two } -python3_version () { +python3_version() { local ver_digits=($(semver "$(python3 --version)")) local major="${ver_digits[0]}" local minor="${ver_digits[1]}" @@ -80,10 +80,10 @@ python3_version () { fi } -node_version () { +node_version() { local ver_digits=($(semver "$(node --version)")) local major="${ver_digits[0]}" - + if [[ $major < $MIN_NODE_MAJOR ]]; then echo "1" elif [[ $major -ge $MIN_NODE_MAJOR ]]; then @@ -93,7 +93,7 @@ node_version () { fi } -needs_python () { +needs_python() { local has_python3=$(has_cmd "python3") if [[ $has_python3 == 1 ]]; then NEEDS_PYTHON="1" @@ -111,7 +111,7 @@ needs_python () { fi } -needs_node () { +needs_node() { local has_node=$(has_cmd node) if [[ $has_node == 1 ]]; then NEEDS_NODE="1" @@ -129,7 +129,7 @@ needs_node () { fi } -needs_yarn () { +needs_yarn() { local has_yarn=$(has_cmd yarn) if [[ $has_yarn == 1 ]]; then NEEDS_YARN="1" @@ -140,7 +140,7 @@ needs_yarn () { fi } -needs_redis () { +needs_redis() { local has_redis=$(has_cmd redis-server) if [[ $has_redis == 1 ]]; then NEEDS_REDIS="1" @@ -151,11 +151,11 @@ needs_redis () { fi } -get_platform () { +get_platform() { local use_apt=$(has_cmd apt-get) local use_yum=$(has_cmd yum) local use_brew=$(has_cmd brew) - + if [[ $use_apt == 0 ]]; then INSTALLER="apt" elif [[ $use_yum == 0 ]]; then @@ -168,7 +168,7 @@ get_platform () { fi } -python_post () { +python_post() { if [[ $1 == 0 ]]; then local successful=$(needs_python) if [[ $successful == 0 ]]; then @@ -181,7 +181,7 @@ python_post () { fi } -node_post () { +node_post() { if [[ $1 == 0 ]]; then local successful=$(needs_node) if [[ $successful == 0 ]]; then @@ -194,7 +194,7 @@ node_post () { fi } -yarn_post () { +yarn_post() { if [[ $1 == 0 ]]; then local successful=$(needs_yarn) if [[ $successful == 0 ]]; then @@ -207,7 +207,7 @@ yarn_post () { fi } -redis_post () { +redis_post() { if [[ $1 == 0 ]]; then local successful=$(needs_redis) if [[ $successful == 0 ]]; then @@ -220,14 +220,14 @@ redis_post () { fi } -node_apt_prepare () { +node_apt_prepare() { curl -sL https://deb.nodesource.com/setup_$MIN_NODE_MAJOR.x -o /tmp/nodesetup.sh sleep 1 bash /tmp/nodesetup.sh NEEDS_UPDATE="1" } -yarn_apt_prepare () { +yarn_apt_prepare() { curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg -o /tmp/yarnkey.gpg sleep 1 apt-key add /tmp/yarnkey.gpg @@ -235,62 +235,62 @@ yarn_apt_prepare () { NEEDS_UPDATE="1" } -node_yum_prepare () { +node_yum_prepare() { curl -sL https://rpm.nodesource.com/setup_$MIN_NODE_MAJOR.x -o /tmp/nodesetup.sh bash /tmp/nodesetup.sh sleep 1 NEEDS_UPDATE="1" } -yarn_yum_prepare () { +yarn_yum_prepare() { curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo sleep 1 NEEDS_UPDATE="1" } -node_apt () { +node_apt() { apt-get install -y nodejs sleep 1 node_post $? } -node_yum () { +node_yum() { yum -y install gcc-c++ make nodejs sleep 1 node_post $? } -node_brew () { +node_brew() { brew install node sleep 1 node_post $? } -yarn_apt () { +yarn_apt() { apt-get install -y yarn sleep 1 yarn_post $? } -yarn_yum () { +yarn_yum() { yum -y install gcc-c++ make yarn sleep 1 yarn_post $? } -yarn_brew () { +yarn_brew() { brew install yarn sleep 1 yarn_post $? } -python_apt () { - apt-get install -y python3.6-dev python3-pip > /dev/null +python_apt() { + apt-get install -y python3-dev python3-pip >/dev/null sleep 1 python_post $? } -python_yum () { +python_yum() { yum install centos-release-scl yum install rh-python36 yum install python3-devel @@ -299,31 +299,31 @@ python_yum () { python_post $? } -python_brew () { +python_brew() { brew install python3 sleep 1 python_post $? } -redis_apt () { +redis_apt() { apt-get install -y redis-server sleep 1 redis_post $? } -redis_yum () { +redis_yum() { yum -y install redis sleep 1 redis_post $? } -redis_brew () { +redis_brew() { brew install redis sleep 1 redis_post $? } -update_repo () { +update_repo() { if [[ $INSTALLER == "apt" ]]; then apt-get update elif [[ $INSTALLER == "yum" ]]; then @@ -333,7 +333,7 @@ update_repo () { fi } -install_python () { +install_python() { if [[ $NEEDS_PYTHON == "1" ]]; then echo "[INFO] Installing Python..." @@ -354,10 +354,10 @@ install_python () { fi } -install_node () { +install_node() { if [[ $NEEDS_NODE == "1" ]]; then echo "[INFO] Installing NodeJS..." - + if [[ $INSTALLER == "apt" ]]; then node_apt elif [[ $INSTALLER == "yum" ]]; then @@ -365,20 +365,20 @@ install_node () { elif [[ $INSTALLER == "brew" ]]; then node_brew fi - + elif [[ $NEEDS_NODE == "0" ]]; then echo "[INFO] Your system is running NodeJS $(node --version) (Minimum is $MIN_NODE_MAJOR+)." - + else echo "[ERROR] Unable to determine if your system needs NodeJS." exit 1 fi } -install_yarn () { +install_yarn() { if [[ $NEEDS_YARN == "1" ]]; then echo "[INFO] Installing Yarn..." - + if [[ $INSTALLER == "apt" ]]; then yarn_apt elif [[ $INSTALLER == "yum" ]]; then @@ -386,20 +386,20 @@ install_yarn () { elif [[ $INSTALLER == "brew" ]]; then yarn_brew fi - + elif [[ $NEEDS_YARN == "0" ]]; then echo "[INFO] Your system is running Yarn $(yarn --version) (Minimum is $MIN_YARN_MAJOR+)." - + else echo "[ERROR] Unable to determine if your system needs Yarn." exit 1 fi } -install_redis () { +install_redis() { if [[ $NEEDS_REDIS == "1" ]]; then echo "[INFO] Installing Redis..." - + if [[ $INSTALLER == "apt" ]]; then redis_apt elif [[ $INSTALLER == "yum" ]]; then @@ -407,10 +407,10 @@ install_redis () { elif [[ $INSTALLER == "brew" ]]; then redis_brew fi - + elif [[ $NEEDS_REDIS == "0" ]]; then echo "[INFO] Your system is running Redis $(parse_redis_version $(redis-server --version)) (Minimum is $MIN_REDIS_MAJOR+)." - + else echo "[ERROR] Unable to determine if your system needs Redis." exit 1 @@ -419,30 +419,30 @@ install_redis () { # The below script installs locally instead of from PyPI # -install_app () { +install_app() { echo "[INFO] Installing hyperglass..." curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -o /tmp/get-poetry.py - python3 /tmp/get-poetry.py -f -y > /dev/null + python3 /tmp/get-poetry.py -f -y >/dev/null sleep 1 source $HOME/.profile [ -d "/tmp/hyperglass" ] && rm -rf /tmp/hyperglass [ -d "/tmp/build" ] && rm -rf /tmp/build - - git clone --branch v1.0.0 --depth 1 https://github.com/checktheroads/hyperglass.git /tmp/hyperglass + + git clone --branch v1.0.0 --depth 1 https://github.com/thatmattlove/hyperglass.git /tmp/hyperglass cd /tmp/hyperglass poetry build mkdir /tmp/build - + # local build_tarball="/tmp/hyperglass/dist/hyperglass-build.tar.gz" local build_tarballs=(/tmp/hyperglass/dist/*.tar.gz) local build_tarball=${build_tarballs[-1]} local build_dir=$(basename $build_tarball .tar.gz) - + tar -xvf /tmp/hyperglass/dist/$build_dir.tar.gz -C /tmp/build cd /tmp/build/$build_dir - pip3 install . > /dev/null + pip3 install . >/dev/null if [[ ! $? == 0 ]]; then echo "[ERROR] An error occurred while trying to install hyperglass." diff --git a/pyproject.toml b/pyproject.toml index e03d917..5bb9384 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,8 +22,8 @@ keywords = ["looking glass", "network automation", "isp", "bgp", "routing"] license = "BSD-3-Clause-Clear" name = "hyperglass" readme = "README.md" -repository = "https://github.com/checktheroads/hyperglass" -version = "1.0.2" +repository = "https://github.com/thatmattlove/hyperglass" +version = "1.0.4" [tool.poetry.scripts] hyperglass = "hyperglass.console:CLI"