From 537bd42f78038ebddb537b19f17d8019f42e1832 Mon Sep 17 00:00:00 2001 From: Marek Isalski Date: Tue, 21 Jun 2022 16:10:00 +0100 Subject: [PATCH] initial import of barebones --- junos-v21-core-router.j2 | 218 +++++++++++++++++++++++++++++++++++++++ macros.j2 | 16 +++ 2 files changed, 234 insertions(+) create mode 100644 junos-v21-core-router.j2 create mode 100644 macros.j2 diff --git a/junos-v21-core-router.j2 b/junos-v21-core-router.j2 new file mode 100644 index 0000000..f7c8cff --- /dev/null +++ b/junos-v21-core-router.j2 @@ -0,0 +1,218 @@ +/* generated by bgprtrmgr using junos-v21-core-router.j2 at XXX */ +{% import "macros.j2" as macros %} + +version 21.3R1.9; +groups { +{%- set re_groups = [] %} +{%- set lag_interfaces = [] %} +{%- for interface, subinterfaces in device|get_interfaces|subinterfaces(".") %} +{%- if interface.type.value == 'lag' %}{%- do lag_interfaces.append(interface) %}{%- endif %} +{%- if '@' in interface.name %} +{%- set re = interface.name.split("@")[1] %} +{%- do re_groups.append( re ) %} +{%- set interface_name = interface.name.split("@")[0] %} +{%- set interface_context = interface.tags|get_netbox_tags_contexts|contexts_merge_last %} + {{ re }} { + system { + host-name {{ re }}.{{ device.name }}; + services { + ssh; + } + } + interfaces { + {{ interface_name}} { + unit 0 { + family inet { + {%- for address in interface|get_addresses %}{% if address|ipv4 %} + address {{ address.address }}; + {%- endif %}{%- endfor %} + } + } + } + } + } + +{%- endif %} +{%- endfor %} +} +apply-groups [ {% for re in re_groups %}{{ re }}{% if not loop.last %} {% endif %}{% endfor %} ]; +system { + root-authentication { + encrypted-password "$6$uC87jp7U$04FIKNRT3VcUzqDiaxKVRVqnQM2c48Q2NpIARsSuKVVK7gezNX92B7261QV.kRHg.yswiDhUY.SF4e/qgRNdL0"; ## SECRET-DATA + } + commit synchronize; + login { + user marek.faelix { + full-name "Marek Isalski"; + uid 2000; + class super-user; + authentication { + encrypted-password "$6$4sVD2r4y$PjAIeLZ/tJcDhsQekJI9wU2l4xYf8k6mHuzvLivK2tcFXdcHMjP23Up/oUzMRWiVtEW99foiEWuXG40tL5cHy0"; + ssh-ed25519 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM05RD1X1njHcJvPTGbaCkO7rssp6T8uTCH3b6Sk4MA9 maz@lifting-shadows"; + } + } + } + services { + ssh; + } + authentication-order [ password radius ]; + syslog { + file interactive-commands { + interactive-commands any; + } + file messages { + any notice; + authorization info; + } + } + processes { + dhcp-service { + traceoptions { + file dhcp_logfile size 10m; + level all; + flag packet; + } + } + } +} +chassis { + redundancy { + routing-engine 0 master; + routing-engine 1 backup; + } + aggregated-devices { + ethernet { + device-count {{ lag_interfaces|length }}; + } + } + fpc 0 { + pic 0 { + number-of-ports 0; + } + pic 1 { + pic-mode 100G; + } + } +} +interfaces { + +{%- for interface, subinterfaces in device|get_interfaces|subinterfaces(".") %} +{%- set interface_context = interface.tags|get_netbox_tags_contexts|contexts_merge_last %} + +{%- set interface_tags = [] %} +{%- for tag in interface.tags %} +{%- do interface_tags.append(tag.slug) %} +{%- endfor %} + +{%- if '@' in interface.name %} + /* groups interface: {{ interface.name }} */ + +{%- elif interface.mgmt_only %} + /* management interface: {{ interface.name }} */ + +{%- elif 'no-automation' in interface_tags %} + /* do not configure: {{ interface.name }} */ + +{% elif interface.lag %} + {{ interface.name }} { + gigether-options { + 802.3ad {{ interface.lag.name }}; + } + +{%- elif interface.name.startswith( 'lo' ) %} + {{ interface.name }} { + {{ macros.interface_description(interface, interface_context) }} + +{%- elif interface.type.value == 'lag' %} + {{ interface.name }} { + vlan-tagging; + aggregated-ether-options { + minimum-links 1; + link-speed 100g; + } + {{ macros.interface_description(interface, interface_context) }} + {# interface_common(interface, interface_context) #} + +{%- elif interface.type.value != 'virtual' %} + {{ interface.name }} { + {{ macros.interface_description(interface) }} + + {%- if interface.mode.value == 'access' %} + unit 0 { + {# interface_vrf(interface, interface_context) #} + {# interface_common(interface, interface_context) #} + {{ macros.interface_addresses(interface, interface_context) }} + } + {%- elif interface.mode.value == 'tagged' %} + vlan-tagging; + {%- endif %} + +{%- endif %} + +{%- if ( not interface.mgmt_only ) and ( 'no-automation' not in interface_tags ) and ( '@' not in interface.name ) %} + {%- for tagged_vlan in interface.tagged_vlans %}{%- endfor %} + + {%- if interface.mode.value == 'tagged' %} + {%- for unit, subinterface in subinterfaces %} + unit {{ unit }} { + {%- if subinterface.untagged_vlan %} + vlan-id {{ subinterface.untagged_vlan.vid }}; + {%- elif unit|int %} + vlan-id {{ unit }}; + {%- endif %} + {%- set subinterface_context = subinterface.tags|get_netbox_tags_contexts|contexts_merge_last %} + {# interface_vrf(subinterface, subinterface_context) #} + {# interface_common(subinterface, subinterface_context) #} + {{ macros.interface_addresses(subinterface, subinterface_context) }} + } + {%- endfor %} + {%- endif %} + } +{%- endif %} + +{%- endfor %} + +{# + ae34 { + vlan-tagging; + aggregated-ether-options { + minimum-links 1; + link-speed 100g; + } + unit 34 { + vlan-id 34; + family inet { + address 193.162.44.13/31; + } + family inet6 { + address 2a10:f0c0::13/127; + } + } + } + ae41 { + vlan-tagging; + aggregated-ether-options { + minimum-links 1; + link-speed 100g; + } + unit 41 { + vlan-id 41; + family inet { + address 193.162.44.14/31; + } + family inet6 { + address 2a10:f0c0::14/127; + } + } + } +#} + fxp0 { + unit 0; + } +} +routing-options { + static { + route 172.22.0.0/16 next-hop 172.22.4.1; + } +} + diff --git a/macros.j2 b/macros.j2 new file mode 100644 index 0000000..e9c972a --- /dev/null +++ b/macros.j2 @@ -0,0 +1,16 @@ +{%- macro interface_description(interface, interface_context) %} + description "{% if interface.label %}{{ interface.label|replace('"','\\"') or "-" }}: {% endif %}{{ interface.description|replace('"','\\"') or "-" }}{% if interface.connected_endpoint and interface.connected_endpoint.device %} ({% if interface.connected_endpoint.device %}{{ interface.connected_endpoint.name|replace('"','\\"') }} @ {{ interface.connected_endpoint.device.name|replace('"','\\"') }}{% endif %}){% endif %}" +{%- endmacro %} + +{%- macro interface_addresses(interface, interface_context) %} + family inet { + {%- for address in interface|get_addresses %}{% if address|ipv4 %} + address {{ address.address }} + {%- endif %}{%- endfor %} + } + family inet6 { + {%- for address in interface|get_addresses %}{% if address|ipv6 %} + address {{ address.address }} + {%- endif %}{%- endfor %} + } +{%- endmacro %}