---
- debug: msg="START junos_linkagg netconf/basic.yaml"

- name: setup - remove linkagg
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: absent
    provider: "{{ netconf }}"

- name: configure linkagg
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: present
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<name>ae0</name>' in config.xml"
      - "'<device-count>4</device-count>' in config.xml"
      - "'<bundle>ae0</bundle>' in config.xml"
      - "'<active/>' in config.xml"

- name: configure linkagg (idempotent)
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: present
    provider: "{{ netconf }}"
  register: result

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

- name: configure lacp in passive
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: passive
    device_count: 4
    state: present
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<passive/>' in config.xml"

- name: delete lacp
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: off
    device_count: 4
    state: present
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<lacp/>' not in config.xml"

- name: Change device count
  junos_linkagg:
    name: ae0
    device_count: 2
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<device-count>2</device-count>' in config.xml"

- name: Disable linkagg interface
  junos_linkagg:
    name: ae0
    state: down
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - result.diff.prepared | search("\+ *disable")

- name: Enable linkagg interface
  junos_linkagg:
    name: ae0
    state: up
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - result.diff.prepared | search("\- *disable")

- name: Deactivate linkagg
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: present
    active: False
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<bundle inactive=\"inactive\">ae0</bundle>' in config.xml"
      - "'<device-count inactive=\"inactive\">4</device-count>' in config.xml"
      - "'inactive: ae0' in result.diff.prepared"

- name: Activate linkagg
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: present
    active: True
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<active/>' in config.xml"
      - "'<bundle>ae0</bundle>' in config.xml"
      - "'active: device-count 4' in result.diff.prepared"
      - "'active: ae0' in result.diff.prepared"

- name: Delete linkagg
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: absent
    provider: "{{ netconf }}"
  register: result

- name: Get running configuration
  junos_rpc:
    rpc: get-configuration
    provider: "{{ netconf }}"
  register: config

- assert:
    that:
      - "result.changed == true"
      - "'<active/>' not in config.xml"
      - "'<bundle>ae0</bundle>' not in config.xml"
      - "'<device-count>4</device-count>' not in config.xml"
      - "'<name>ae0</name>' not in config.xml"

- name: Delete linkagg (idempotent)
  junos_linkagg:
    name: ae0
    members:
      - ge-0/0/6
      - ge-0/0/7
    mode: active
    device_count: 4
    state: absent
    provider: "{{ netconf }}"
  register: result

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