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/os9/roles/os9_bgp/templates/os9_bgp.j2
#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 %}