data "google_client_config" "default" {} resource "google_compute_instance" "vm" { name = var.name machine_type = var.machine_type can_ip_forward = var.can_ip_forward project = var.project_id != null ? var.project_id : data.google_client_config.default.project description = var.description boot_disk { initialize_params { image = "debian-cloud/debian-12" } } network_interface { network = var.network_name subnetwork = var.subnet_name subnetwork_project = var.project_id != null ? var.project_id : data.google_client_config.default.project network_ip = var.internal_ip != null ? var.internal_ip : null dynamic "access_config" { for_each = var.external_ip_name != null && var.external_ip_name != "AUTO" ? [1] : [] content { nat_ip = data.google_compute_address.external_ip[0].address } } dynamic "access_config" { for_each = var.external_ip_name == "AUTO" ? [1] : [] content { nat_ip = google_compute_address.external_ip[0].address } } } metadata = { ssh-keys = "${var.ssh[0].public_key} ${var.ssh[0].ssh_user}" startup_script = var.startup_script } } resource "google_compute_route" "route_to_remote_network" { count = length(var.remote_subnets) name = "${var.network_name}-to-${replace(var.remote_subnets[count.index], "/[./]/", "-")}" project = var.project_id != null ? var.project_id : data.google_client_config.default.project network = var.network_name dest_range = var.remote_subnets[count.index] next_hop_instance = google_compute_instance.vm.id next_hop_instance_zone = google_compute_instance.vm.zone } resource "google_compute_address" "external_ip" { count = var.external_ip_name == "AUTO" ? 1 : 0 name = "${var.name}-ip" project = var.project_id != null ? var.project_id : data.google_client_config.default.project address_type = "EXTERNAL" address = var.external_ip_name } data "google_compute_address" "external_ip" { count = var.external_ip_name != null && var.external_ip_name != "AUTO" ? 1 : 0 name = var.external_ip_name project = var.project_id != null ? var.project_id : data.google_client_config.default.project }