---
# run with option -i localhost
# need root permissions

- name: host module testing
  hosts: localhost
  connection: local
  gather_facts: no
  sudo: yes

  pre_tasks:
    - name: backup /etc/hosts
      command: cp /etc/hosts /etc/hosts.origin

  post_tasks:
    - name: restore /etc/hosts
      command: cp /etc/hosts.origin /etc/hosts

  tasks:
    - name: test add a record
      host: hostname=foobar ip=192.168.123.1
      register: result
      failed_when: not result.changed

    - name: test error handling only hostname given on present
      host: hostname=foobar
      register: result
      failed_when: result.changed

    - name: test error handling only ip given on present
      host: ip=192.168.123.1
      register: result
      failed_when: result.changed

    - name: test record exists
      host: hostname=foobar ip=192.168.123.1
      register: result
      failed_when: result.changed

    - name: test remove record using hostname
      host: hostname=foobar state=absent
      register: result
      failed_when: not result.changed

    - name: test remove not existing record using hostname
      host: hostname=foobar state=absent
      register: result
      failed_when: result.changed

    - name: test add a record again
      host: hostname=foobar ip=192.168.123.1
      register: result
      failed_when: not result.changed

    - name: test remove record using ip
      host: ip=192.168.123.1 state=absent
      register: result
      failed_when: not result.changed

    - name: test remove not existing record using ip
      host: ip=192.168.123.1 state=absent
      register: result
      failed_when: result.changed

    - name: test add a record with alias
      host: hostname=foobar ip=192.168.123.1 aliases=foobar.com,foobar.net
      register: result
      failed_when: not result.changed

    - name: test add an existing record with alias
      host: hostname=foobar ip=192.168.123.1 aliases=foobar.com,foobar.net
      register: result
      failed_when: result.changed

    - name: test add an existing record with changed alias
      host: hostname=foobar ip=192.168.123.1 aliases=foobar.net,foobar.com
      register: result
      failed_when: not result.changed

    - name: test remove aliases from existing record
      host: hostname=foobar ip=192.168.123.1
      register: result
      failed_when: not result.changed

    - name: test add aliases for existing record
      host: hostname=foobar ip=192.168.123.1 aliases=foobar.net,foobar.com
      register: result
      failed_when: not result.changed

    - name: test change ip on existing record
      host: hostname=foobar ip=192.168.123.2
      register: result
      failed_when: not result.changed

    - name: test change hostname on existing record
      host: hostname=barfoo ip=192.168.123.2
      register: result
      failed_when: not result.changed