---
- debug: msg="START cli/basic.yaml"

- name: setup - remove config used in test(part1)
  eos_config:
    lines:
      - no interface port-channel 20
      - no interface port-channel 100
    authorize: yes
    provider: "{{ cli }}"
  become: yes

- name: setup - remove config used in test(part2)
  eos_config:
    lines:
      - no channel-group 20
    authorize: yes
    provider: "{{ cli }}"
    parents: "{{ item }}"
  loop:
    - interface Ethernet1
    - interface Ethernet2
  become: yes

- name: create linkagg
  eos_linkagg: &create
    group: 20
    state: present
    authorize: yes
    provider: "{{ cli }}"
  become: yes
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'interface port-channel 20' in result.commands"

- name: create linkagg(Idempotence)
  eos_linkagg: *create
  become: yes
  register: result

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

- name: set link aggregation group to members
  eos_linkagg: &configure_member
    group: 20
    mode: active
    members:
      - Ethernet1
      - Ethernet2
    authorize: yes
    provider: "{{ cli }}"
  become: yes
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'interface Ethernet1' in result.commands"
      - "'channel-group 20 mode active' in result.commands"
      - "'interface Ethernet2' in result.commands"
      - "'channel-group 20 mode active' in result.commands"

- name: set link aggregation group to members(Idempotence)
  eos_linkagg: *configure_member
  become: yes
  register: result

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

- name: remove link aggregation group from member
  eos_linkagg: &remove_member
    group: 20
    mode: active
    members:
      - Ethernet2
    authorize: yes
    provider: "{{ cli }}"
  become: yes
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'interface Ethernet1' in result.commands"
      - "'no channel-group 20' in result.commands"

- name: remove link aggregation group from member(Idempotence)
  eos_linkagg: *remove_member
  become: yes
  register: result

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

- name: remove linkagg
  eos_linkagg: &remove
    group: 20
    state: absent
    authorize: yes
    provider: "{{ cli }}"
  become: yes
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'no interface port-channel 20' in result.commands"

- name: remove linkagg(Idempotence)
  eos_linkagg: *remove
  become: yes
  register: result

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

- name: create aggregate of linkagg definitions
  eos_linkagg: &create_agg
    aggregate:
      - { group: 20, min_links: 3 }
      - { group: 100, min_links: 4 }
    authorize: yes
    provider: "{{ cli }}"
  become: yes
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'interface port-channel 20' in result.commands"
      - "'port-channel min-links 3' in result.commands"
      - "'interface port-channel 100' in result.commands"
      - "'port-channel min-links 4' in result.commands"

- name: create aggregate of linkagg definitions(Idempotence)
  eos_linkagg: *create_agg
  become: yes
  register: result

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

- name: remove aggregate of linkagg definitions
  eos_linkagg: &remove_agg
    aggregate:
      - { group: 20, min_links: 3 }
      - { group: 100, min_links: 4 }
    authorize: yes
    provider: "{{ cli }}"
    state: absent
  become: yes
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'no interface port-channel 20' in result.commands"
      - "'no interface port-channel 100' in result.commands"

- name: remove aggregate of linkagg definitions(Idempotence)
  eos_linkagg: *remove_agg
  become: yes
  register: result

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

- name: teardown(part1)
  eos_config:
    lines:
      - no interface port-channel 20
      - no interface port-channel 100
    authorize: yes
    provider: "{{ cli }}"
  become: yes

- name: teardown(part2)
  eos_config:
    lines:
      - no channel-group 20
    authorize: yes
    provider: "{{ cli }}"
    parents: "{{ item }}"
  become: yes
  loop:
    - interface Ethernet1
    - interface Ethernet2

- debug: msg="END cli/basic.yaml"
