- hosts: all
  gather_facts: false
  tasks:
      - name: check initial state
        assert:
          that:
            - "'one' in ansible_play_hosts"
            - "'two' in ansible_play_hosts"
            - "'three' in ansible_play_hosts"
            - "'four' not in ansible_play_hosts"
        run_once: true

      - name: add a host
        add_host:
          name: yolo
          parity: null

      - name: group em
        group_by:
          key: '{{parity}}'

- hosts: all
  gather_facts: false
  tasks:
    - name: test and ensure we restore symlink
      run_once: true
      block:
      - name: check added host state
        assert:
          that:
            - "'yolo' in ansible_play_hosts"
            - "'even' in groups"
            - "'odd' in groups"
            - "'two' in groups['even']"
            - "'three' in groups['odd']"

      - name: change symlink
        file: src=./inventory_new.yml dest=./inventory_refresh.yml state=link force=yes follow=false
        delegate_to: localhost

      - name: refresh the inventory to new source
        meta: refresh_inventory

      always:
        - name: revert symlink, invenotry was already reread or failed
          file: src=./inventory_old.yml dest=./inventory_refresh.yml state=link force=yes follow=false
          delegate_to: localhost

- hosts: all
  gather_facts: false
  tasks:
      - name: check refreshed state
        assert:
          that:
            - "'one' not in ansible_play_hosts"
            - "'two' in ansible_play_hosts"
            - "'three' in ansible_play_hosts"
            - "'four' in ansible_play_hosts"
        run_once: true

      - name: check added host state
        assert:
          that:
            - "'yolo' in ansible_play_hosts"
            - "'even' in groups"
            - "'odd' in groups"
            - "'two' in groups['even']"
            - "'three' in groups['odd']"
        run_once: true
