alz/local/locals.files.tf (42 lines of code) (raw):

locals { deploy_script_file_directory_path = "${path.module}/scripts" deploy_script_files = var.iac_type == "bicep" ? fileset(local.deploy_script_file_directory_path, "**/*.ps1") : [] starter_module_config = var.iac_type == "bicep" ? jsondecode(file("${var.module_folder_path}/${var.bicep_config_file_path}")).starter_modules[var.starter_module_name] : null script_files_all = var.iac_type == "bicep" ? local.starter_module_config.deployment_files : [] target_folder_name = "scripts" # Get a list of on-demand folders on_demand_folders = var.iac_type == "bicep" ? local.starter_module_config.on_demand_folders : [] networking_type = var.iac_type == "bicep" ? jsondecode(file("${var.module_folder_path}/${var.bicep_parameters_file_path}")).NETWORK_TYPE : "" script_files = var.iac_type == "bicep" ? { for script_file in local.script_files_all : format("%03d", script_file.order) => { name = script_file.name displayName = script_file.displayName templateFilePath = script_file.templateFilePath templateParametersFilePath = script_file.templateParametersFilePath managementGroupIdVariable = try("$env:${script_file.managementGroupId}", "\"\"") subscriptionIdVariable = try("$env:${script_file.subscriptionId}", "\"\"") resourceGroupNameVariable = try("$env:${script_file.resourceGroupName}", "\"\"") deploymentType = script_file.deploymentType firstRunWhatIf = format("%s%s", "$", script_file.firstRunWhatIf) group = script_file.group } if try(script_file.networkType, "") == "" || try(script_file.networkType, "") == local.networking_type } : {} deploy_script_files_parsed = { for deploy_script_file in local.deploy_script_files : "${local.target_folder_name}/${deploy_script_file}" => { content = templatefile("${local.deploy_script_file_directory_path}/${deploy_script_file}", { script_files = local.script_files on_demand_folders = local.on_demand_folders on_demand_folder_repository = var.on_demand_folder_repository on_demand_folder_artifact_name = var.on_demand_folder_artifact_name }) } } module_files = { for key, value in module.files.files : key => { content = try(replace((file(value.path)), "# backend \"azurerm\" {}", (var.create_bootstrap_resources_in_azure ? "backend \"azurerm\" {}" : "backend \"local\" {}")), "unsupported_file_type") } if var.iac_type == "bicep" ? true : !endswith(key, ".ps1") } # Build a map of module files with types that are supported module_files_supported = { for key, value in local.module_files : key => value if value.content != "unsupported_file_type" && !endswith(key, "-cache.json") && !endswith(key, var.bicep_config_file_path) } # Build a list of files to exclude from the repository based on the on-demand folders excluded_module_files = distinct(flatten([for exclusion in local.on_demand_folders : [for key, value in local.module_files_supported : key if startswith(key, exclusion.target)] ])) # Filter out the excluded files module_files_filtered = { for key, value in local.module_files_supported : key => value if !contains(local.excluded_module_files, key) } final_module_files = merge(local.module_files_filtered, local.deploy_script_files_parsed) }