diff --git a/includes/routeros-v7-aggregation-router/interfaces.j2 b/includes/routeros-v7-aggregation-router/interfaces.j2 index 913d469..dd9d59f 100644 --- a/includes/routeros-v7-aggregation-router/interfaces.j2 +++ b/includes/routeros-v7-aggregation-router/interfaces.j2 @@ -1,11 +1,54 @@ -/ip address -add address=172.22.1.204/24 interface=ether1 network=172.22.1.0 -add address=169.254.0.2/30 interface=vlan0666 network=169.254.0.0 -add address=185.66.206.1 interface=loopback network=185.66.206.1 -add address=169.254.0.2 interface=vlan0666 network=193.162.44.17 -add address=185.66.206.2 interface=loopback network=185.66.206.2 -add address=185.66.206.3 interface=loopback network=185.66.206.3 - -/ipv6 address -add address=2a04:1840:1466::/48 advertise=no interface=loopback -add address=2a10:f0c0:1::4:666:2004/112 advertise=no interface=vlan0666 +{%- macro physical_interface_comment(interface) %}{% 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 virtual_interface_comment(interface) %}{% if interface.label %}{{ interface.label|replace('"','\\"') or "-" }}: {% endif %}{{ interface.description|replace('"','\\"') 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 %} + + {{ interface_addresses(device, subinterface, subinterface_context, subinterface_tags) }} + {%- endfor %} +{%- endfor %}