---
- debug: msg="START connection={{ ansible_connection }} nxos_bgp sanity test"
- debug: msg="Using provider={{ connection.transport }}"
  when: ansible_connection == "local"

- set_fact: neighbor_down_fib_accelerate="true"
  when: (not titanium) and ((imagetag != 'N1') and (imagetag != 'D1'))

- set_fact: reconnect_interval="55"
  when: (not titanium) and ((imagetag != 'N1') and (imagetag != 'D1'))

- set_fact: isolate="false"
  when: platform is not match("N35")

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

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

- block:
  - name: "Configure BGP defaults"
    nxos_bgp: &configure_default
      asn: 65535
      router_id: 192.0.2.1
      provider: "{{ connection }}"
      state: present
    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: 192.0.2.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: "{{isolate|default(omit)}}"
      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
      provider: "{{ connection }}"
      state: present
    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
      provider: "{{ connection }}"
      state: disabled

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

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

  always:
  - debug: msg="END connection={{ ansible_connection }} nxos_bgp sanity test"
