terraform/modules/base/main.tf (188 lines of code) (raw):

# Copyright (c) 2024-2025 Accenture, All Rights Reserved. # # 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 # # http://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. # # Description: # Main configuration file for the "base" module. # Makes use of other modules to provision various resources. data "google_project" "project" {} module "sdv_apis" { source = "../sdv-apis" list_of_apis = var.sdv_list_of_apis } module "sdv_secrets" { source = "../sdv-secrets" location = var.sdv_location gcp_secrets_map = var.sdv_gcp_secrets_map project_id = data.google_project.project.project_id depends_on = [ module.sdv_wi ] } module "sdv_wi" { source = "../sdv-wi" wi_service_accounts = var.sdv_wi_service_accounts project_id = data.google_project.project.project_id depends_on = [ module.sdv_gke_cluster ] } module "sdv_gcs" { source = "../sdv-gcs" bucket_name = "${data.google_project.project.project_id}-aaos" location = var.sdv_location } module "sdv_network" { source = "../sdv-network" network = var.sdv_network subnetwork = var.sdv_subnetwork region = var.sdv_region router_name = var.sdv_network_egress_router_name } module "sdv_bastion_host" { source = "../sdv-bastion-host" depends_on = [ module.sdv_apis, module.sdv_network ] host_name = var.sdv_bastion_host_name service_account = var.sdv_bastion_host_sa network = var.sdv_network subnetwork = var.sdv_subnetwork zone = var.sdv_zone members = var.sdv_bastion_host_members } module "sdv_gke_cluster" { source = "../sdv-gke-cluster" depends_on = [ module.sdv_apis, module.sdv_network, module.sdv_gcs ] project_id = data.google_project.project.project_id cluster_name = var.sdv_cluster_name location = var.sdv_location network = var.sdv_network subnetwork = var.sdv_subnetwork service_account = var.sdv_computer_sa # Default node pool configuration node_pool_name = var.sdv_cluster_node_pool_name machine_type = var.sdv_cluster_node_pool_machine_type node_count = var.sdv_cluster_node_pool_count node_locations = var.sdv_cluster_node_locations # build node pool configuration build_node_pool_name = var.sdv_build_node_pool_name build_node_pool_node_count = var.sdv_build_node_pool_node_count build_node_pool_machine_type = var.sdv_build_node_pool_machine_type build_node_pool_min_node_count = var.sdv_build_node_pool_min_node_count build_node_pool_max_node_count = var.sdv_build_node_pool_max_node_count } module "sdv_artifact_registry" { source = "../sdv-artifact-registry" repository_id = var.sdv_artifact_registry_repository_id location = var.sdv_location members = var.sdv_artifact_registry_repository_members reader_members = var.sdv_artifact_registry_repository_reader_members } module "sdv_certificate_manager" { source = "../sdv-certificate-manager" name = var.sdv_ssl_certificate_name domain = var.sdv_ssl_certificate_domain depends_on = [module.sdv_apis] } module "sdv_ssl_policy" { source = "../sdv-ssl-policy" name = "gke-ssl-policy" min_tls_version = "TLS_1_2" profile = "RESTRICTED" } module "sdv_gcs_scripts" { source = "../sdv-gcs" bucket_name = "${data.google_project.project.project_id}-scripts" location = var.sdv_location } module "sdv_copy_to_bastion_host" { source = "../sdv-copy-to-bastion-host" bastion_host = var.sdv_bastion_host_name local_file_path = "../bash-scripts/stage1.sh" destination_directory = "~/bash-scripts" destination_filename = "stage1.sh" zone = var.sdv_zone location = var.sdv_location bucket_name = "${data.google_project.project.project_id}-scripts" bucket_destination_path = "bash-scripts/stage1.sh" depends_on = [ module.sdv_bastion_host, module.sdv_gcs_scripts, module.sdv_gke_cluster, module.sdv_wi ] } module "sdv_bash_on_bastion_host" { source = "../sdv-bash-on-bastion-host" bastion_host = var.sdv_bastion_host_name zone = var.sdv_zone command = var.sdv_bastion_host_bash_command depends_on = [ module.sdv_bastion_host, module.sdv_copy_to_bastion_host, module.sdv_gke_cluster, module.sdv_wi, module.sdv_artifact_registry ] } module "sdv_sa_key_secret_gce_creds" { source = "../sdv-sa-key-secret" service_account_id = var.sdv_computer_sa secret_id = "gce-creds" location = var.sdv_location project_id = data.google_project.project.project_id gke_access = [ { ns = "jenkins" sa = "jenkins-sa" } ] depends_on = [ module.sdv_wi ] } # assign role cloud module "sdv_iam_gcs_users" { source = "../sdv-iam" member = [ "serviceAccount:${var.sdv_computer_sa}" ] role = "roles/storage.objectUser" } module "sdv_iam_compute_instance_admin" { source = "../sdv-iam" member = [ "serviceAccount:${var.sdv_computer_sa}" ] role = "roles/compute.instanceAdmin.v1" } module "sdv_iam_compute_network_admin" { source = "../sdv-iam" member = [ "serviceAccount:${var.sdv_computer_sa}" ] role = "roles/compute.networkAdmin" } # permission: IAP-secured Tunnel User (roles/iap.tunnelResourceAccessor) for 268541173342-compute module "sdv_iam_secured_tunnel_user" { source = "../sdv-iam" member = [ "serviceAccount:${var.sdv_computer_sa}", ] role = "roles/iap.tunnelResourceAccessor" } # permission: Service Account User (roles/iam.serviceAccountUser) for 268541173342-compute module "sdv_iam_service_account_user" { source = "../sdv-iam" member = [ "serviceAccount:${var.sdv_computer_sa}" ] role = "roles/iam.serviceAccountUser" } # defininion for custom VPN Firewall to to and from the instances. # All traffic to instances, even from other instances, is blocked by the firewall unless firewall rules are created to allow it. # allow tcp port 22 for computer_sa resource "google_compute_firewall" "allow_tcp_22" { name = "cuttflefish-allow-tcp-22" network = var.sdv_network allow { protocol = "tcp" ports = ["22"] } #source_ranges = ["10.1.0.0/24"] source_ranges = ["0.0.0.0/0"] target_service_accounts = [var.sdv_computer_sa] depends_on = [ module.sdv_network ] }