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

- set_fact: def_met_default="default"
  # CSCvi74876 Cannot remove default-metric
  when: imagetag is not search("I7")

- name: "Setup: disable features for initial cleanup"
  nxos_feature:
    feature: "{{ item }}"
    provider: "{{ connection }}"
    state: disabled
  loop: ['ospf', 'bfd']
  ignore_errors: yes

- name: "Enable features"
  nxos_feature:
    feature: "{{ item }}"
    provider: "{{ connection }}"
    state: enabled
  loop: ['ospf', 'bfd']

- block:
  - name: Configure ospf vrf
    nxos_ospf_vrf: &config
      ospf: 1
      router_id: 192.0.2.1
      timer_throttle_spf_start: 50
      timer_throttle_spf_hold: 1000
      timer_throttle_spf_max: 2000
      timer_throttle_lsa_start: 60
      timer_throttle_lsa_hold: 1100
      timer_throttle_lsa_max: 3000
      vrf: test
      bfd: enable
      passive_interface: true
      provider: "{{ connection }}"
      state: present
    register: result

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

  - name: "Check Idempotence"
    nxos_ospf_vrf: *config
    register: result

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

  - name: Configure ospf vrf
    nxos_ospf_vrf: &config1
      ospf: 2
      auto_cost: 5000
      timer_throttle_spf_hold: 1100
      timer_throttle_lsa_hold: 2220
      timer_throttle_lsa_max: 2222
      default_metric: 1000
      log_adjacency: log
      vrf: default
      bfd: disable
      passive_interface: true
      provider: "{{ connection }}"
      state: present
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_ospf_vrf: *config1
    register: result

  - assert: *false

  - name: Configure ospf vrf
    nxos_ospf_vrf: &config2
      ospf: 2
      auto_cost: default
      default_metric: "{{def_met_default|default(omit)}}"
      log_adjacency: default
      timer_throttle_spf_hold: default
      passive_interface: false
      vrf: default
      provider: "{{ connection }}"
      state: present
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_ospf_vrf: *config2
    register: result

  - assert: *false

  - name: Unconfigure ospf vrf
    nxos_ospf_vrf: &unconfig1
      ospf: 2
      vrf: default
      provider: "{{ connection }}"
      state: absent
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_ospf_vrf: *unconfig1
    register: result

  - assert: *false
    when: def_met_default is defined

  - name: Unconfigure ospf vrf
    nxos_ospf_vrf: &unconfig
      ospf: 1
      vrf: test
      provider: "{{ connection }}"
      state: absent
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_ospf_vrf: *unconfig
    register: result

  - assert: *false
    when: def_met_default is defined

  always:
  - name: "Disable features"
    nxos_feature:
      feature: "{{ item }}"
      provider: "{{ connection }}"
      state: disabled
    loop: ['ospf', 'bfd']
    ignore_errors: yes

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