cloud-foundation-fabric/modules/project-factory/factory-budgets.tf

75 lines
2.4 KiB
HCL

/**
* Copyright 2023 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 {
# reimplement the billing account factory here to interpolate projects
_budget_path = try(pathexpand(var.factories_config.budgets.budgets_data_path), null)
_budgets = (
{
for f in try(fileset(local._budget_path, "**/*.yaml"), []) :
trimsuffix(f, ".yaml") => yamldecode(file("${local._budget_path}/${f}"))
}
)
budgets = {
for k, v in local._budgets : k => merge(v, {
amount = merge(
{
currency_code = null
nanos = null
units = null
use_last_period = null
},
try(v.amount, {})
)
display_name = try(v.display_name, null)
filter = try(v.filter, null) == null ? null : {
credit_types_treatment = (
try(v.filter.credit_types_treatment, null) == null
? null
: merge(
{ exclude_all = null, include_specified = null },
v.filter.credit_types_treatment
)
)
label = try(v.filter.label, null)
projects = concat(
try(v.projects, []),
[
for p in lookup(local.project_budgets, k, []) :
"projects/${module.projects[p].project_id}"
]
)
resource_ancestors = try(v.filter.resource_ancestors, null)
services = try(v.filter.services, null)
subaccounts = try(v.filter.subaccounts, null)
}
threshold_rules = [
for vv in try(v.threshold_rules, []) : merge({
percent = null
forecasted_spend = null
}, vv)
]
update_rules = {
for kk, vv in try(v.update_rules, {}) : kk => merge({
disable_default_iam_recipients = null
monitoring_notification_channels = null
pubsub_topic = null
}, vv)
}
})
}
}