mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
411 lines
9.4 KiB
Python
411 lines
9.4 KiB
Python
"""Constant definitions used throughout the application."""
|
|
|
|
# Standard Library
|
|
from datetime import datetime
|
|
|
|
__name__ = "hyperglass"
|
|
__version__ = "1.0.0-beta.27"
|
|
__author__ = "Matt Love"
|
|
__copyright__ = f"Copyright {datetime.now().year} Matthew Love"
|
|
__license__ = "BSD 3-Clause Clear License"
|
|
|
|
METADATA = (__name__, __version__, __author__, __copyright__, __license__)
|
|
|
|
MIN_PYTHON_VERSION = (3, 6)
|
|
|
|
protocol_map = {80: "http", 8080: "http", 443: "https", 8443: "https"}
|
|
|
|
TARGET_FORMAT_SPACE = ("huawei", "huawei_vrpv8")
|
|
|
|
TARGET_JUNIPER_ASPATH = ("juniper", "juniper_junos")
|
|
|
|
STATUS_CODE_MAP = {"warning": 400, "error": 400, "danger": 500}
|
|
|
|
DNS_OVER_HTTPS = {
|
|
"google": "https://dns.google/resolve",
|
|
"cloudflare": "https://cloudflare-dns.com/dns-query",
|
|
}
|
|
|
|
CREDIT = """
|
|
Powered by [**hyperglass**](https://github.com/checktheroads/hyperglass) version \
|
|
{version}. Source code licensed \
|
|
[_BSD 3-Clause Clear_](https://github.com/checktheroads/hyperglass/blob/master/LICENSE).
|
|
"""
|
|
|
|
DEFAULT_TERMS = """
|
|
By using {site_title}, you agree to be bound by the following terms of use:
|
|
|
|
All queries executed on this page are logged for analysis and troubleshooting. \
|
|
Users are prohibited from automating queries, or attempting to process queries in \
|
|
bulk. This service is provided on a best effort basis, and {org_name} \
|
|
makes no availability or performance warranties or guarantees whatsoever.
|
|
"""
|
|
|
|
DEFAULT_DETAILS = {
|
|
"bgp_aspath": """
|
|
{site_title} accepts the following `AS_PATH` regular expression patterns:
|
|
|
|
| Expression | Match |
|
|
| :------------------- | :-------------------------------------------- |
|
|
| `_65000$` | Originated by 65000 |
|
|
| `^65000_` | Received from 65000 |
|
|
| `_65000_` | Via 65000 |
|
|
| `_65000_65001_` | Via 65000 and 65001 |
|
|
| `_65000(_.+_)65001$` | Anything from 65001 that passed through 65000 |
|
|
""",
|
|
"bgp_community": """
|
|
{site_title} makes use of the following BGP communities:
|
|
|
|
| Community | Description |
|
|
| :-------- | :---------- |
|
|
| `65000:1` | Example 1 |
|
|
| `65000:2` | Example 2 |
|
|
| `65000:3` | Example 3 |
|
|
""",
|
|
"bgp_route": """
|
|
Performs BGP table lookup based on IPv4/IPv6 prefix.
|
|
""",
|
|
"ping": """
|
|
Sends 5 ICMP echo requests to the target.
|
|
""",
|
|
"traceroute": """
|
|
Performs UDP Based traceroute to the target. \
|
|
For information about how to interpret traceroute results, [click here]\
|
|
(https://hyperglass.readthedocs.io/en/latest/assets/traceroute_nanog.pdf).
|
|
""",
|
|
}
|
|
|
|
DEFAULT_INFO = {
|
|
"bgp_route": """
|
|
---
|
|
template: bgp_route
|
|
---
|
|
Performs BGP table lookup based on IPv4/IPv6 prefix.
|
|
""",
|
|
"bgp_community": """
|
|
---
|
|
template: bgp_community
|
|
---
|
|
Performs BGP table lookup based on <a href="https://tools.ietf.org/html/rfc4360" target\
|
|
="_blank">Extended</a> or <a href="https://tools.ietf.org/html/rfc8195" target=\
|
|
"_blank">Large</a> community value.
|
|
|
|
""",
|
|
"bgp_aspath": """
|
|
---
|
|
template: bgp_aspath
|
|
---
|
|
Performs BGP table lookup based on `AS_PATH` regular expression.
|
|
|
|
""",
|
|
"ping": """
|
|
---
|
|
template: ping
|
|
---
|
|
Sends 5 ICMP echo requests to the target.
|
|
""",
|
|
"traceroute": """
|
|
---
|
|
template: traceroute
|
|
---
|
|
Performs UDP Based traceroute to the target.<br>For information about how to \
|
|
interpret traceroute results, <a href="https://hyperglass.readthedocs.io/en/latest/ass\
|
|
ets/traceroute_nanog.pdf" target="_blank">click here</a>.
|
|
""",
|
|
}
|
|
|
|
|
|
DEFAULT_HELP = """
|
|
##### BGP Route
|
|
|
|
Performs BGP table lookup based on IPv4/IPv6 prefix.
|
|
|
|
---
|
|
|
|
##### BGP Community
|
|
|
|
Performs BGP table lookup based on [Extended](https://tools.ietf.org/html/rfc4360) \
|
|
or [Large](https://tools.ietf.org/html/rfc8195) community value.
|
|
|
|
---
|
|
|
|
##### BGP AS Path
|
|
|
|
Performs BGP table lookup based on `AS_PATH` regular expression.
|
|
|
|
---
|
|
|
|
##### Ping
|
|
|
|
Sends 5 ICMP echo requests to the target.
|
|
|
|
---
|
|
|
|
##### Traceroute
|
|
|
|
Performs UDP Based traceroute to the target.
|
|
|
|
For information about how to interpret traceroute results, [click here]\
|
|
(https://hyperglass.readthedocs.io/en/latest/assets/traceroute_nanog.pdf).
|
|
"""
|
|
|
|
SUPPORTED_QUERY_FIELDS = ("query_location", "query_type", "query_target", "query_vrf")
|
|
SUPPORTED_QUERY_TYPES = (
|
|
"bgp_route",
|
|
"bgp_community",
|
|
"bgp_aspath",
|
|
"ping",
|
|
"traceroute",
|
|
)
|
|
|
|
FUNC_COLOR_MAP = {
|
|
"primary": "cyan",
|
|
"secondary": "blue",
|
|
"success": "green",
|
|
"warning": "yellow",
|
|
"error": "orange",
|
|
"danger": "red",
|
|
}
|
|
|
|
TRANSPORT_REST = ("frr", "bird")
|
|
|
|
TRANSPORT_SCRAPE = (
|
|
"a10",
|
|
"accedian",
|
|
"alcatel_aos",
|
|
"alcatel_sros",
|
|
"apresia_aeos",
|
|
"arista_eos",
|
|
"aruba_os",
|
|
"avaya_ers",
|
|
"avaya_vsp",
|
|
"brocade_fastiron",
|
|
"brocade_netiron",
|
|
"brocade_nos",
|
|
"brocade_vdx",
|
|
"brocade_vyos",
|
|
"checkpoint_gaia",
|
|
"calix_b6",
|
|
"ciena_saos",
|
|
"cisco_asa",
|
|
"cisco_ios",
|
|
"cisco_ios_telnet",
|
|
"cisco_nxos",
|
|
"cisco_s300",
|
|
"cisco_tp",
|
|
"cisco_wlc",
|
|
"cisco_xe",
|
|
"cisco_xr",
|
|
"coriant",
|
|
"dell_dnos9",
|
|
"dell_force10",
|
|
"dell_os6",
|
|
"dell_os9",
|
|
"dell_os10",
|
|
"dell_powerconnect",
|
|
"dell_isilon",
|
|
"eltex",
|
|
"enterasys",
|
|
"extreme",
|
|
"extreme_ers",
|
|
"extreme_exos",
|
|
"extreme_netiron",
|
|
"extreme_nos",
|
|
"extreme_slx",
|
|
"extreme_vdx",
|
|
"extreme_vsp",
|
|
"extreme_wing",
|
|
"f5_ltm",
|
|
"f5_tmsh",
|
|
"f5_linux",
|
|
"fortinet",
|
|
"generic_termserver",
|
|
"hp_comware",
|
|
"hp_procurve",
|
|
"huawei",
|
|
"huawei_vrpv8",
|
|
"ipinfusion_ocnos",
|
|
"juniper",
|
|
"juniper_junos",
|
|
"linux",
|
|
"mellanox",
|
|
"mrv_optiswitch",
|
|
"netapp_cdot",
|
|
"netscaler",
|
|
"ovs_linux",
|
|
"paloalto_panos",
|
|
"pluribus",
|
|
"quanta_mesh",
|
|
"rad_etx",
|
|
"ruckus_fastiron",
|
|
"ubiquiti_edge",
|
|
"ubiquiti_edgeswitch",
|
|
"vyatta_vyos",
|
|
"vyos",
|
|
"oneaccess_oneos",
|
|
)
|
|
|
|
SCRAPE_HELPERS = {
|
|
"junos": "juniper",
|
|
"ios": "cisco_ios",
|
|
}
|
|
|
|
|
|
class Supported:
|
|
"""Define items supported by hyperglass.
|
|
|
|
query_types: Supported query types used to validate Flask input.
|
|
|
|
rest: Supported REST API platforms
|
|
|
|
scrape: Supported "scrape" platforms which will be accessed via
|
|
Netmiko. List updated 07/2019.
|
|
"""
|
|
|
|
query_parameters = ("query_location", "query_type", "query_target", "query_vrf")
|
|
|
|
query_types = ("bgp_route", "bgp_community", "bgp_aspath", "ping", "traceroute")
|
|
|
|
rest = ("frr", "bird")
|
|
|
|
scrape = (
|
|
"a10",
|
|
"accedian",
|
|
"alcatel_aos",
|
|
"alcatel_sros",
|
|
"apresia_aeos",
|
|
"arista_eos",
|
|
"aruba_os",
|
|
"avaya_ers",
|
|
"avaya_vsp",
|
|
"brocade_fastiron",
|
|
"brocade_netiron",
|
|
"brocade_nos",
|
|
"brocade_vdx",
|
|
"brocade_vyos",
|
|
"checkpoint_gaia",
|
|
"calix_b6",
|
|
"ciena_saos",
|
|
"cisco_asa",
|
|
"cisco_ios",
|
|
"cisco_ios_telnet",
|
|
"cisco_nxos",
|
|
"cisco_s300",
|
|
"cisco_tp",
|
|
"cisco_wlc",
|
|
"cisco_xe",
|
|
"cisco_xr",
|
|
"coriant",
|
|
"dell_dnos9",
|
|
"dell_force10",
|
|
"dell_os6",
|
|
"dell_os9",
|
|
"dell_os10",
|
|
"dell_powerconnect",
|
|
"dell_isilon",
|
|
"eltex",
|
|
"enterasys",
|
|
"extreme",
|
|
"extreme_ers",
|
|
"extreme_exos",
|
|
"extreme_netiron",
|
|
"extreme_nos",
|
|
"extreme_slx",
|
|
"extreme_vdx",
|
|
"extreme_vsp",
|
|
"extreme_wing",
|
|
"f5_ltm",
|
|
"f5_tmsh",
|
|
"f5_linux",
|
|
"fortinet",
|
|
"generic_termserver",
|
|
"hp_comware",
|
|
"hp_procurve",
|
|
"huawei",
|
|
"huawei_vrpv8",
|
|
"ipinfusion_ocnos",
|
|
"juniper",
|
|
"juniper_junos",
|
|
"linux",
|
|
"mellanox",
|
|
"mrv_optiswitch",
|
|
"netapp_cdot",
|
|
"netscaler",
|
|
"ovs_linux",
|
|
"paloalto_panos",
|
|
"pluribus",
|
|
"quanta_mesh",
|
|
"rad_etx",
|
|
"ruckus_fastiron",
|
|
"ubiquiti_edge",
|
|
"ubiquiti_edgeswitch",
|
|
"vyatta_vyos",
|
|
"vyos",
|
|
"oneaccess_oneos",
|
|
)
|
|
|
|
@staticmethod
|
|
def is_supported(nos):
|
|
"""Verify if NOS is supported.
|
|
|
|
Arguments:
|
|
nos {str} -- NOS short name
|
|
|
|
Returns:
|
|
{bool} -- True if supported
|
|
"""
|
|
return bool(nos in Supported.rest + Supported.scrape)
|
|
|
|
@staticmethod
|
|
def is_scrape(nos):
|
|
"""Verify if NOS transport is scrape.
|
|
|
|
Arguments:
|
|
nos {str} -- NOS short name
|
|
|
|
Returns:
|
|
{bool} -- True if scrape
|
|
"""
|
|
return bool(nos in Supported.scrape)
|
|
|
|
@staticmethod
|
|
def is_rest(nos):
|
|
"""Verify if NOS transport is REST.
|
|
|
|
Arguments:
|
|
nos {str} -- NOS short name
|
|
|
|
Returns:
|
|
{bool} -- True if REST
|
|
"""
|
|
return bool(nos in Supported.rest)
|
|
|
|
@staticmethod
|
|
def is_supported_query(query_type):
|
|
"""Verify if query type is supported.
|
|
|
|
Arguments:
|
|
query_type {str} -- query type
|
|
|
|
Returns:
|
|
{bool} -- True if supported
|
|
"""
|
|
return bool(query_type in Supported.query_types)
|
|
|
|
@staticmethod
|
|
def map_transport(nos):
|
|
"""Map NOS to transport name.
|
|
|
|
Arguments:
|
|
nos {str} -- NOS short name
|
|
|
|
Returns:
|
|
{str} -- Transport name
|
|
"""
|
|
transport = None
|
|
if nos in Supported.scrape:
|
|
transport = "scrape"
|
|
elif nos in Supported.rest:
|
|
transport = "rest"
|
|
return transport
|