Altus Project Modules Documentation
This document explains the Terraform code responsible for managing Altus ingest, curated, and transformation projects within Google Cloud Platform.
Overview
The code snippet consists of three distinct modules that handle the creation of projects under filtered folders for ingest, curated, and transformation. Each module uses the Google Project Factory module and filters out specific folders by name.
Local Variables
The code starts by defining local variables that filter out folders based on their names.
locals {
filtered_ingest_folders = { for k, v in module.ingest_folders.id : k => v if k != "Altus-Ingest" }
filtered_curated_folders = { for k, v in module.curated_folders.id : k => v if k != "Altus-Cur" }
filtered_trans_folders = { for k, v in module.trans_folders.id : k => v if k != "Altus-Trans" }
}
Altus Ingest Projects Module
This module handles the creation of ingest projects using the filtered ingest folders.
module "altus_ingest_projects" {
for_each = local.filtered_ingest_folders
source = "terraform-google-modules/project-factory/google"
version = "14.2.0"
...
labels = {
terraform_managed = true
}
}
Altus Curated Projects Module
Similar to the ingest module, this module creates curated projects based on the filtered curated folders.
module "altus_curated_projects" {
for_each = local.filtered_curated_folders
...
labels = {
terraform_managed = true
}
}
Altus Transformation Projects Module
This module is responsible for the transformation projects, created under the filtered transformation folders.
module "altus_trans_projects" {
for_each = local.filtered_trans_folders
...
labels = {
terraform_managed = true
}
}
Usage
Apply this code to manage Altus ingest, curated, and transformation projects within your Google Cloud Platform organization.
Info
From this point on the document is autogenerated, don't modify it directly
Code
The code is creating three local variables, each containing a map of folder IDs from different modules
(projecta_folders
, projectbated_folders
, projectc_folders
),
excluding the folders whose keys match with the owner's project
(i.e., "${var.owner}-projecta"
, "${var.owner}-projectb"
, and "${var.owner}-projectc"
).
Only the child folders represent projects, the parent is just a unit for IAM
locals {
filtered_projecta_folders = { for k, v in module.projecta_folders.id : k => v if k != "${var.owner}-projecta" }
filtered_projectbated_folders = { for k, v in module.projectbated_folders.id : k => v if k != "${var.owner}-projectb" }
filtered_projectc_folders = { for k, v in module.projectc_folders.id : k => v if k != "${var.owner}-projectc" }
}
Bussines Unit Projects: Project A
The code is creating a Terraform module named "owner_projecta_projects" for each entry in local.filtered_projecta_folders
,
using the Google Project Factory module, with a random project ID of length 3, specific organization and billing account IDs,
folder ID from the filtered list, host project ID from a shared VPC host project module,
activation of certain APIs, and a label for billing purposes
module "owner_projecta_projects" {
for_each = local.filtered_projecta_folders
source = "terraform-google-modules/project-factory/google"
version = "14.2.0"
name = each.key
random_project_id = true
random_project_id_length = 3
org_id = var.org_id
billing_account = var.billing_account
folder_id = each.value
svpc_host_project_id = module.shared_vpc_host_project.project_id
activate_apis = var.activate_apis["projecta"]
labels = {
env = "prod"
}
}
Bussines Unit Projects: Project B
The code is creating a Terraform module named "owner_projecta_projects" for each entry in local.filtered_projecta_folders
,
using the Google Project Factory module, with a random project ID of length 3, specific organization and billing account IDs,
folder ID from the filtered list, host project ID from a shared VPC host project module,
activation of certain APIs, and a label for billing purposes
module "owner_projectbated_projects" {
for_each = local.filtered_projectbated_folders
source = "terraform-google-modules/project-factory/google"
version = "14.2.0"
name = each.key
random_project_id = true
random_project_id_length = 3
org_id = var.org_id
billing_account = var.billing_account
folder_id = each.value
svpc_host_project_id = module.shared_vpc_host_project.project_id
activate_apis = var.activate_apis["projectb"]
labels = {
env = "prod"
}
}
Bussines Unit Projects: Project C
The code is creating a Terraform module named "owner_projecta_projects" for each entry in local.filtered_projecta_folders
,
using the Google Project Factory module, with a random project ID of length 3, specific organization and billing account IDs,
folder ID from the filtered list, host project ID from a shared VPC host project module,
activation of certain APIs, and a label for billing purposes
module "owner_projectc_projects" {
for_each = local.filtered_projectc_folders
source = "terraform-google-modules/project-factory/google"
version = "14.2.0"
name = each.key
random_project_id = true
random_project_id_length = 3
org_id = var.org_id
billing_account = var.billing_account
folder_id = each.value
svpc_host_project_id = module.shared_vpc_host_project.project_id
activate_apis = var.activate_apis["projectc"]
labels = {
env = "prod"
}
}