---
# ensure logging configs are empty
- name: Remove host logging
  ios_logging: &remove_host
    dest: host
    name: 172.16.0.1
    state: absent
    provider: "{{ cli }}"

- name: Remove console
  ios_logging:
    dest: console
    level: warnings
    state: absent
    provider: "{{ cli }}"

- name: Remove buffer
  ios_logging:
    dest: buffered
    size: 8000
    provider: "{{ cli }}"
    state: absent

# start tests
- name: Set up host logging
  ios_logging:
    dest: host
    name: 172.16.0.1
    facility: local7
    state: present
    provider: "{{ cli }}"
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"logging host 172.16.0.1" in result.commands'
      - '"logging facility local7" in result.commands'

- name: Set up host logging again (idempotent)
  ios_logging:
    dest: host
    name: 172.16.0.1
    state: present
    provider: "{{ cli }}"
  register: result

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

- name: Delete/disable host logging
  ios_logging: *remove_host
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"no logging host 172.16.0.1" in result.commands'

- name: Delete/disable host logging (idempotent)
  ios_logging: *remove_host
  register: result

- assert: *unchanged

- name: Console logging with level warnings
  ios_logging:
    dest: console
    level: warnings
    state: present
    provider: "{{ cli }}"
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"logging console warnings" in result.commands'

- name: Configure Buffer size
  ios_logging:
    dest: buffered
    size: 8000
    provider: "{{ cli }}"
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"logging buffered 8000" in result.commands'


- name: Change logging parameters using aggregate
  ios_logging:
    aggregate:
      - { dest: console, level: notifications }
      - { dest: buffered, size: 9000 }
    provider: "{{ cli }}"
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"logging buffered 9000" in result.commands'
      - '"logging console notifications" in result.commands'

- name: Set both logging destination and facility
  ios_logging: &set_both
    dest: buffered
    facility: uucp
    level: alerts
    size: 4096
    state: present
    provider: "{{ cli }}"
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"logging buffered 4096 alerts" in result.commands'
      - '"logging facility uucp" in result.commands'

- name: Set both logging destination and facility (idempotent)
  ios_logging: *set_both
  register: result

- assert: *unchanged

- name: remove logging as collection tearDown
  ios_logging:
    aggregate:
      - { dest: console, level: notifications }
      - { dest: buffered, size: 4096, level: alerts }
      - { facility: uucp }
    state: absent
    provider: "{{ cli }}"
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"no logging console" in result.commands'
      - '"no logging buffered" in result.commands'
      - '"no logging facility uucp" in result.commands'
