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

- set_fact: testint="{{ nxos_int1 }}"

- name: "Setup: Enable feature interface-vlan"
  nxos_feature:
    feature: interface-vlan
    state: enabled
    provider: "{{ connection }}"
  ignore_errors: yes

- name: "Setup: Put interface {{ testint }} into a default state"
  nxos_config: &intcleanup
    lines:
      - "default interface {{ testint }}"
    provider: "{{ connection }}"
  ignore_errors: yes

- name: "Setup: Remove possibly existing vlan interfaces"
  nxos_config: &vlanintcleanup
    lines:
      - "no interface vlan 2"
      - "no interface vlan 710"
      - "no interface vlan 711"
      - "no interface vlan 712"
    provider: "{{ connection }}"
  ignore_errors: yes

- block:
  - name: "Configure layer3 params"
    nxos_interface: &l3config
      interface: "{{ testint }}"
      mode: layer3
      description: 'Configured by Ansible - Layer3'
      admin_state: 'up'
      state: present
      provider: "{{ connection }}"
    register: result

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

  - name: "Check Idempotence"
    nxos_interface: *l3config
    register: result

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

  - name: "Configure layer2 params"
    nxos_interface: &l2config
      interface: "{{ testint }}"
      mode: layer2
      description: 'Configured by Ansible - Layer2'
      admin_state: 'down'
      state: present
      provider: "{{ connection }}"
    register: result

  - assert: *true

  - name: "Check Idempotence"
    nxos_interface: *l2config
    register: result

  - assert: *false

  - name: Create VLAN Interfaces
    nxos_interface: &createvlans
      interface: "{{ item.os_svi_int }}"
      description: "{{ item.os_svi_desc }}"
      provider: "{{ connection }}"
    with_items: &vlanitems
      - {os_svi_int: vlan2, os_svi_desc: SVI_VLAN2}
      - {os_svi_int: vlan710, os_svi_desc: SVI_VLAN710}
      - {os_svi_int: vlan711, os_svi_desc: SVI_VLAN711}
      - {os_svi_int: vlan712, os_svi_desc: SVI_VLAN712}
    register: result

  - assert: *true

  - name: Configure Required SVI
    nxos_ip_interface: &addips
      interface: "{{ item.os_svi_int }}"
      addr: "{{ item.ipv4_addr }}"
      mask: "{{ item.ipv4_mask }}"
      version: "{{ item.ipv4_ver }}"
      provider: "{{ connection }}"
    with_items: &vlanips
      - {os_svi_int: vlan2, ipv4_addr: 192.168.2.1, ipv4_mask: 24, ipv4_ver: v4}
      - {os_svi_int: vlan710, ipv4_addr: 192.168.3.1, ipv4_mask: 24, ipv4_ver: v4}
      - {os_svi_int: vlan711, ipv4_addr: 192.168.4.1, ipv4_mask: 24, ipv4_ver: v4}
      - {os_svi_int: vlan712, ipv4_addr: 192.168.5.1, ipv4_mask: 24, ipv4_ver: v4}
    register: result

  - assert: *true

  - name: Create VLAN Interfaces Idempotence Check
    nxos_interface: *createvlans
    with_items: *vlanitems
    register: result

  - assert: *false

  - name: Configure Required SVI Idempotence Check
    nxos_ip_interface: *addips
    with_items: *vlanips
    register: result

  - assert: *false

  rescue:
  - name: "Set interface back to default"
    nxos_config: *intcleanup
    ignore_errors: yes

  - name: "Remove vlan interfaces"
    nxos_config: *vlanintcleanup

  - name: "Setup: Disable feature interface-vlan"
    nxos_feature:
      feature: interface-vlan
      state: disabled
      provider: "{{ connection }}"
    ignore_errors: yes

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