HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
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 %}