lookingglass/hyperglass/defaults/directives/juniper.py
2024-03-20 00:57:11 -04:00

174 lines
4.9 KiB
Python

"""Default Juniper Directives."""
# Project
from hyperglass.models.directive import (
Text,
RuleWithIPv4,
RuleWithIPv6,
RuleWithPattern,
BuiltinDirective,
)
__all__ = (
"JuniperBGPRoute",
"JuniperBGPASPath",
"JuniperBGPCommunity",
"JuniperPing",
"JuniperTraceroute",
"JuniperBGPRouteTable",
"JuniperBGPASPathTable",
"JuniperBGPCommunityTable",
)
NAME = "Juniper Junos"
PLATFORMS = ["juniper", "juniper_junos"]
JuniperBGPRoute = BuiltinDirective(
id="__hyperglass_juniper_bgp_route__",
name="BGP Route",
rules=[
RuleWithIPv4(
condition="0.0.0.0/0",
action="permit",
command="show route protocol bgp table inet.0 {target} detail",
),
RuleWithIPv6(
condition="::/0",
action="permit",
command="show route protocol bgp table inet6.0 {target} detail",
),
],
field=Text(description="IP Address, Prefix, or Hostname"),
table_output="__hyperglass_juniper_bgp_route_table__",
platforms=PLATFORMS,
)
JuniperBGPASPath = BuiltinDirective(
id="__hyperglass_juniper_bgp_aspath__",
name="BGP AS Path",
rules=[
RuleWithPattern(
condition="*",
action="permit",
commands=[
'show route protocol bgp table inet.0 aspath-regex "{target}"',
'show route protocol bgp table inet6.0 aspath-regex "{target}"',
],
)
],
field=Text(description="AS Path Regular Expression"),
table_output="__hyperglass_juniper_bgp_aspath_table__",
platforms=PLATFORMS,
)
JuniperBGPCommunity = BuiltinDirective(
id="__hyperglass_juniper_bgp_community__",
name="BGP Community",
rules=[
RuleWithPattern(
condition="*",
action="permit",
commands=[
'show route protocol bgp table inet.0 community "{target}" detail',
'show route protocol bgp table inet6.0 community "{target}" detail',
],
)
],
field=Text(description="BGP Community String"),
table_output="__hyperglass_juniper_bgp_community_table__",
platforms=PLATFORMS,
)
JuniperPing = BuiltinDirective(
id="__hyperglass_juniper_ping__",
name="Ping",
rules=[
RuleWithIPv4(
condition="0.0.0.0/0",
action="permit",
command="ping inet {target} count 5 source {source4}",
),
RuleWithIPv6(
condition="::/0",
action="permit",
command="ping inet6 {target} count 5 source {source6}",
),
],
field=Text(description="IP Address, Prefix, or Hostname"),
platforms=PLATFORMS,
)
JuniperTraceroute = BuiltinDirective(
id="__hyperglass_juniper_traceroute__",
name="Traceroute",
rules=[
RuleWithIPv4(
condition="0.0.0.0/0",
action="permit",
command="traceroute inet {target} wait 1 source {source4}",
),
RuleWithIPv6(
condition="::/0",
action="permit",
command="traceroute inet6 {target} wait 1 source {source6}",
),
],
field=Text(description="IP Address, Prefix, or Hostname"),
platforms=PLATFORMS,
)
# Table Output Directives
JuniperBGPRouteTable = BuiltinDirective(
id="__hyperglass_juniper_bgp_route_table__",
name="BGP Route",
rules=[
RuleWithIPv4(
condition="0.0.0.0/0",
action="permit",
command="show route protocol bgp table inet.0 {target} best detail | display xml",
),
RuleWithIPv6(
condition="::/0",
action="permit",
command="show route protocol bgp table inet6.0 {target} best detail | display xml",
),
],
field=Text(description="IP Address, Prefix, or Hostname"),
platforms=PLATFORMS,
)
JuniperBGPASPathTable = BuiltinDirective(
id="__hyperglass_juniper_bgp_aspath_table__",
name="BGP AS Path",
rules=[
RuleWithPattern(
condition="*",
action="permit",
commands=[
'show route protocol bgp table inet.0 aspath-regex "{target}" detail | display xml',
'show route protocol bgp table inet6.0 aspath-regex "{target}" detail | display xml',
],
)
],
field=Text(description="AS Path Regular Expression"),
platforms=PLATFORMS,
)
JuniperBGPCommunityTable = BuiltinDirective(
id="__hyperglass_juniper_bgp_community_table__",
name="BGP Community",
rules=[
RuleWithPattern(
condition="*",
action="permit",
commands=[
"show route protocol bgp table inet.0 community {target} detail | display xml",
"show route protocol bgp table inet6.0 community {target} detail | display xml",
],
)
],
field=Text(description="BGP Community String"),
platforms=PLATFORMS,
)