File: //lib/python3.9/site-packages/ansible_collections/dellemc/os6/roles/os6_bgp/templates/os6_bgp.j2
#jinja2: trim_blocks: True,lstrip_blocks: True
{################################
Purpose:
Configure BGP commands for os6 Devices
os6_bgp:
asn: 11
router_id: 1.1.1.1
maxpath_ibgp: 2
maxpath_ebgp: 2
ipv4_network:
- address: 101.1.2.0 255.255.255.0
state: present
ipv6_network:
- address: 2001:4898:5808:ffa0::/126
state: present
neighbor:
- type: ipv4
ip: 10.10.234.16
remote_asn: 64818
timer: 2 5
default_originate: True
peergroup: MUX_HNV_ACCESS
admin: up
state: present
- type: ipv6
ip: 2001:4898:5808:ffa2::1
timer: 2 4
default_originate: True
remote_asn: 64818
peergroup: MUX_HNV_ACCESS
state: present
- type: peergroup
name: MUX_HNV_ACCESS
ebgp_multihop: 4
subnet: 10.128.5.192/27
remote_asn: 64918
state: present
redistribute:
- route_type: connected
address_type: ipv6
state: present
state: present
################################}
{% if os6_bgp is defined and os6_bgp %}
{% set bgp_vars = os6_bgp %}
{% if bgp_vars.asn is defined and bgp_vars.asn %}
{% if bgp_vars.state is defined and bgp_vars.state=="absent" %}
no router bgp {{ bgp_vars.asn }}
{% else %}
{# Add Feature to the switch #}
router bgp {{ bgp_vars.asn }}
{% if bgp_vars.router_id is defined %}
{% if bgp_vars.router_id %}
bgp router-id {{ bgp_vars.router_id }}
{% else %}
no bgp router-id
{% endif %}
{% endif %}
{% if bgp_vars.maxpath_ebgp is defined %}
{% if bgp_vars.maxpath_ebgp %}
maximum-paths {{ bgp_vars.maxpath_ebgp }}
{% else %}
no maximum-paths
{% endif %}
{% endif %}
{% if bgp_vars.maxpath_ibgp is defined %}
{% if bgp_vars.maxpath_ibgp %}
maximum-paths ibgp {{ bgp_vars.maxpath_ibgp }}
{% else %}
no maximum-paths ibgp
{% endif %}
{% endif %}
{% if bgp_vars.ipv4_network is defined and bgp_vars.ipv4_network %}
{% for net in bgp_vars.ipv4_network %}
{% if net.address is defined and net.address %}
{% set ip_and_mask= net.address.split(" ") %}
{% if net.state is defined and net.state=="absent" %}
{# remove BGP network announcement #}
no network {{ ip_and_mask[0] }} mask {{ ip_and_mask[1] }}
{# Add BGP network announcement #}
{% else %}
network {{ ip_and_mask[0] }} mask {{ ip_and_mask[1] }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% if bgp_vars.neighbor is defined and bgp_vars.neighbor %}
{% for neighbor in bgp_vars.neighbor %}
{% if neighbor.type is defined %}
{% if neighbor.type == "ipv4" or neighbor.type =="ipv6" %}
{% if neighbor.ip is defined and neighbor.ip %}
{% set tag_or_ip = neighbor.ip %}
{% if neighbor.remote_asn is defined and neighbor.remote_asn %}
{% if neighbor.state is defined and neighbor.state == "absent" %}
no neighbor {{ tag_or_ip }} remote-as
{% if neighbor.peergroup is defined and neighbor.peergroup %}
{% if neighbor.peergroup_state is defined and neighbor.peergroup_state == "absent" %}
no neighbor {{ tag_or_ip }} inherit peer {{ neighbor.peergroup }}
{% endif %}
{% endif %}
{% else %}
neighbor {{ tag_or_ip }} remote-as {{ neighbor.remote_asn }}
{% if neighbor.timer is defined %}
{% if neighbor.timer %}
neighbor {{ tag_or_ip }} timers {{ neighbor.timer }}
{% else %}
no neighbor {{ tag_or_ip }} timers
{% endif %}
{% endif %}
{% if neighbor.default_originate is defined %}
{% if neighbor.default_originate %}
neighbor {{ tag_or_ip }} default-originate
{% else %}
no neighbor {{ tag_or_ip }} default-originate
{% endif %}
{% endif %}
{% if neighbor.ebgp_multihop is defined %}
{% if neighbor.ebgp_multihop %}
neighbor {{ tag_or_ip }} ebgp-multihop {{ neighbor.ebgp_multihop }}
{% else %}
no neighbor {{ tag_or_ip }} ebgp-multihop
{% endif %}
{% endif %}
{% if neighbor.src_loopback is defined and neighbor.src_loopback|int(-1) != -1 %}
{% if neighbor.src_loopback_state is defined and neighbor.src_loopback_state == "absent" %}
no neighbor {{ tag_or_ip }} update-source
{% else %}
neighbor {{ tag_or_ip }} update-source Loopback {{ neighbor.src_loopback }}
{% endif %}
{% endif %}
{% if neighbor.peergroup is defined and neighbor.peergroup %}
{% if neighbor.peergroup_state is defined and neighbor.peergroup_state == "absent" %}
no neighbor {{ tag_or_ip }} inherit peer {{ neighbor.peergroup }}
{% else %}
neighbor {{ tag_or_ip }} inherit peer {{ neighbor.peergroup }}
{% endif %}
{% endif %}
{% if neighbor.admin is defined %}
{% if neighbor.admin == "up" %}
no neighbor {{ tag_or_ip }} shutdown
{% elif neighbor.admin =="down" %}
neighbor {{ tag_or_ip }} shutdown
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% elif neighbor.type == "peergroup" %}
{% if neighbor.name is defined and neighbor.name %}
{% set tag_or_ip = neighbor.name %}
{% if neighbor.state is defined and neighbor.state == "absent" %}
no template peer {{ tag_or_ip }}
{% else %}
{% if neighbor.subnet is defined and neighbor.subnet %}
{% if neighbor.subnet_state is defined and neighbor.subnet_state == "absent" %}
no bgp listen range {{ neighbor.subnet }}
{% else %}
bgp listen range {{ neighbor.subnet }} inherit peer {{ tag_or_ip }}
{% endif %}
{% endif %}
template peer {{ tag_or_ip }}
{% if neighbor.remote_asn is defined and neighbor.remote_asn %}
{% if neighbor.remote_asn_state is defined and neighbor.remote_asn_state == "absent" %}
no remote-as {{ neighbor.remote_asn }}
{% else %}
remote-as {{ neighbor.remote_asn }}
{% endif %}
{% endif %}
{% if neighbor.timer is defined %}
{% if neighbor.timer %}
timers {{ neighbor.timer }}
{% else %}
no timers
{% endif %}
{% endif %}
{% if neighbor.ebgp_multihop is defined %}
{% if neighbor.ebgp_multihop %}
ebgp-multihop {{ neighbor.ebgp_multihop }}
{% else %}
no ebgp-multihop
{% endif %}
{% endif %}
{% if neighbor.src_loopback is defined and neighbor.src_loopback|int(-1) != -1 %}
{% if neighbor.src_loopback_state is defined and neighbor.src_loopback_state == "absent" %}
no update-source
{% else %}
update-source Lo{{ neighbor.src_loopback }}
{% endif %}
{% endif %}
{% if neighbor.admin is defined %}
{% if neighbor.admin == "up" %}
no shutdown
{% elif neighbor.admin =="down" %}
shutdown
{% endif %}
{% endif %}
{% if neighbor.default_originate is defined %}
address-family ipv4
{% if neighbor.default_originate %}
default-originate
{% else %}
no default-originate
{% endif %}
exit
{% endif %}
exit
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% if bgp_vars.ipv6_network is defined and bgp_vars.ipv6_network %}
{% for net in bgp_vars.ipv6_network %}
{% if net.address is defined and net.address %}
address-family ipv6
{% if net.state is defined and net.state=="absent" %}
{# remove BGP network announcement #}
no network {{ net.address }}
{# Add BGP network announcement #}
{% else %}
network {{ net.address }}
{% endif %}
exit
{% endif %}
{% endfor %}
{% endif %}
{% if bgp_vars.redistribute is defined and bgp_vars.redistribute %}
{% for routes in bgp_vars.redistribute %}
{% if routes.route_type is defined and routes.route_type %}
{% if routes.address_type is defined and routes.address_type=="ipv6" %}
address-family ipv6
{% if routes.state is defined and routes.state =="absent" %}
no redistribute {{ routes.route_type }}
{% else %}
redistribute {{ routes.route_type }}
{% endif %}
exit
{% elif routes.address_type is defined and routes.address_type=="ipv4" %}
{% if routes.state is defined and routes.state =="absent" %}
no redistribute {{ routes.route_type }}
{% else %}
redistribute {{ routes.route_type }}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
exit
{% endif %}
{% endif %}
{% endif %}