terraform/locals.tf (73 lines of code) (raw):
# Copyright 2025 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.
locals {
git_repo_url_map = {
for repo_key, repo_settings in var.dataform_repositories :
repo_key => repo_settings.remote_repo_url
}
repo_prefix = {
for repo_key, repo_url in local.git_repo_url_map :
repo_key => replace(repo_url, "/.*/(.*)/.*\\.git/", "$1")
}
repo_name = {
for repo_key, repo_url in local.git_repo_url_map :
repo_key => replace(repo_url, "/.*/(.*)\\.git/", "$1")
}
git_path = {
for repo_key in keys(local.git_repo_url_map) :
repo_key => "${local.repo_prefix[repo_key]}/${local.repo_name[repo_key]}"
}
dataform_repositories = {
for repo_name, repo_config in var.dataform_repositories :
repo_name => merge(
repo_config,
{
secret_name = "${repo_name}_secret"
}
)
}
/* Extract datasets defined via dataform.json variables if any, it should include 3 variables for each dataset with next format:
"dataset_id_<DATASET_IDENTIFIER>":"<YOUR_DATASET_NAME>",
"dataset_projectid_<DATASET_IDENTIFIER>":"<YOUR_DATASET_PROJECT>",
"dataset_location_<DATASET_IDENTIFIER>":"<YOUR_DATASET_LOCATION>",
*/
dataform_configs = [
for repo_key, repo_data in var.dataform_repositories :
jsondecode(data.github_repository_file.dataform_config[repo_key].content)
]
all_vars = merge([
for config in local.dataform_configs : config.vars
]...)
variables = ({
for k, v in local.all_vars : split("_", k)[2] => {
(split("_", k)[1]) = v
}...
if substr(k, 0, 8) == "dataset_"
})
dataform_datasets = {
for dataset_name, attribute_list in local.variables : dataset_name => merge(attribute_list...)
}
all_created_datasets = merge(
{ for k, v in var.ddl_buckets :
"${v.ddl_dataset_id}-${v.ddl_project_id}-${v.ddl_region}" => {
dataset_id = v.ddl_dataset_id
project = v.ddl_project_id
location = v.ddl_region
lake = v.dataplex_lake
zone = v.dataplex_zone
from_gcs = true
from_dataform = false
} if v.ddl_flavor == "bigquery"
},
{ for k, v in local.dataform_datasets :
"${v.id}-${v.projectid}-${v.location}" => {
dataset_id = v.id
project = v.projectid
location = v.location
description = v.description
lake = v.lake
zone = v.zone
from_dataform = true
from_gcs = false
}
}
)
}