infra/terraform/modules/a3/common/network/main.tf (148 lines of code) (raw):

/* Copyright 2024 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ locals { nic0 = { network = { id = one(concat( data.google_compute_network.nic0[*].id, resource.google_compute_network.nic0[*].id, )) name = one(concat( data.google_compute_network.nic0[*].name, resource.google_compute_network.nic0[*].name, )) self_link = one(concat( data.google_compute_network.nic0[*].self_link, resource.google_compute_network.nic0[*].self_link, )) } subnetwork = { name = one(concat( data.google_compute_subnetwork.nic0[*].name, resource.google_compute_subnetwork.nic0[*].name, )) self_link = one(concat( data.google_compute_subnetwork.nic0[*].self_link, resource.google_compute_subnetwork.nic0[*].self_link, )) } } } // CPU NIC data "google_compute_network" "nic0" { count = var.nic0_existing != null ? 1 : 0 name = var.nic0_existing.network_name project = var.project_id } data "google_compute_subnetwork" "nic0" { count = var.nic0_existing != null ? 1 : 0 name = var.nic0_existing.subnetwork_name project = var.project_id region = var.region } resource "google_compute_network" "nic0" { count = var.nic0_existing != null ? 0 : 1 auto_create_subnetworks = false mtu = 8896 name = var.resource_prefix project = var.project_id } resource "google_compute_subnetwork" "nic0" { count = var.nic0_existing != null ? 0 : 1 ip_cidr_range = "10.0.0.0/19" name = var.resource_prefix network = google_compute_network.nic0[0].self_link project = var.project_id region = var.region } resource "google_compute_firewall" "internal-ingress" { count = var.nic0_existing != null ? 0 : 1 description = "internal ingress traffic (icmp/tcp/udp) to machine on nic0" direction = "INGRESS" name = "${var.resource_prefix}-internal-ingress" network = google_compute_network.nic0[0].self_link project = var.project_id source_ranges = ["10.0.0.0/8"] allow { protocol = "icmp" } allow { protocol = "tcp" ports = ["0-65535"] } allow { protocol = "udp" ports = ["0-65535"] } } resource "google_compute_firewall" "external-ingress" { count = var.nic0_existing != null ? 0 : 1 description = "external ingress traffic (icmp) to machine on nic0" direction = "INGRESS" name = "${var.resource_prefix}-external-ingress" network = google_compute_network.nic0[0].self_link project = var.project_id source_ranges = ["0.0.0.0/0"] allow { protocol = "icmp" } } resource "google_compute_firewall" "iap-ssh" { count = var.nic0_existing != null ? 0 : 1 description = "identity-aware proxy ssh traffic to machine on nic0" direction = "INGRESS" name = "${var.resource_prefix}-iap-ssh" network = google_compute_network.nic0[0].self_link project = var.project_id source_ranges = ["35.235.240.0/20"] allow { protocol = "tcp" ports = ["22"] } } // GPU NICs resource "google_compute_network" "gpus" { count = 4 auto_create_subnetworks = false mtu = 8244 name = "${var.resource_prefix}-gpu-${count.index}" project = var.project_id } resource "google_compute_subnetwork" "gpus" { count = 4 ip_cidr_range = "10.${count.index + 1}.0.0/19" name = "${var.resource_prefix}-gpu-${count.index}" network = google_compute_network.gpus[count.index].self_link project = var.project_id region = var.region } resource "google_compute_firewall" "internal-ingress-gpus" { count = 4 description = "allow internal ingress traffic to gpus on nic${count.index + 1}" direction = "INGRESS" name = "${var.resource_prefix}-internal-ingress-gpu-${count.index}" network = resource.google_compute_network.gpus[count.index].self_link project = var.project_id source_ranges = ["10.0.0.0/8"] allow { protocol = "icmp" } allow { protocol = "tcp" ports = ["0-65535"] } allow { protocol = "udp" ports = ["0-65535"] } }