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

- name: setup - remove hostname
  junos_system:
    hostname: vsrx01
    state: absent
    provider: "{{ netconf }}"

- name: Set hostname
  junos_system:
    hostname: vsrx01
    state: present
    provider: "{{ netconf }}"
  register: result

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

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

- name: Set hostname (idempotent)
  junos_system:
    hostname: vsrx01
    state: present
    provider: "{{ netconf }}"
  register: result

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

- name: Deactivate hostname configuration
  junos_system:
    hostname: vsrx01
    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"
      - "'<host-name inactive=\"inactive\">' in config.xml"

- name: Activate hostname configuration
  junos_system:
    hostname: vsrx01
    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"
      - "'<host-name>vsrx01</host-name>' in config.xml"

- name: Delete hostname configuration
  junos_system:
    hostname: vsrx01
    state: absent
    provider: "{{ netconf }}"
  register: result

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

- name: Teardown - set hostname
  junos_system:
    hostname: vsrx01
    state: present
    provider: "{{ netconf }}"

- name: setup - remove domain name
  junos_system:
    domain_name: ansible.com
    state: absent
    provider: "{{ netconf }}"

- name: Set domain name
  junos_system:
    domain_name: ansible.com
    state: present
    provider: "{{ netconf }}"
  register: result

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

- assert:
    that:
      - "result.changed == true"
      - "'<domain-name>ansible.com</domain-name>' in config.xml"

- name: Set domain name (idempotent)
  junos_system:
    domain_name: ansible.com
    state: present
    provider: "{{ netconf }}"
  register: result

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

- name: Deactivate domain name
  junos_system:
    domain_name: ansible.com
    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"
      - "'<domain-name inactive=\"inactive\">' in config.xml"

- name: Activate domain name
  junos_system:
    domain_name: ansible.com
    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"
      - "'<domain-name>ansible.com</domain-name>' in config.xml"

- name: Delete domain name
  junos_system:
    domain_name: ansible.com
    state: absent
    provider: "{{ netconf }}"
  register: result

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

- assert:
    that:
      - "result.changed == true"
      - "'<domain-name>ansible.com</domain-name>' not in config.xml"

- name: Teardown - set domain name
  junos_system:
    domain_name: ansible.com
    state: present
    provider: "{{ netconf }}"

- name: Setup - delete domain search
  junos_system:
    domain_search:
      - test.com
      - sample.com
    state: absent
    provider: "{{ netconf }}"
  register: result

- name: Set domain search
  junos_system:
    domain_search:
      - test.com
      - sample.com
    state: present
    provider: "{{ netconf }}"
  register: result

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

- assert:
    that:
      - "result.changed == true"
      - "'<domain-search>test.com</domain-search>' in config.xml"
      - "'<domain-search>sample.com</domain-search>' in config.xml"

- name: Set domain search (idempotency)
  junos_system:
    domain_search:
      - test.com
      - sample.com
    state: present
    provider: "{{ netconf }}"
  register: result

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

- name: Deactivate domain search
  junos_system:
    domain_search:
      - test.com
      - sample.com
    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"
      - "'<domain-search inactive=\"inactive\">test.com</domain-search>' in config.xml"
      - "'<domain-search inactive=\"inactive\">sample.com</domain-search>' in config.xml"

- name: Activate domain search
  junos_system:
    domain_search:
      - test.com
      - sample.com
    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"
      - "'<domain-search>test.com</domain-search>' in config.xml"
      - "'<domain-search>sample.com</domain-search>' in config.xml"

- name: Delete domain search
  junos_system:
    domain_search:
      - test.com
      - sample.com
    state: absent
    provider: "{{ netconf }}"
  register: result

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

- assert:
    that:
      - "result.changed == true"
      - "'<domain-search>test.com</domain-search>' not in config.xml"
      - "'<domain-search>sample.com</domain-search>' not in config.xml"

- name: Setup - delete name servers
  junos_system:
    name_servers:
      - 8.8.8.8
      - 8.8.4.4
    state: absent
    provider: "{{ netconf }}"
  register: result

- name: Set name servers
  junos_system:
    name_servers:
      - 8.8.8.8
      - 8.8.4.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>8.8.8.8</name>' in config.xml"
      - "'<name>8.8.4.4</name>' in config.xml"

- name: Set name servers (idempotent)
  junos_system:
    name_servers:
      - 8.8.8.8
      - 8.8.4.4
    state: present
    provider: "{{ netconf }}"
  register: result

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

- name: Deactivate name servers
  junos_system:
    name_servers:
      - 8.8.8.8
      - 8.8.4.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"
      - "'<name-server inactive=\"inactive\">' in config.xml"

- name: Activate name servers
  junos_system:
    name_servers:
      - 8.8.8.8
      - 8.8.4.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"
      - "'<name>8.8.8.8</name>' in config.xml"
      - "'<name>8.8.4.4</name>' in config.xml"

- name: Delete name servers
  junos_system:
    name_servers:
      - 8.8.8.8
      - 8.8.4.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"
      - "'<name>8.8.8.8</name>' not in config.xml"
      - "'<name>8.8.4.4</name>' not in config.xml"

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