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

- block:
  - name: enable feature vpc
    nxos_feature:
      feature: vpc
      provider: "{{ connection }}"
      state: enabled

  - name: create port-channel10
    nxos_config:
      commands:
        - interface port-channel10
        - switchport
      match: none
      provider: "{{ connection }}"

  - name: create port-channel11
    nxos_config:
      commands:
        - interface port-channel11
        - switchport
      match: none
      provider: "{{ connection }}"

  - name: configure vpc
    nxos_vpc:
      provider: "{{ connection }}"
      state: present
      domain: 100
      role_priority: 32667
      system_priority: 2000
      pkl_dest: 192.168.100.4
      pkl_src: 10.1.100.20
      peer_gw: true
      auto_recovery: false

  - name: Configure vpc port channel
    nxos_vpc_interface: &conf
      portchannel: 10
      vpc: 10
      provider: "{{ connection }}"
    register: result

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

  - name: "Conf Idempotence"
    nxos_vpc_interface: *conf
    register: result

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

# The vpc peer-link command seems to be invalid for the NXOSv we have in Zuul CI
# Hence, we're temporarily skipping the tests that have `peer_link` key

  - name: Configure vpc port channel
    nxos_vpc_interface: &conf1
      portchannel: 11
      peer_link: True
      provider: "{{ connection }}"
    register: result
    when: image_version != "7.0(3)I5(1)"

  - assert: *true
    when: image_version != "7.0(3)I5(1)"

  - name: "Conf Idempotence"
    nxos_vpc_interface: *conf1
    register: result
    when: image_version != "7.0(3)I5(1)"

  - assert: *false
    when: image_version != "7.0(3)I5(1)"

  - name: Configure vpc port channel
    nxos_vpc_interface: &conf2
      portchannel: 11
      peer_link: False
      provider: "{{ connection }}"
    register: result
    when: image_version != "7.0(3)I5(1)"

  - assert: *true
    when: image_version != "7.0(3)I5(1)"

  - name: "Conf Idempotence"
    nxos_vpc_interface: *conf2
    register: result
    when: image_version != "7.0(3)I5(1)"

  - assert: *false
    when: image_version != "7.0(3)I5(1)"

  - name: remove vpc port channel
    nxos_vpc_interface: &remove
      portchannel: 10
      vpc: 10
      provider: "{{ connection }}"
      state: absent
    register: result

  - assert: *true

  - name: "Remove Idempotence"
    nxos_vpc_interface: *remove
    register: result

  - assert: *false

  always:
  - name: remove vpc
    nxos_vpc:
      provider: "{{ connection }}"
      state: absent
      domain: 100
      role_priority: 32667
      system_priority: 2000
      pkl_dest: 192.168.100.4
      pkl_src: 10.1.100.20
      peer_gw: true
      auto_recovery: false
    ignore_errors: yes

  - name: remove vpc port channel
    nxos_vpc_interface:
      portchannel: 10
      vpc: 10
      provider: "{{ connection }}"
      state: absent
    ignore_errors: yes

  - name: remove port channel
    nxos_config:
      commands:
        - no interface port-channel10
        - no interface port-channel11
      match: none
      provider: "{{ connection }}"
    ignore_errors: yes

  - name: disable feature vpc
    nxos_feature:
      feature: vpc
      provider: "{{ connection }}"
      state: disabled

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