- block:
    - name: Build python virtual environment
      import_tasks: venv.yml

    - block:
      - name: Include prompts
        import_tasks: prompts.yml

      - name: Set additional facts
        set_fact:
          algo_do_region: >-
            {% if region is defined %}{{ region }}
            {%- elif _algo_region.user_input is defined and _algo_region.user_input != "" %}{{ do_regions[_algo_region.user_input | int -1 ]['slug'] }}
            {%- else %}{{ do_regions[default_region | int - 1]['slug'] }}{% endif %}
          public_key: "{{ lookup('file', '{{ SSH_keys.public }}') }}"

      - block:
          - name: "Delete the existing Algo SSH keys"
            digital_ocean:
              state: absent
              command: ssh
              api_token: "{{ algo_do_token }}"
              name: "{{ SSH_keys.comment }}"
            register: ssh_keys
            until: ssh_keys.changed != true
            retries: 10
            delay: 1

        rescue:
          - name: Collect the fail error
            digital_ocean:
              state: absent
              command: ssh
              api_token: "{{ algo_do_token }}"
              name: "{{ SSH_keys.comment }}"
            register: ssh_keys
            ignore_errors: yes

          - debug: var=ssh_keys

          - fail:
              msg: "Please, ensure that your API token is not read-only."

      - name: "Upload the SSH key"
        digital_ocean:
          state: present
          command: ssh
          ssh_pub_key: "{{ public_key }}"
          api_token: "{{ algo_do_token }}"
          name: "{{ SSH_keys.comment }}"
        register: do_ssh_key

      - name: "Creating a droplet..."
        digital_ocean:
          state: present
          command: droplet
          name: "{{ algo_server_name }}"
          region_id: "{{ algo_do_region }}"
          size_id: "{{ cloud_providers.digitalocean.size }}"
          image_id: "{{ cloud_providers.digitalocean.image }}"
          ssh_key_ids: "{{ do_ssh_key.ssh_key.id }}"
          unique_name: yes
          api_token: "{{ algo_do_token }}"
          ipv6: yes
        register: do

      - set_fact:
          cloud_instance_ip: "{{ do.droplet.ip_address }}"
          ansible_ssh_user: root

      - name: Tag the droplet
        digital_ocean_tag:
          name: "Environment:Algo"
          resource_id: "{{ do.droplet.id }}"
          api_token: "{{ algo_do_token }}"
          state: present

      - block:
          - name: "Delete the new Algo SSH key"
            digital_ocean:
              state: absent
              command: ssh
              api_token: "{{ algo_do_token }}"
              name: "{{ SSH_keys.comment }}"
            register: ssh_keys
            until: ssh_keys.changed != true
            retries: 10
            delay: 1

        rescue:
          - name: Collect the fail error
            digital_ocean:
              state: absent
              command: ssh
              api_token: "{{ algo_do_token }}"
              name: "{{ SSH_keys.comment }}"
            register: ssh_keys
            ignore_errors: yes

          - debug: var=ssh_keys

          - fail:
              msg: "Please, ensure that your API token is not read-only."
      environment:
        PYTHONPATH: "{{ digitalocean_venv }}/lib/python2.7/site-packages/"
  rescue:
    - debug: var=fail_hint
      tags: always
    - fail:
      tags: always
