---
- debug: msg="START ios_interface cli/intent.yaml"

- name: Check intent arguments
  ios_interface:
    name: GigabitEthernet0/2
    state: up
    tx_rate: ge(0)
    rx_rate: le(0)
    authorize: yes
  register: result

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

- name: Check intent arguments (failed condition)
  ios_interface:
    name: GigabitEthernet0/2
    state: down
    tx_rate: gt(0)
    rx_rate: lt(0)
    authorize: yes
  ignore_errors: yes
  register: result

- assert:
    that:
      - "result.failed == true"
      - "'state eq(down)' in result.failed_conditions"
      - "'tx_rate gt(0)' in result.failed_conditions"
      - "'rx_rate lt(0)' in result.failed_conditions"

- name: Config + intent
  ios_interface:
    name: GigabitEthernet0/2
    enabled: False
    state: down
    authorize: yes
  register: result

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

- name: Config + intent (fail)
  ios_interface:
    name: GigabitEthernet0/2
    enabled: False
    authorize: yes
    state: up
  ignore_errors: yes
  register: result

- assert:
    that:
      - "result.failed == true"
      - "'state eq(up)' in result.failed_conditions"

- name: Register show neighbors detail
  ios_command:
    commands:
      - show lldp neighbors
    authorize: yes
  register: show_lldp_neighbors_result

- block:
    - name: Check neighbors intent arguments
      ios_interface:
        name: Gi0/0
        neighbors:
          - port: eth0
            host: netdev
        authorize: yes
      register: result

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

    - name: Check neighbors intent arguments (failed condition)
      ios_interface:
        name: Gi0/0
        neighbors:
          - port: dummy_port
            host: dummy_host
        authorize: yes
      ignore_errors: yes
      register: result

    - assert:
        that:
          - "result.failed == true"
          - "'host dummy_host' in result.failed_conditions"
          - "'port dummy_port' in result.failed_conditions"
  when: '"netdev" in show_lldp_neighbors_result.stdout'

- name: Aggregate config + intent (pass)
  ios_interface:
    aggregate:
      - name: GigabitEthernet0/2
        enabled: True
        state: up
    authorize: yes
  ignore_errors: yes
  register: result

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

- block:
    - name: Aggregate neighbors intent (pass)
      ios_interface:
        aggregate:
          - name: Gi0/0
            neighbors:
              - port: eth0
                host: netdev
        authorize: yes
      ignore_errors: yes
      register: result

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

    - name: Aggregate neighbors intent (fail)
      ios_interface:
        aggregate:
          - name: Gi0/0
        neighbors:
          - port: eth0
            host: netdev
          - port: dummy_port
            host: dummy_host
        authorize: yes
      ignore_errors: yes
      register: result

    - assert:
        that:
          - "result.failed == true"
          - "'host dummy_host' in result.failed_conditions"
          - "'port dummy_port' in result.failed_conditions"
  when: "'netdev' in show_lldp_neighbors_result.stdout"
