dellemc.os9/roles/os9_bgp/templates/os9_bgp.j2
Komal Uttamrao Patil 90b090b021
OS9 Ansible Collections (#2)
* adding OS9 ansible collections

* adding OS9 collections

Co-authored-by: Patil <Komal_uttamrao_Patil@Dell.com>
2020-07-09 19:29:51 -07:00

351 lines
No EOL
13 KiB
Django/Jinja

#jinja2: trim_blocks: True, lstrip_blocks: True
{##########################################
Purpose:
Configure BGP commands for os9 Devices
os9_bgp:
asn: 12
router_id:
maxpath_ibgp: 2
maxpath_ebgp: 2
best_path:
as_path: ignore
as_path_state: present
ignore_router_id: true
med:
- attribute: confed
state: present
ipv4_network:
- address: 101.1.1.0/30
state: present
ipv6_network:
- address: "2001:4898:5808:ffa0::/126"
state: present
neighbor:
- type: ipv4
remote_asn: 11
ip: 192.168.11.1
admin: up
sender_loop_detect: false
src_loopback: 0
src_loopback_state: present
ebgp_multihop: 255
distribute_list:
in: aa
in_state: present
out: aa
out_state: present
state: present
- type: ipv6
remote_asn: 14
ip: 2001:4898:5808:ffa2::1
sender_loop_detect: false
src_loopback: 0
src_loopback_state: present
state: present
- type: peer_group
name: peer1
remote_asn: 6
subnet: 10.128.3.192/27
subnet_state: present
admin: up
default_originate: true
sender_loop_detect: false
src_loopback: 1
src_loopback_state: present
ebgp_multihop: 255
state: present
redistribute:
- route_type: static
state: present
state: present
################################}
{% if os9_bgp is defined and os9_bgp%}
{% set bgp_vars = os9_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 ebgp {{ bgp_vars.maxpath_ebgp }}
{% else %}
no maximum-paths ebgp
{% 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.graceful_restart is defined and bgp_vars.graceful_restart %}
{% if bgp_vars.graceful_restart.state is defined and bgp_vars.graceful_restart.state == "present" %}
bgp graceful-restart
{% else %}
no bgp graceful-restart
{% endif %}
{% endif %}
{% if bgp_vars.best_path is defined and bgp_vars.best_path %}
{% if bgp_vars.best_path.as_path is defined and bgp_vars.best_path.as_path %}
{% if bgp_vars.best_path.as_path_state is defined and bgp_vars.best_path.as_path_state == "absent" %}
no bgp bestpath as-path {{ bgp_vars.best_path.as_path }}
{% else %}
bgp bestpath as-path {{ bgp_vars.best_path.as_path }}
{% endif %}
{% endif %}
{% if bgp_vars.best_path.ignore_router_id is defined %}
{% if bgp_vars.best_path.ignore_router_id %}
bgp bestpath router-id ignore
{% else %}
no bgp bestpath router-id ignore
{% endif %}
{% endif %}
{% if bgp_vars.best_path.med is defined and bgp_vars.best_path.med %}
{% for med in bgp_vars.best_path.med %}
{% if med.attribute is defined and med.attribute %}
{% if med.state is defined and med.state == "absent" %}
no bgp bestpath med {{ med.attribute }}
{% else %}
bgp bestpath med {{ med.attribute }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% if bgp_vars.ipv4_network is defined and bgp_vars.ipv4_network %}
{% for net in bgp_vars.ipv4_network %}
{# remove BGP network announcement #}
{% if net.address is defined and net.address %}
{% if net.state is defined and net.state == "absent" %}
no network {{ net.address }}
{# Add BGP network announcement #}
{% else %}
network {{ net.address }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% if bgp_vars.ipv6_network is defined and bgp_vars.ipv6_network %}
address-family ipv6 unicast
{% for net in bgp_vars.ipv6_network %}
{% if net.address is defined and net.address %}
{% if net.state is defined and net.state == "absent" %}
no network {{ net.address }}
{% else %}
network {{ net.address }}
{% endif %}
{% endif %}
{% endfor %}
exit-address-family
{% 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 {{ neighbor.remote_asn }}
{% if neighbor.peergroup is defined and neighbor.peergroup %}
{% if neighbor.peergroup_state is defined and neighbor.peergroup_state == "absent" %}
no neighbor {{ tag_or_ip }} peer-group {{ neighbor.peergroup }}
{% endif %}
{% endif %}
{% if neighbor.type == "ipv6" %}
address-family ipv6 unicast
no neighbor {{ tag_or_ip }} activate
exit-address-family
{% endif %}
{% else %}
neighbor {{ tag_or_ip }} remote-as {{ neighbor.remote_asn }}
{% if neighbor.peergroup is defined and neighbor.peergroup %}
{% if neighbor.peergroup_state is defined and neighbor.peergroup_state == "absent" %}
no neighbor {{ tag_or_ip }} peer-group {{ neighbor.peergroup }}
{% else %}
neighbor {{ tag_or_ip }} peer-group {{ neighbor.peergroup }}
{% endif %}
{% endif %}
{% if neighbor.type == "ipv6" %}
address-family ipv6 unicast
neighbor {{ tag_or_ip }} activate
exit-address-family
{% 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 neighbor {{ tag_or_ip }} peer-group
{% else %}
{% if neighbor.passive is defined and neighbor.passive %}
neighbor {{ tag_or_ip }} peer-group passive
{% if neighbor.subnet is defined and neighbor.subnet %}
{% if neighbor.subnet_state is defined and neighbor.subnet_state == "absent" %}
no neighbor {{ tag_or_ip }} subnet {{ neighbor.subnet }}
{% else %}
neighbor {{ tag_or_ip }} subnet {{ neighbor.subnet }}
{% endif %}
{% endif %}
{% else %}
neighbor {{ tag_or_ip }} peer-group
{% endif %}
{% if neighbor.remote_asn is defined and neighbor.remote_asn %}
{% if neighbor.remote_asn_state is defined and neighbor.remote_asn_state == "absent" %}
no neighbor {{ tag_or_ip }} remote-as {{ neighbor.remote_asn }}
{% else %}
neighbor {{ tag_or_ip }} remote-as {{ neighbor.remote_asn }}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% if tag_or_ip is defined and tag_or_ip %}
{% if (neighbor.state is not defined) or (neighbor.state is defined and not neighbor.state == "absent") %}
{% 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.sender_loop_detect is defined %}
{% if neighbor.sender_loop_detect %}
neighbor {{ tag_or_ip }} sender-side-loop-detection
{% else %}
no neighbor {{ tag_or_ip }} sender-side-loop-detection
{% 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 Loopback {{neighbor.src_loopback }}
{% else %}
neighbor {{ tag_or_ip }} update-source Loopback {{ neighbor.src_loopback }}
{% 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.distribute_list is defined and neighbor.distribute_list %}
{% if neighbor.distribute_list.in is defined and neighbor.distribute_list.in %}
{% if neighbor.distribute_list.in_state is defined and neighbor.distribute_list.in_state == "absent" %}
no neighbor {{ tag_or_ip }} distribute-list {{ neighbor.distribute_list.in }} in
{% else %}
neighbor {{ tag_or_ip }} distribute-list {{ neighbor.distribute_list.in }} in
{% endif %}
{% endif %}
{% if neighbor.distribute_list.out is defined and neighbor.distribute_list.out %}
{% if neighbor.distribute_list.out_state is defined and neighbor.distribute_list.out_state == "absent" %}
no neighbor {{ tag_or_ip }} distribute-list {{ neighbor.distribute_list.out }} out
{% else %}
neighbor {{ tag_or_ip }} distribute-list {{ neighbor.distribute_list.out }} out
{% endif %}
{% endif %}
{% endif %}
{% if neighbor.admin is defined and (neighbor.admin == "up" or neighbor.admin == "present") %}
neighbor {{ tag_or_ip }} no shutdown
{% else %}
neighbor {{ tag_or_ip }} shutdown
{% endif %}
{% if neighbor.adv_interval is defined %}
{% if neighbor.adv_interval %}
neighbor {{ tag_or_ip }} advertisement-interval {{ neighbor.adv_interval }}
{% else %}
no neighbor {{ tag_or_ip }} advertisement-interval
{% endif %}
{% endif %}
{% if neighbor.fall_over is defined and neighbor.fall_over == "present" %}
neighbor {{ tag_or_ip }} fall-over
{% elif neighbor.fall_over is defined and neighbor.fall_over == "absent" %}
no neighbor {{ tag_or_ip }} fall-over
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% if bgp_vars.redistribute is defined and bgp_vars.redistribute %}
{% for route in bgp_vars.redistribute %}
{% if route.route_type is defined and route.route_type %}
{% if route.address_type is defined and route.address_type %}
{% if route.address_type == "ipv6" %}
address-family {{ route.address_type }} unicast
{% if route.state is defined and route.state == "absent" %}
no redistribute {{ route.route_type }}
{% else %}
{% if route.route_map is defined %}
{% if route.route_map == "present" %}
{% if route.route_map_name is defined and route.route_map_name %}
redistribute {{ route.route_type }} route-map {{ route.route_map_name }}
{% else %}
redistribute {{ route.route_type }}
{% endif %}
{% else %}
{% if route.route_map_name is defined and route.route_map_name %}
no redistribute {{ route.route_type }} route-map {{ route.route_map_name }}
{% endif %}
{% endif %}
{% else %}
redistribute {{ route.route_type }}
{% endif %}
{% endif %}
exit-address-family
{% else %}
{% if route.state is defined and route.state == "absent" %}
no redistribute {{ route.route_type }}
{% else %}
{% if route.route_map is defined %}
{% if route.route_map == "present" %}
{% if route.route_map_name is defined and route.route_map_name %}
redistribute {{ route.route_type }} route-map {{ route.route_map_name }}
{% else %}
redistribute {{ route.route_type }}
{% endif %}
{% else %}
{% if route.route_map_name is defined and route.route_map_name %}
no redistribute {{ route.route_type }} route-map {{ route.route_map_name }}
{% endif %}
{% endif %}
redistribute {{ route.route_type }}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}