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

- name: Network configured
  gcp_compute_network:
    auth_kind: serviceaccount
    service_account_file: "{{ credentials_file_path }}"
    project: "{{ project_id }}"
    name: algovpn
    auto_create_subnetworks: true
    routing_config:
      routing_mode: REGIONAL
  register: gcp_compute_network

- name: Firewall configured
  gcp_compute_firewall:
    auth_kind: serviceaccount
    service_account_file: "{{ credentials_file_path }}"
    project: "{{ project_id }}"
    name: algovpn
    network: "{{ gcp_compute_network }}"
    direction: INGRESS
    allowed:
      - ip_protocol: udp
        ports:
          - "500"
          - "4500"
          - "{{ wireguard_port | string }}"
      - ip_protocol: tcp
        ports:
          - "{{ ssh_port }}"
      - ip_protocol: icmp

- when: cloud_providers.gce.external_static_ip
  block:
    - name: External IP allocated
      gcp_compute_address:
        auth_kind: serviceaccount
        service_account_file: "{{ credentials_file_path }}"
        project: "{{ project_id }}"
        name: "{{ algo_server_name }}"
        region: "{{ algo_region }}"
      register: gcp_compute_address

    - name: Set External IP as a fact
      set_fact:
        external_ip: "{{ gcp_compute_address.address }}"

- name: Instance created
  gcp_compute_instance:
    auth_kind: serviceaccount
    service_account_file: "{{ credentials_file_path }}"
    project: "{{ project_id }}"
    name: "{{ algo_server_name }}"
    zone: "{{ algo_zone }}"
    machine_type: "{{ cloud_providers.gce.size }}"
    disks:
      - auto_delete: true
        boot: true
        initialize_params:
          source_image: projects/ubuntu-os-cloud/global/images/family/{{ cloud_providers.gce.image }}
    metadata:
      ssh-keys: algo:{{ ssh_public_key_lookup }}
      user-data: "{{ lookup('template', 'files/cloud-init/base.yml') }}"
    network_interfaces:
      - network: "{{ gcp_compute_network }}"
        access_configs:
          - name: "{{ algo_server_name }}"
            nat_ip: "{{ gcp_compute_address | default(None) }}"
            type: ONE_TO_ONE_NAT
    tags:
      items:
        - environment-algo
  register: gcp_compute_instance

- set_fact:
    cloud_instance_ip: "{{ gcp_compute_instance.networkInterfaces[0].accessConfigs[0].natIP }}"
    ansible_ssh_user: algo
    ansible_ssh_port: "{{ ssh_port }}"
    cloudinit: true
