Jinja2 template sample scripts
Below are the Jinja2 template sample scripts used within this example.
cfg_FG
config system global set hostname {{ branch_hostname }} end
cfg_IPsec
{# define a list of tunnels #} {% set tunnels= [ { 'tunnelname':'HUB1-VPN1', 'remote_IP':'101.8.71.21', 'network_id':'1', 'interface':'port2' }, { 'tunnelname':'HUB1-VPN2', 'remote_IP':'102.8.71.21', 'network_id':'2', 'interface':'port3' }, { 'tunnelname':'HUB2-VPN1', 'remote_IP':'101.8.71.22', 'network_id':'5', 'interface':'port2' }, { 'tunnelname':'HUB2-VPN2', 'remote_IP':'102.8.71.22', 'network_id':'6', 'interface':'port3' }, ] %} config vpn ipsec phase1-interface {%- for tunnel in tunnels %} edit {{ tunnel.tunnelname }} set interface {{ tunnel.interface }} set ike-version 2 set peertype any set net-device enable set mode-cfg enable set proposal aes256-sha256 set add-route disable set localid Branch{{branch_id}} set auto-discovery-receiver enable set auto-discovery-shortcuts dependent set network-overlay enable set network-id {{ tunnel.network_id }} set remote-gw {{ tunnel.remote_IP }} set psksecret qa123456 next {% endfor %} end config vpn ipsec phase2-interface {%- for tunnel in tunnels %} edit {{ tunnel.tunnelname }} set phase1name {{ tunnel.tunnelname }} set proposal aes256-sha256 set auto-negotiate enable next {% endfor %} end config system interface {% for tunnel in tunnels %} edit {{ tunnel.tunnelname }} set allowaccess ping next {% endfor %} End config system interface {% for tunnel in tunnels %} edit {{ tunnel.tunnelname }} set allowaccess ping next {% endfor %} end
cfg_BGP
{# define the neighbors #} {% set neighbors= [ { 'neighborID':'31', 'interface': 'HUB1-VPN1' }, { 'neighborID':'63', 'interface': 'HUB1-VPN2' }, { 'neighborID':'159', 'interface': 'HUB2-VPN1' }, { 'neighborID':'191', 'interface': 'HUB2-VPN2' }, ] %} {# define function build_bgp() #} config router bgp set as 65000 set router-id 172.16.0.{{branch_id}} set ibgp-multipath enable set additional-path enable set recursive-next-hop enable set graceful-restart enable set additional-path-select 4 config neighbor {%- for item in neighbors %} edit 10.10.{{item.neighborID}}.253 set advertisement-interval 1 set capability-graceful-restart enable set link-down-failover enable set soft-reconfiguration enable set description {{item.interface}} set interface {{item.interface}} set remote-as 65000 set connect-timer 10 set additional-path receive next {% endfor %} end end
cfg_SDWAN
{% set zone= [ { 'name':"WAN1", 'member':'port2', }, { 'name':"WAN2", 'member':'port3', }, { 'name':"HUB1", 'member':'HUB1-VPN1', }, { 'name':"HUB1", 'member':'HUB1-VPN2', }, { 'name':"HUB2", 'member':'HUB2-VPN1', }, { 'name':"HUB2", 'member':'HUB2-VPN2', }, ] %} config system global set hostname {{branch_id}} end {# Config SDWAN Zone and Zone Member #} config system sdwan set status enable config zone {%- set exclude_zone = [] %} {%- for item in zone if item.name not in exclude_zone %} {{ exclude_zone.append(item.name) or ""}} edit {{ item.name }} next {% endfor %} end config members {%- for i in zone %} edit {{ loop.index }} set interface {{ i.member }} set zone {{ i.name }} next {% endfor %} end