{%- macro physical_interface_comment(interface) %}{% if interface.label %}{{ interface.label|safe_string or "-" }}: {% endif %}{{ interface.description|safe_string or "-" }}{% if interface.connected_endpoint %} ({{ interface.connected_endpoint.name|safe_string|replace('.voneus.net','') }}{% if interface.connected_endpoint.device.name %} @ {{ interface.connected_endpoint.device.name|replace('.voneus.net','')|safe_string }}{% 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]|safe_string|replace('.voneus.net','') }}]{% endif %}{% endif %}{%- endmacro %} {%- macro virtual_interface_comment(interface) %}{% if interface.label %}{{ interface.label|safe_string or "-" }}: {% endif %}{{ interface.description|safe_string or "-" }}{%- endmacro %} {%- macro interface_addresses(device, interface, interface_context, interface_tags, mtu=False) %} {%- for address in interface|get_addresses %} {%- if address|ipv4 %} /ip address add interface="{{ interface.name }}" address={{ address.address }} comment="{{ address.description }}" {%- elif address|ipv6 %} /ipv6 address add interface="{{ interface.name }}" address={{ address.address }} comment="{{ address.description }}" {%- endif %} {%- endfor %} {%- endmacro %} {%- for interface, subinterfaces in device_interfaces|subinterfaces(".") %} {%- set interface_context = interface.tags|get_netbox_tags_contexts|contexts_merge_last %} {%- if interface.type.value == "25gbase-x-sfp28"%} /interface ethernet set [ find default-name=sfp28-{{ interface.name.split("/")[-1]|int }} ] name="{{ interface.name|safe_string }}" comment="{{ physical_interface_comment( interface ) }}" {%- elif interface.type.value == "10gbase-x-sfpp"%} /interface ethernet set [ find default-name=sfp-sfpplus{{ interface.name.split("/")[-1]|int }} ] name="{{ interface.name|safe_string }}" comment="{{ physical_interface_comment( interface ) }}" {%- elif interface.type.value == "1000base-t"%} /interface ethernet set [ find default-name=ether{{ interface.name.split("/")[-1]|int }} ] name="{{ interface.name|safe_string }}" comment="{{ physical_interface_comment( interface ) }}" {%- elif interface.type.value == "virtual" %} /interface bridge add name="{{ interface.name|safe_string }}" protocol-mode=none vlan-filtering=no comment="{{ virtual_interface_comment( interface ) }}" {%- elif interface.type.value == "bridge" %} /interface bridge add name="{{ interface.name|safe_string }}" protocol-mode=none vlan-filtering=yes comment="{{ virtual_interface_comment( interface ) }}" {%- endif %} {%- set subinterface_tags = [] %} {%- for tag in interface.tags %} {%- do interface_tags.append(tag.slug) %} {%- endfor %} {%- set interface_context = interface.tags|get_netbox_tags_contexts|contexts_merge_last %} {{ interface_addresses(device, interface, interface_context, interface_tags) }} {%- for unit, subinterface in subinterfaces %} {%- set subinterface_tags = [] %} {%- for tag in subinterface.tags %} {%- do subinterface_tags.append(tag.slug) %} {%- endfor %} {%- set subinterface_context = subinterface.tags|get_netbox_tags_contexts|contexts_merge_last %} /interface vlan add name="{{ subinterface.name }}" interface="{{ interface.name }}" vlan-id={% if subinterface.untagged_vlan %}{{ subinterface.untagged_vlan.vid }}{% elif unit|int %}{{ unit }}{% else %}0{% endif %} comment="{{ subinterface.description|safe_string }}" {{ interface_addresses(device, subinterface, subinterface_context, subinterface_tags) }} {%- endfor %} {%- endfor %}