infra/main.tf (142 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 * * 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. */ module "project_services" { source = "terraform-google-modules/project-factory/google//modules/project_services" version = "~> 17.0" project_id = var.project_id enable_apis = true activate_apis = local.services disable_services_on_destroy = false } # This resource executes gcloud commands to check whether the Cloud Resource Manager API is enabled. # Since enabling APIs can take a few seconds, we need to make the deployment wait until the API is enabled before resuming. resource "null_resource" "check_cloudresourcemanager_api" { provisioner "local-exec" { command = <<-EOT COUNTER=0 MAX_TRIES=100 while ! gcloud services list --project=${module.project_services.project_id} | grep -i "cloudresourcemanager.googleapis.com" && [ $COUNTER -lt $MAX_TRIES ] do sleep 6 printf "." COUNTER=$((COUNTER + 1)) done if [ $COUNTER -eq $MAX_TRIES ]; then echo "cloudresourcemanager api is not enabled, terraform can not continue!" exit 1 fi sleep 20 EOT } depends_on = [ module.project_services ] } # This resource executes gcloud commands to check whether the service usage API is enabled. # Since enabling APIs can take a few seconds, we need to make the deployment wait until the API is enabled before resuming. resource "null_resource" "check_serviceusage_api" { provisioner "local-exec" { command = <<-EOT COUNTER=0 MAX_TRIES=100 while ! gcloud services list --project=${module.project_services.project_id} | grep -i "serviceusage.googleapis.com" && [ $COUNTER -lt $MAX_TRIES ] do sleep 6 printf "." COUNTER=$((COUNTER + 1)) done if [ $COUNTER -eq $MAX_TRIES ]; then echo "serviceusage api is not enabled, terraform can not continue!" exit 1 fi sleep 20 EOT } depends_on = [ module.project_services ] } # This resource executes gcloud commands to check whether the IAM API is enabled. # Since enabling APIs can take a few seconds, we need to make the deployment wait until the API is enabled before resuming. resource "null_resource" "check_iam_api" { provisioner "local-exec" { command = <<-EOT COUNTER=0 MAX_TRIES=100 while ! gcloud services list --project=${module.project_services.project_id} | grep -i "iam.googleapis.com" && [ $COUNTER -lt $MAX_TRIES ] do sleep 6 printf "." COUNTER=$((COUNTER + 1)) done if [ $COUNTER -eq $MAX_TRIES ]; then echo "iam api is not enabled, terraform can not continue!" exit 1 fi sleep 20 EOT } depends_on = [ module.project_services ] } # This resource executes gcloud commands to check whether the Cloud Run API is enabled. # Since enabling APIs can take a few seconds, we need to make the deployment wait until the API is enabled before resuming. resource "null_resource" "check_run_api" { provisioner "local-exec" { command = <<-EOT COUNTER=0 MAX_TRIES=100 while ! gcloud services list --project=${module.project_services.project_id} | grep -i "run.googleapis.com" && [ $COUNTER -lt $MAX_TRIES ] do sleep 6 printf "." COUNTER=$((COUNTER + 1)) done if [ $COUNTER -eq $MAX_TRIES ]; then echo "run api is not enabled, terraform can not continue!" exit 1 fi sleep 20 EOT } depends_on = [ module.project_services ] } # This resource executes gcloud commands to check whether the Cloud Build API is enabled. # Since enabling APIs can take a few seconds, we need to make the deployment wait until the API is enabled before resuming. resource "null_resource" "check_cloudbuild_api" { provisioner "local-exec" { command = <<-EOT COUNTER=0 MAX_TRIES=100 while ! gcloud services list --project=${module.project_services.project_id} | grep -i "cloudbuild.googleapis.com" && [ $COUNTER -lt $MAX_TRIES ] do sleep 6 printf "." COUNTER=$((COUNTER + 1)) done if [ $COUNTER -eq $MAX_TRIES ]; then echo "cloudbuild api is not enabled, terraform can not continue!" exit 1 fi sleep 20 EOT } depends_on = [ module.project_services ] } ## Creating venv for python scripts resource "null_resource" "py_venv" { triggers = { bq_dataset = var.dataset_name } provisioner "local-exec" { working_dir = "scripts/" command = "if [ ! -d 'venv' ]; then python3 -m venv venv;fi; venv/bin/pip install -r requirements.txt" } }