---
- name: Remove linkagg
  vyos_linkagg:
    name: bond0
    state: absent

- name: Remove linkagg
  vyos_linkagg:
    name: bond1
    state: absent

- name: Create linkagg
  vyos_linkagg:
    name: bond0
    members:
      - eth1
    state: present
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"set interfaces bonding bond0 mode 802.3ad" in result.commands'
      - '"set interfaces ethernet eth1 bond-group bond0" in result.commands'

- name: Create linkagg again (idempotent)
  vyos_linkagg:
    name: bond0
    members:
      - eth1
    state: present
  register: result

- assert:
    that:
      - 'result.changed == false'

- name: Add linkagg member
  vyos_linkagg:
    name: bond0
    members:
      - eth2
    state: present
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"set interfaces ethernet eth2 bond-group bond0" in result.commands'

- name: Add linkagg member again (idempotent)
  vyos_linkagg:
    name: bond0
    members:
      - eth2
    state: present
  register: result

- assert:
    that:
      - 'result.changed == false'

- name: Disable linkagg
  vyos_linkagg:
    name: bond0
    state: down
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"set interfaces bonding bond0 disable" in result.commands'

- name: Disable linkagg again (idempotent)
  vyos_linkagg:
    name: bond0
    state: down
  register: result

- assert:
    that:
      - 'result.changed == false'

- name: Enable linkagg
  vyos_linkagg:
    name: bond0
    state: up
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"delete interfaces bonding bond0 disable" in result.commands[0]'

- name: Enable linkagg again (idempotent)
  vyos_linkagg:
    name: bond0
    state: up
  register: result

- assert:
    that:
      - 'result.changed == false'

- name: Remove linkagg
  vyos_linkagg:
    name: bond0
    state: absent
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"delete interfaces ethernet eth1 bond-group" in result.commands'
      - '"delete interfaces ethernet eth2 bond-group" in result.commands'
      - '"delete interfaces bonding bond0" in result.commands'

- name: Remove linkagg again (idempotent)
  vyos_linkagg:
    name: bond0
    state: absent
  register: result

- assert:
    that:
      - 'result.changed == false'

- name: Create collection of linkagg definitions
  vyos_linkagg:
    aggregate:
        - { name: bond0, members: [eth1] }
        - { name: bond1, members: [eth2] }
    state: present
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"set interfaces bonding bond0 mode 802.3ad" in result.commands'
      - '"set interfaces ethernet eth1 bond-group bond0" in result.commands'
      - '"set interfaces bonding bond1 mode 802.3ad" in result.commands'
      - '"set interfaces ethernet eth2 bond-group bond1" in result.commands'

- name: Create collection of linkagg definitions again (idempotent)
  vyos_linkagg:
    aggregate:
        - { name: bond0, members: [eth1] }
        - { name: bond1, members: [eth2] }
    state: present
  register: result

- assert:
    that:
      - 'result.changed == false'

- name: Remove collection of linkagg definitions
  vyos_linkagg:
    aggregate:
      - name: bond0
      - name: bond1
    state: absent
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"delete interfaces ethernet eth1 bond-group" in result.commands'
      - '"delete interfaces bonding bond0" in result.commands'
      - '"delete interfaces ethernet eth2 bond-group" in result.commands'
      - '"delete interfaces bonding bond1" in result.commands'

- name: Remove collection of linkagg definitions again (idempotent)
  vyos_linkagg:
    aggregate:
      - name: bond0
      - name: bond1
    state: absent
  register: result

- assert:
    that:
      - 'result.changed == false'
