---
- hosts: localhost
  become: false
  gather_facts: no
  vars:
    cloud_machine_type: g1-small
    mode: default
    preemptible: no
    ci_job_name: "{{ lookup('env', 'CI_JOB_NAME') }}"
    delete_group_vars: no
  tasks:
    - name: include vars for test {{ ci_job_name }}
      include_vars: "../files/{{ ci_job_name }}.yml"

    - name: replace_test_id
      set_fact:
        test_name: "{{ test_id |regex_replace('\\.', '-') }}"

    - name: set instance names
      set_fact:
        instance_names: >-
          {%- if mode in ['separate', 'separate-scale', 'ha', 'ha-scale'] -%}
          k8s-{{ test_name }}-1,k8s-{{ test_name }}-2,k8s-{{ test_name }}-3
          {%- elif mode == 'aio' -%}
          k8s-{{ test_name }}-1
          {%- else -%}
          k8s-{{ test_name }}-1,k8s-{{ test_name }}-2
          {%- endif -%}

    - name: Create gce instances
      gce:
        instance_names: "{{ instance_names }}"
        machine_type: "{{ cloud_machine_type }}"
        image: "{{ cloud_image | default(omit) }}"
        image_family: "{{ cloud_image_family | default(omit) }}"
        preemptible: "{{ preemptible }}"
        service_account_email: "{{ gce_service_account_email }}"
        pem_file: "{{ gce_pem_file | default(omit) }}"
        credentials_file: "{{ gce_credentials_file | default(omit) }}"
        project_id: "{{ gce_project_id }}"
        zone: "{{ cloud_region }}"
        metadata: '{"test_id": "{{ test_id }}", "network": "{{ kube_network_plugin }}", "startup-script": "{{ startup_script|default("") }}"}'
        tags: "build-{{ test_name }},{{ kube_network_plugin }}"
        ip_forward: yes
        service_account_permissions: ['compute-rw']
      register: gce

    - name: Add instances to host group
      add_host: hostname={{ item.public_ip }} groupname="waitfor_hosts"
      with_items: '{{ gce.instance_data }}'

    - name: Template the inventory
      template:
        src: ../templates/inventory-gce.j2
        dest: "{{ inventory_path }}"

    - name: Make group_vars directory
      file:
        path: "{{ inventory_path|dirname }}/group_vars"
        state: directory
      when: mode in ['scale', 'separate-scale', 'ha-scale']

    - name: Template fake hosts group vars
      template:
        src: ../templates/fake_hosts.yml.j2
        dest: "{{ inventory_path|dirname }}/group_vars/fake_hosts.yml"
      when: mode in ['scale', 'separate-scale', 'ha-scale']

    - name: Delete group_vars directory
      file:
        path: "{{ inventory_path|dirname }}/group_vars"
        state: absent
        recurse: yes
      when: delete_group_vars
