---
- debug: msg="START netconf/netconf.yaml on connection={{ ansible_connection }}"

- name: Ensure netconf is enabled
  junos_netconf:
    state: present

- name: idempotent tests
  junos_netconf:
    state: present
  register: result

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

###################################

- name: wait for netconf port tcp/830 to be open
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 830
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can communicate over netconf
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=false"

- name: Disable netconf (check mode)
  junos_netconf:
    state: absent
  register: result
  check_mode: yes

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

- name: wait for netconf port tcp/830 to be open
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 830
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can communicate over netconf
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=false"

# Disable netconf
- name: Disable netconf
  junos_netconf:
    state: absent
  register: result

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

- name: idempotent tests
  junos_netconf:
    state: absent
  register: result

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

- name: wait for netconf port tcp/830 to be closed
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 830
    state: stopped
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can NOT talk via netconf
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=true"

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

- name: Enable netconf (check mode)
  junos_netconf:
    state: present
  register: result
  check_mode: yes

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

- name: wait for netconf port tcp/830 to be closed
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 830
    state: stopped
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can NOT talk via netconf
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=true"

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

- name: re-enable netconf
  junos_netconf:
    state: present

- debug: msg="END netconf/netconfg.yaml on connection={{ ansible_connection }}"
