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"
}
}