1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

add FRR and BIRD SSH support

This commit is contained in:
checktheroads
2021-02-06 00:19:29 -07:00
parent 7c41c577d0
commit 6bef010446
6 changed files with 125 additions and 3 deletions

View File

@@ -1,6 +1,7 @@
"""Validate command configuration variables."""
# Local
from .frr import FRRCommands
from .tnsr import TNSRCommands
from .vyos import VyosCommands
from ..main import HyperglassModelExtra
@@ -14,12 +15,15 @@ from .cisco_nxos import CiscoNXOSCommands
from .nokia_sros import NokiaSROSCommands
from .mikrotik_routeros import MikrotikRouterOS
from .mikrotik_switchos import MikrotikSwitchOS
from .bird import BIRDCommands
_NOS_MAP = {
"arista": AristaCommands,
"bird_ssh": BIRDCommands,
"cisco_ios": CiscoIOSCommands,
"cisco_nxos": CiscoNXOSCommands,
"cisco_xr": CiscoXRCommands,
"frr_ssh": FRRCommands,
"huawei": HuaweiCommands,
"juniper": JuniperCommands,
"mikrotik_routeros": MikrotikRouterOS,
@@ -33,12 +37,14 @@ _NOS_MAP = {
class Commands(HyperglassModelExtra):
"""Base class for command definitions."""
juniper: CommandGroup = JuniperCommands()
arista: CommandGroup = AristaCommands()
bird_ssh: CommandGroup = BIRDCommands()
cisco_ios: CommandGroup = CiscoIOSCommands()
cisco_xr: CommandGroup = CiscoXRCommands()
cisco_nxos: CommandGroup = CiscoNXOSCommands()
cisco_xr: CommandGroup = CiscoXRCommands()
frr_ssh: CommandGroup = FRRCommands()
huawei: CommandGroup = HuaweiCommands()
juniper: CommandGroup = JuniperCommands()
mikrotik_routeros: CommandGroup = MikrotikRouterOS()
mikrotik_switchos: CommandGroup = MikrotikSwitchOS()
nokia_sros: CommandGroup = NokiaSROSCommands()

View File

@@ -0,0 +1,56 @@
"""BIRD Routing Daemon Command Model."""
# Third Party
from pydantic import StrictStr
# Local
from .common import CommandSet, CommandGroup
class _IPv4(CommandSet):
"""Default commands for ipv4 commands."""
bgp_community: str = 'birdc "show route all where {target} ~ bgp_community"'
bgp_aspath: str = 'birdc "show route all where bgp_path ~ {target}"'
bgp_route: str = 'birdc "show route all where {target} ~ net"'
ping: str = "ping -4 -c 5 -I {source} {target}"
traceroute: str = "traceroute -4 -w 1 -q 1 -s {source} {target}"
class _IPv6(CommandSet):
"""Default commands for ipv6 commands."""
bgp_community: str = 'birdc "show route all where {target} ~ bgp_community"'
bgp_aspath: str = 'birdc "show route all where bgp_path ~ {target}"'
bgp_route: str = 'birdc "show route all where {target} ~ net"'
ping: StrictStr = "ping -6 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -6 -w 1 -q 1 -s {source} {target}"
class _VPNIPv4(CommandSet):
"""Default commands for dual afi commands."""
bgp_community: str = 'birdc "show route all table {vrf} where {target} ~ bgp_community"'
bgp_aspath: str = 'birdc "show route all table {vrf} where bgp_path ~ {target}"'
bgp_route: str = 'birdc "show route all table {vrf} where {target} ~ net"'
ping: StrictStr = "ping -4 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -4 -w 1 -q 1 -s {source} {target}"
class _VPNIPv6(CommandSet):
"""Default commands for dual afi commands."""
bgp_community: str = 'birdc "show route all table {vrf} where {target} ~ bgp_community"'
bgp_aspath: str = 'birdc "show route all table {vrf} where bgp_path ~ {target}"'
bgp_route: str = 'birdc "show route all table {vrf} where {target} ~ net"'
ping: StrictStr = "ping -6 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -6 -w 1 -q 1 -s {source} {target}"
class BIRDCommands(CommandGroup):
"""Validation model for default BIRD commands."""
ipv4_default: _IPv4 = _IPv4()
ipv6_default: _IPv6 = _IPv6()
ipv4_vpn: _VPNIPv4 = _VPNIPv4()
ipv6_vpn: _VPNIPv6 = _VPNIPv6()

View File

@@ -0,0 +1,56 @@
"""FRRouting Command Model."""
# Third Party
from pydantic import StrictStr
# Local
from .common import CommandSet, CommandGroup
class _IPv4(CommandSet):
"""Default commands for ipv4 commands."""
bgp_community: StrictStr = 'vtysh -c "show bgp ipv4 unicast community {target}"'
bgp_aspath: StrictStr = 'vtysh -c "show bgp ipv4 unicast regexp {target}"'
bgp_route: StrictStr = 'vtysh -c "show bgp ipv4 unicast {target}"'
ping: StrictStr = "ping -4 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -4 -w 1 -q 1 -s {source} {target}"
class _IPv6(CommandSet):
"""Default commands for ipv6 commands."""
bgp_community: StrictStr = 'vtysh -c "show bgp ipv6 unicast community {target}"'
bgp_aspath: StrictStr = 'vtysh -c "show bgp ipv6 unicast regexp {target}"'
bgp_route: StrictStr = 'vtysh -c "show bgp ipv6 unicast {target}"'
ping: StrictStr = "ping -6 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -6 -w 1 -q 1 -s {source} {target}"
class _VPNIPv4(CommandSet):
"""Default commands for dual afi commands."""
bgp_community: StrictStr = 'vtysh -c "show bgp vrf {vrf} ipv4 unicast community {target}"'
bgp_aspath: StrictStr = 'vtysh -c "show bgp vrf {vrf} ipv4 unicast regexp {target}"'
bgp_route: StrictStr = 'vtysh -c "show bgp vrf {vrf} ipv4 unicast {target}"'
ping: StrictStr = "ping -4 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -4 -w 1 -q 1 -s {source} {target}"
class _VPNIPv6(CommandSet):
"""Default commands for dual afi commands."""
bgp_community: StrictStr = 'vtysh -c "show bgp vrf {vrf} ipv6 unicast community {target}"'
bgp_aspath: StrictStr = 'vtysh -c "show bgp vrf {vrf} ipv6 unicast regexp {target}"'
bgp_route: StrictStr = 'vtysh -c "show bgp vrf {vrf} ipv6 unicast {target}"'
ping: StrictStr = "ping -6 -c 5 -I {source} {target}"
traceroute: StrictStr = "traceroute -6 -w 1 -q 1 -s {source} {target}"
class FRRCommands(CommandGroup):
"""Validation model for default FRRouting commands."""
ipv4_default: _IPv4 = _IPv4()
ipv6_default: _IPv6 = _IPv6()
ipv4_vpn: _VPNIPv4 = _VPNIPv4()
ipv6_vpn: _VPNIPv6 = _VPNIPv6()

View File

@@ -50,7 +50,7 @@ class Device(HyperglassModel):
credential: Credential
proxy: Optional[Proxy]
display_name: StrictStr
port: StrictInt
port: StrictInt = 22
ssl: Optional[Ssl]
nos: StrictStr
commands: Optional[StrictStr]