- hosts: localhost
  connection: local

  tasks:
    - block:
        - name: set up aws connection info
          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: True

        - name: create ecs cluster
          ecs_cluster:
            name: "{{ resource_prefix }}"
            state: present
            <<: *aws_connection_info

        - name: create ecs_taskdefinition with bridged network
          ecs_taskdefinition:
            containers:
              - name: my_container
                image: ubuntu
                memory: 128
            family: "{{ resource_prefix }}"
            state: present
            network_mode: bridge
            <<: *aws_connection_info
          register: ecs_taskdefinition_creation

        - name: create ecs_taskdefinition with awsvpc network
          ecs_taskdefinition:
            containers:
              - name: my_container
                image: ubuntu
                memory: 128
            family: "{{ resource_prefix }}-vpc"
            state: present
            network_mode: awsvpc
            <<: *aws_connection_info
          register: ecs_taskdefinition_creation_vpc

        - name: ecs_taskdefinition works fine even when older botocore is used
          assert:
            that:
              - ecs_taskdefinition_creation_vpc.changed

        - name: create ecs_service using bridged network
          ecs_service:
            name: "{{ resource_prefix }}"
            cluster: "{{ resource_prefix }}"
            task_definition: "{{ resource_prefix }}"
            desired_count: 1
            state: present
            <<: *aws_connection_info
          register: ecs_service_creation

        - name: create ecs_service using awsvpc network_configuration
          ecs_service:
            name: "{{ resource_prefix }}-vpc"
            cluster: "{{ resource_prefix }}"
            task_definition: "{{ resource_prefix }}"
            desired_count: 1
            network_configuration:
              subnets:
                - subnet-abcd1234
              groups:
                - sg-abcd1234
            state: present
            <<: *aws_connection_info
          register: ecs_service_creation_vpc
          ignore_errors: yes

        - name: check that graceful failure message is returned from ecs_service
          assert:
            that:
              - ecs_service_creation_vpc.failed
              - 'ecs_service_creation_vpc.msg == "botocore needs to be version 1.7.44 or higher to use network configuration"'

        - name: create ecs_task using awsvpc network_configuration
          ecs_task:
            cluster: "{{ resource_prefix }}-vpc"
            task_definition: "{{ resource_prefix }}"
            operation: run
            count: 1
            started_by: me
            network_configuration:
              subnets:
                - subnet-abcd1234
              groups:
                - sg-abcd1234
            <<: *aws_connection_info
          register: ecs_task_creation_vpc
          ignore_errors: yes

        - name: check that graceful failure message is returned from ecs_task
          assert:
            that:
              - ecs_task_creation_vpc.failed
              - 'ecs_task_creation_vpc.msg == "botocore needs to be version 1.7.44 or higher to use network configuration"'

      always:
        - name: scale down ecs service
          ecs_service:
            name: "{{ resource_prefix }}"
            cluster: "{{ resource_prefix }}"
            task_definition: "{{ resource_prefix }}"
            desired_count: 0
            state: present
            <<: *aws_connection_info
          ignore_errors: yes

        - name: pause to wait for scale down
          pause:
            seconds: 30

        - name: remove ecs service
          ecs_service:
            name: "{{ resource_prefix }}"
            cluster: "{{ resource_prefix }}"
            task_definition: "{{ resource_prefix }}"
            desired_count: 1
            state: absent
            <<: *aws_connection_info
          ignore_errors: yes

        - name: remove ecs task definition
          ecs_taskdefinition:
            containers:
              - name: my_container
                image: ubuntu
                memory: 128
            family: "{{ resource_prefix }}"
            revision: "{{ ecs_taskdefinition_creation.taskdefinition.revision }}"
            state: absent
            <<: *aws_connection_info
          ignore_errors: yes

        - name: remove ecs cluster
          ecs_cluster:
            name: "{{ resource_prefix }}"
            state: absent
            <<: *aws_connection_info
          ignore_errors: yes
