-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbudget.tf
More file actions
83 lines (67 loc) · 3.07 KB
/
budget.tf
File metadata and controls
83 lines (67 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
data "google_project" "project" {
project_id = var.project_id
}
resource "google_project_service" "billingbudgets" {
project = data.google_project.project.project_id
service = "billingbudgets.googleapis.com"
disable_on_destroy = false
disable_dependent_services = false
}
resource "google_billing_budget" "relative_amount_budget" {
count = var.budgets.billing_account_id != null && var.budgets.relative_amount != null ? 1 : 0
billing_account = var.budgets.billing_account_id
display_name = "Budget ${data.google_project.project.project_id} (${data.google_project.project.number})"
budget_filter {
projects = ["projects/${data.google_project.project.number}"]
calendar_period = var.budgets.calendar_period
}
amount {
last_period_amount = true
}
dynamic "threshold_rules" {
for_each = { for key, value in { CURRENT_SPEND : var.budgets.relative_amount.alerts.current_threshold_ratio, FORECASTED_SPEND : var.budgets.relative_amount.alerts.forecasted_threshold_ratio } : key => value if value != null }
content {
threshold_percent = threshold_rules.value
spend_basis = threshold_rules.key
}
}
dynamic "all_updates_rule" {
for_each = length(var.budgets.relative_amount.alerts.notification_channels) > 0 ? [1] : []
content {
monitoring_notification_channels = var.budgets.relative_amount.alerts.notification_channels
pubsub_topic = var.budgets.relative_amount.alerts.pubsub_topic
disable_default_iam_recipients = var.budgets.relative_amount.alerts.disable_default_iam_recipients
}
}
depends_on = [google_project_service.billingbudgets]
}
resource "google_billing_budget" "absolute_amount_budget" {
count = var.budgets.billing_account_id != null && var.budgets.absolute_amount != null ? 1 : 0
billing_account = var.budgets.billing_account_id
display_name = "Budget ${data.google_project.project.project_id} (${data.google_project.project.number})"
budget_filter {
projects = ["projects/${data.google_project.project.number}"]
calendar_period = var.budgets.calendar_period
}
amount {
specified_amount {
units = var.budgets.absolute_amount.amount
}
}
dynamic "threshold_rules" {
for_each = { for key, value in { CURRENT_SPEND : var.budgets.absolute_amount.alerts.current_threshold_ratio, FORECASTED_SPEND : var.budgets.absolute_amount.alerts.forecasted_threshold_ratio } : key => value if value != null }
content {
threshold_percent = threshold_rules.value
spend_basis = threshold_rules.key
}
}
dynamic "all_updates_rule" {
for_each = length(var.budgets.absolute_amount.alerts.notification_channels) > 0 ? [1] : []
content {
monitoring_notification_channels = var.budgets.absolute_amount.alerts.notification_channels
pubsub_topic = var.budgets.absolute_amount.alerts.pubsub_topic
disable_default_iam_recipients = var.budgets.absolute_amount.alerts.disable_default_iam_recipients
}
}
depends_on = [google_project_service.billingbudgets]
}