---
- hosts: 127.0.0.1
  connection: local
  gather_facts: no
  environment: "{{ ansible_test.environment }}"
  tasks:

    - block:

        # Create VPC, subnet, security group, and find image_id to create instance

        - include_tasks: setup.yml

        - name: assert group was populated with inventory but is empty
          assert:
            that:
              - "'aws_ec2' in groups"
              - "not groups.aws_ec2"

        # Create new host, refresh inventory, remove host, refresh inventory

        - name: set connection information for all tasks
          set_fact:
            aws_connection_info: &aws_connection_info
              aws_access_key: '{{ aws_access_key }}'
              aws_secret_key: '{{ aws_secret_key }}'
              security_token: '{{ security_token }}'
              region: '{{ aws_region }}'
          no_log: yes

        - name: create a new host
          ec2:
            image: '{{ image_id }}'
            exact_count: 1
            count_tag:
              Name: '{{ resource_prefix }}'
            instance_tags:
              Name: '{{ resource_prefix }}'
            instance_type: t2.micro
            wait: yes
            group_id: '{{ sg_id }}'
            vpc_subnet_id: '{{ subnet_id }}'
            <<: *aws_connection_info
          register: setup_instance

        - meta: refresh_inventory

        - name: assert group was populated with inventory and is no longer empty
          assert:
            that:
              - "'aws_ec2' in groups"
              - "groups.aws_ec2 | length == 1"
              - "groups.aws_ec2.0 == '{{ resource_prefix }}'"

        - name: remove setup ec2 instance
          ec2:
            instance_type: t2.micro
            instance_ids: '{{ setup_instance.instance_ids }}'
            state: absent
            wait: yes
            instance_tags:
              Name: '{{ resource_prefix }}'
            group_id: '{{ sg_id }}'
            vpc_subnet_id: '{{ subnet_id }}'
            <<: *aws_connection_info

        - meta: refresh_inventory

        - name: assert group was populated with inventory but is empty
          assert:
            that:
              - "'aws_ec2' in groups"
              - "not groups.aws_ec2"

      always:

        - name: remove setup ec2 instance
          ec2:
            instance_type: t2.micro
            instance_ids: '{{ setup_instance.instance_ids }}'
            state: absent
            wait: yes
            instance_tags:
              Name: '{{ resource_prefix }}'
            group_id: '{{ sg_id }}'
            vpc_subnet_id: '{{ subnet_id }}'
            <<: *aws_connection_info
          ignore_errors: yes
          when: setup_instance is defined

        - include_tasks: tear_down.yml
