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

# Select interface for test
- set_fact: intname="{{ nxos_int1 }}"

- name: "Interface selected for this test"
  debug: msg="{{ intname }}"

- name: "Setup interface"
  nxos_config: &default
    lines:
      - "default interface {{ intname }}"
    provider: "{{ connection }}"
  ignore_errors: yes

- name: Setup - Ensure interface is layer2
  nxos_interface:
    interface: "{{ intname }}"
    mode: layer2
    provider: "{{ connection }}"

- name: "Setup vlans"
  nxos_vlan:
    vlan_range: "5-10,20"
    provider: "{{ connection }}"

- block:
  - name: Ensure interface is in its default switchport state
    nxos_l2_interface: &def_swi
      name: "{{ intname }}"
      provider: "{{ connection }}"
      state: unconfigured

  - name: Ensure interface is configured for access vlan 20
    nxos_l2_interface: &acc_vl
      name: "{{ intname }}"
      mode: access
      access_vlan: 20
      provider: "{{ connection }}"
    register: result

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

  - name: Sleep for 2 seconds on Fretta Platform
    wait_for: timeout=2
    when: platform is match("N9K-F")

  - name: "access vlan Idempotence"
    nxos_l2_interface: *acc_vl
    register: result

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

  - name: Ensure interface only has vlans 5-10 as trunk vlans
    nxos_l2_interface: &tr_vl
      name: "{{ intname }}"
      mode: trunk
      native_vlan: 10
      trunk_allowed_vlans: 5-10
      provider: "{{ connection }}"
    register: result

  - assert: *true

  - name: "trunk vlan Idempotence"
    nxos_l2_interface: *tr_vl
    register: result

  - assert: *false

  - name: Ensure interface is a trunk port and ensure 2-50 are being tagged (doesn't mean others aren't also being tagged)
    nxos_l2_interface: &tag
      name: "{{ intname }}"
      mode: trunk
      native_vlan: 10
      trunk_vlans: 2-50
      provider: "{{ connection }}"
    register: result

  - assert: *true

  - name: "tag vlan Idempotence"
    nxos_l2_interface: *tag
    register: result

  - assert: *false

  - name: Remove full trunk vlan range 2-50
    nxos_l2_interface: &no_tag
      name: "{{ intname }}"
      mode: trunk
      trunk_vlans: 2-50
      provider: "{{ connection }}"
      state: absent
    register: result

  - assert: *true

  - name: Check Idempotence Remove full trunk vlan range 2-50
    nxos_l2_interface: *no_tag
    register: result

  - assert: *false

  - name: Reconfigure interface trunk port and ensure 2-50 are being tagged
    nxos_l2_interface: *tag
    register: result

  - assert: *true

  - name: Check Idempotence Reconfigure interface trunk port and ensure 2-50 are being tagged
    nxos_l2_interface: *tag
    register: result

  - assert: *false

  - name: Remove partial trunk vlan range 30-4094 are removed
    nxos_l2_interface: &partial
      name: "{{ intname }}"
      mode: trunk
      trunk_vlans: 30-4094
      provider: "{{ connection }}"
      state: absent
    register: result

  - assert: *true

  - name: Check Idempotence Remove partial trunk vlan range 30-4094 are removed
    nxos_l2_interface: *partial
    register: result

  - assert: *false

  - name: put interface default state
    nxos_l2_interface: *def_swi
    register: result

  - assert: *true

  - name: "default state idempotence"
    nxos_l2_interface: *def_swi
    register: result

  - assert: *false

  always:
  - name: "remove vlans"
    nxos_vlan:
      vlan_range: "5-10,20"
      provider: "{{ connection }}"
      state: absent
    ignore_errors: yes

  - name: "default interface"
    nxos_config: *default
    ignore_errors: yes

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