-
Notifications
You must be signed in to change notification settings - Fork 0
/
core-router.j2
62 lines (50 loc) · 2.39 KB
/
core-router.j2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
{# j2lint: disable=jinja-statements-delimiter #}
{# j2lint: disable=jinja-statements-indentation #}
{# j2lint: disable=single-statement-per-line #}
{% if device is not defined and device_id is defined %}
{% set device = dcim.Device.objects.get(pk=device_id) %}
{% endif %}
{# Tunnels #}
{%- for intf in device.interfaces.filter(name__startswith='tun') %}
{%- with term = intf.tunnel_terminations.first() %}
{%- if term %}
{%- with remote = term.tunnel.terminations.exclude(termination_id=intf.id).first() %}
{%- if remote %}
{%- if intf.description != '' %}
set interfaces tunnel {{ intf.name }} description "{{ intf.description | slugify(lower=False, spaces=True,
only_ascii=True, extra_chars='()') }}"
{%- endif %}
{%- for addr in intf.ip_addresses.all() %}
set interfaces tunnel {{ intf.name }} address {{ addr.address }}
{%- endfor %}
set interfaces tunnel {{ intf.name }} encapsulation {{ term.tunnel.encapsulation }}
set interfaces tunnel {{ intf.name }} multicast disable
set interfaces tunnel {{ intf.name }} local-ip {{ term.outside_ip.address | ipaddr('address') }}
{%- with remote_ip = ipam.IPAddress.objects.filter(nat_inside_id=remote.outside_ip.id).first() or remote.outside_ip %}
set interfaces tunnel {{ intf.name }} remote-ip {{ remote_ip.address | ipaddr('address') }}
{%- endwith %}
{%- endif %}
{%- endwith %}
{%- endif %}
{%- endwith %}
{%- endfor %}
{# static interface routes #}
delete protocols static interface-route
{%- for intf in device.interfaces.filter(untagged_vlan__isnull=False) %}
{%- for pfx in ipam.Prefix.objects.filter(vlan_id=intf.untagged_vlan_id) %}
{%- if pfx.custom_field_data.get('use_interface_route', False) %}
set protocols static interface-route {{ pfx.prefix }} next-hop-interface {{ intf.name }}
{%- if pfx.description %} description "{{ pfx.description | slugify(lower=False, spaces=True, only_ascii=True,
extra_chars='()') }}"{% endif %}
{%- endif %}
{%- endfor %}
{%- endfor %}
{# BGP sessions #}
{%- for sess in netbox_bgp.BGPSession.objects.filter(device_id=device.id) %}
set protocols bgp {{ sess.local_as.asn }} neighbor {{ sess.remote_address.address | ipaddr('address') }} description {{
sess.description | slugify(lower=False, spaces=True, only_ascii=True, extra_chars='()') }}
{%- if sess.peer_group %}
set protocols bgp {{ sess.local_as.asn }} neighbor {{ sess.remote_address.address | ipaddr('address') }} peer-group {{
sess.peer_group.name }}
{%- endif %}
{%- endfor %}