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

# 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 vlans"
  nxos_vlan:
    vlan_range: "5-10,20"
    provider: "{{ connection }}"

- block:
  - name: Ensure interface is in L2 state
    nxos_interface:
      interface: "{{ intname }}"
      mode: 'layer2'
      provider: "{{ connection }}"

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

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

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

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

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

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

  - assert: *true

  - name: "trunk vlan Idempotence"
    nxos_switchport: *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_switchport: &tag
      interface: "{{ intname }}"
      mode: trunk
      native_vlan: 10
      trunk_vlans: 2-50
      provider: "{{ connection }}"
    register: result

  - assert: *true

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

  - assert: *false

  - name: Ensure these VLANs are not being tagged on the trunk
    nxos_switchport: &no_tag
      interface: "{{ intname }}"
      mode: trunk
      trunk_vlans: 30-4094
      state: absent
      provider: "{{ connection }}"
    register: result

  - assert: *true

  - name: "no tag vlan Idempotence"
    nxos_switchport: *no_tag
    register: result

  - assert: *false

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

  - assert: *true

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

  - assert: *false

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

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

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