---
- debug: msg="START TRANSPORT:{{ connection.transport }} nxos_bgp sanity test"

- set_fact: neighbor_down_fib_accelerate="true"
  when: (titanium is defined) and not ((titanium | search('true')))

- set_fact: reconnect_interval="55"
  when: (titanium is defined) and not ((titanium | search('true')))

- name: "Enable feature BGP"
  nxos_feature:
    feature: bgp
    state: enabled
    provider: "{{ connection }}"
  ignore_errors: yes

- name: "Setup"
  nxos_bgp: &remove
    asn: 65535
    state: absent
    provider: "{{ connection }}"
  ignore_errors: yes
  register: result

- block:
  - name: "Configure BGP defaults"
    nxos_bgp: &configure_default
      asn: 65535
      router_id: 1.1.1.1
      state: present
      provider: "{{ connection }}"
    register: result

  - assert: &true
      that:
        - "result.changed == true"

  - name: "Check Idempotence"
    nxos_bgp: *configure_default
    register: result

  - assert: &false
      that:
        - "result.changed == false"

  - name: "Remove BGP"
    nxos_bgp: *remove
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_bgp: *remove
    register: result

  - assert: *false

  - name: "Configure BGP non defaults"
    nxos_bgp: &configure_non_default
      asn: 65535
      router_id: 1.1.1.1
      bestpath_always_compare_med: true
      bestpath_aspath_multipath_relax: true
      bestpath_compare_routerid: true
      bestpath_cost_community_ignore: true
      bestpath_med_confed: true
      bestpath_med_missing_as_worst: true
      bestpath_med_non_deterministic: true
      cluster_id: 10.0.0.1
      confederation_id: 99
      disable_policy_batching: true
      enforce_first_as: false
      fast_external_fallover: false
      flush_routes: true
      graceful_restart_helper: true
      graceful_restart_timers_restart: 130
      graceful_restart_timers_stalepath_time: 310
      isolate: false
      log_neighbor_changes: true
      maxas_limit: 50
      neighbor_down_fib_accelerate: "{{neighbor_down_fib_accelerate|default(omit)}}"
      reconnect_interval: "{{reconnect_interval|default(omit)}}"
      shutdown: true
      timer_bestpath_limit: 255
      timer_bgp_hold: 110
      timer_bgp_keepalive: 45
      event_history_cli: size_medium
      event_history_detail: size_large
      event_history_events: size_medium
      event_history_periodic: size_small
      suppress_fib_pending: true
      state: present
      provider: "{{ connection }}"
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_bgp: *configure_non_default
    register: result

  - assert: *false

  - name: "Remove BGP"
    nxos_bgp: *remove
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_bgp: *remove
    register: result

  - assert: *false

  - name: "Disable feature bgp"
    nxos_feature:
      feature: bgp
      state: disabled
      provider: "{{ connection }}"

  rescue:
  - name: "Cleanup BGP"
    nxos_bgp: *remove
    ignore_errors: yes

  - name: "Disable feature bgp"
    nxos_feature:
      feature: bgp
      state: disabled
      provider: "{{ connection }}"
    ignore_errors: yes

  always:
  - debug: msg="END TRANSPORT:{{ connection.transport }} nxos_bgp sanity test"
