* adding OS9 ansible collections * adding OS9 collections Co-authored-by: Patil <Komal_uttamrao_Patil@Dell.com>
351 lines
No EOL
13 KiB
Django/Jinja
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 %} |