|
|
@ -1,3 +1,55 @@ |
|
|
|
{%- macro interface_description(interface, interface_context) %} |
|
|
|
description "{% if interface.label %}{{ interface.label|replace('"','\\"') or "-" }}: {% endif %}{{ interface.description|replace('"','\\"') or "-" }}{% if interface.connected_endpoint %} ({{ interface.connected_endpoint.name|replace('"','\\"')|replace('.voneus.net','') }}{% if interface.connected_endpoint.device.name %} @ {{ interface.connected_endpoint.device.name|replace('.voneus.net','')|replace('"','\\"') }}{% endif %}){% endif %}{% if interface.cable %} via [{{ interface.cable.label.split("/")[-1] }}]{% endif %}{% if interface.link_peer %} to [{{ interface.link_peer.label or interface.link_peer.name }}{% if interface.link_peer.device %} @ {{ interface.link_peer.device.name.split("/")[-1]|replace('"','\\"')|replace('.voneus.net','') }}]{% endif %}{% endif %}" |
|
|
|
{%- endmacro %} |
|
|
|
|
|
|
|
{%- macro interface_common(interface, interface_context, mtu=True) %} |
|
|
|
{%- if mtu and interface.mtu %} |
|
|
|
mtu {{ interface.mtu }}; |
|
|
|
{%- endif %} |
|
|
|
{%- endmacro %} |
|
|
|
|
|
|
|
{%- macro interface_addresses(device, interface, interface_context, interface_tags, mtu=False) %} |
|
|
|
family inet { |
|
|
|
{%- if mtu and interface.mtu %} |
|
|
|
mtu {{ interface.mtu }}; |
|
|
|
{%- endif %} |
|
|
|
{%- for address in interface|get_addresses %}{% if address|ipv4 %} |
|
|
|
address {{ address.address }}{% if address.address == device.primary_ip4.address %}{ |
|
|
|
primary; |
|
|
|
preferred; |
|
|
|
}{% else %};{% endif %} |
|
|
|
{%- endif %}{%- endfor %} |
|
|
|
|
|
|
|
filter { |
|
|
|
input control-plane-protection-IPv4; |
|
|
|
} |
|
|
|
} |
|
|
|
family inet6 { |
|
|
|
{%- if mtu and interface.mtu %} |
|
|
|
mtu {{ interface.mtu }}; |
|
|
|
{%- endif %} |
|
|
|
{%- for address in interface|get_addresses %}{% if address|ipv6 %} |
|
|
|
address {{ address.address }}{% if address.address == device.primary_ip6.address %}{ |
|
|
|
primary; |
|
|
|
preferred; |
|
|
|
}{% else %};{% endif %} |
|
|
|
{%- endif %}{%- endfor %} |
|
|
|
|
|
|
|
filter { |
|
|
|
input control-plane-protection-IPv6; |
|
|
|
} |
|
|
|
} |
|
|
|
{%- set tags = interface.tags|tags_to_map %} |
|
|
|
{%- if 'core-isis-link' in tags %} |
|
|
|
family iso; |
|
|
|
family mpls; |
|
|
|
{%- elif 'isis-loopback' in tags %} |
|
|
|
family iso { |
|
|
|
address {{ device.primary_ip4.address|ipv4_to_iso }}; |
|
|
|
} |
|
|
|
{%- endif %} |
|
|
|
{%- endmacro %} |
|
|
|
|
|
|
|
{{ "interfaces"|progress }} { |
|
|
|
|
|
|
|
{%- for interface, subinterfaces in device_interfaces|subinterfaces(".") %} |
|
|
@ -19,16 +71,16 @@ |
|
|
|
|
|
|
|
{% elif interface.lag %} |
|
|
|
{{ interface.name }} { |
|
|
|
{{ macros.interface_description(interface, interface_context) }} |
|
|
|
{{ macros.interface_common(interface, interface_context, mtu=False) }} |
|
|
|
{{ interface_description(interface, interface_context) }} |
|
|
|
{{ interface_common(interface, interface_context, mtu=False) }} |
|
|
|
gigether-options { |
|
|
|
802.3ad {{ interface.lag.name }}; |
|
|
|
} |
|
|
|
|
|
|
|
{%- elif interface.name.startswith( 'lo' ) %} |
|
|
|
{{ interface.name }} { |
|
|
|
{{ macros.interface_description(interface, interface_context) }} |
|
|
|
{{ macros.interface_common(interface, interface_context) }} |
|
|
|
{{ interface_description(interface, interface_context) }} |
|
|
|
{{ interface_common(interface, interface_context) }} |
|
|
|
|
|
|
|
{%- for unit, subinterface in subinterfaces %} |
|
|
|
{%- set subinterface_tags = [] %} |
|
|
@ -42,9 +94,9 @@ |
|
|
|
vlan-id {{ unit }}; |
|
|
|
{%- endif %} |
|
|
|
{%- set subinterface_context = subinterface.tags|get_netbox_tags_contexts|contexts_merge_last %} |
|
|
|
{{ macros.interface_description(subinterface, subinterface_context) }} |
|
|
|
{{ macros.interface_common(subinterface, subinterface_context, mtu=False) }} |
|
|
|
{{ macros.interface_addresses(device, subinterface, subinterface_context, subinterface_tags, mtu=False) }} |
|
|
|
{{ interface_description(subinterface, subinterface_context) }} |
|
|
|
{{ interface_common(subinterface, subinterface_context, mtu=False) }} |
|
|
|
{{ interface_addresses(device, subinterface, subinterface_context, subinterface_tags, mtu=False) }} |
|
|
|
} |
|
|
|
{%- endfor %} |
|
|
|
|
|
|
@ -55,18 +107,18 @@ |
|
|
|
minimum-links 1; |
|
|
|
link-speed 100g; |
|
|
|
} |
|
|
|
{{ macros.interface_description(interface, interface_context) }} |
|
|
|
{{ macros.interface_common(interface, interface_context, mtu=True) }} |
|
|
|
{{ interface_description(interface, interface_context) }} |
|
|
|
{{ interface_common(interface, interface_context, mtu=True) }} |
|
|
|
|
|
|
|
{%- elif interface.type.value != 'virtual' %} |
|
|
|
{{ interface.name }} { |
|
|
|
{{ macros.interface_description(interface) }} |
|
|
|
{{ interface_description(interface) }} |
|
|
|
|
|
|
|
{%- if not interface.mode or ( interface.mode.value == 'access' ) %} |
|
|
|
unit 0 { |
|
|
|
{{ macros.interface_description(interface, interface_context) }} |
|
|
|
{{ macros.interface_common(interface, interface_context, mtu=False) }} |
|
|
|
{{ macros.interface_addresses(device, interface, interface_context, interface_tags, mtu=True) }} |
|
|
|
{{ interface_description(interface, interface_context) }} |
|
|
|
{{ interface_common(interface, interface_context, mtu=False) }} |
|
|
|
{{ interface_addresses(device, interface, interface_context, interface_tags, mtu=True) }} |
|
|
|
} |
|
|
|
{%- elif interface.mode.value == 'tagged' %} |
|
|
|
vlan-tagging; |
|
|
@ -91,9 +143,9 @@ |
|
|
|
vlan-id {{ unit }}; |
|
|
|
{%- endif %} |
|
|
|
{%- set subinterface_context = subinterface.tags|get_netbox_tags_contexts|contexts_merge_last %} |
|
|
|
{{ macros.interface_description(subinterface, subinterface_context) }} |
|
|
|
{{ macros.interface_common(subinterface, subinterface_context, mtu=False) }} |
|
|
|
{{ macros.interface_addresses(device, subinterface, subinterface_context, subinterface_tags, mtu=True) }} |
|
|
|
{{ interface_description(subinterface, subinterface_context) }} |
|
|
|
{{ interface_common(subinterface, subinterface_context, mtu=False) }} |
|
|
|
{{ interface_addresses(device, subinterface, subinterface_context, subinterface_tags, mtu=True) }} |
|
|
|
} |
|
|
|
{%- endfor %} |
|
|
|
{%- endif %} |
|
|
|