-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.tf
106 lines (101 loc) · 3.94 KB
/
main.tf
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
locals {
random_suffix = random_string.random_suffix.result
managed_certificate_name = var.managed_certificate_name != null ? var.managed_certificate_name : "${var.name}-cert-managed"
negs = {
for item in var.services : item.name => item if item.type == "neg"
}
endpoint_zone_groups = toset([for i in flatten([
for k, v in local.negs :
concat([
for i in data.google_compute_zones.available :
[for j in i.names :
"${k}␟${j}"]
], ["${k}␟${lookup(v, "zone", "")}"])
]) :
i if split("␟", i)[1] != ""
])
services = {
for item in var.services : item.name => item if item.type == "cloudrun"
}
buckets = {
for item in var.services : item.name => item if item.type == "bucket"
}
}
resource "random_string" "random_suffix" {
length = var.random_suffix_size
special = false
upper = false
}
resource "google_compute_backend_bucket" "cn_lb" {
name = "${var.project}-l7-default-backend-${local.random_suffix}"
bucket_name = google_storage_bucket.cn_lb.name
enable_cdn = true
}
resource "google_storage_bucket" "cn_lb" {
name = "${var.project}-l7-default-backend-${local.random_suffix}"
location = var.backend_bucket_location
}
resource "google_compute_url_map" "cn_lb" {
name = var.custom_url_map_name == "" ? "lb-${var.name}-${local.random_suffix}" : var.custom_url_map_name
default_service = google_compute_backend_bucket.cn_lb.id
dynamic "host_rule" {
for_each = var.url_map
content {
hosts = host_rule.value.hostnames
path_matcher = host_rule.key
}
}
dynamic "path_matcher" {
for_each = var.url_map
content {
name = path_matcher.key
default_service = lookup(
local.negs, path_matcher.value.default_service,
lookup(local.services, path_matcher.value.default_service,
lookup(local.buckets, path_matcher.value.default_service, null)
)
).type == "neg" ? google_compute_backend_service.app_backend[path_matcher.value.default_service].id : lookup(
local.negs, path_matcher.value.default_service,
lookup(local.services, path_matcher.value.default_service,
lookup(local.buckets, path_matcher.value.default_service, null)
)
).type == "cloudrun" ? google_compute_backend_service.cloudrun[path_matcher.value.default_service].id : lookup(
local.negs, path_matcher.value.default_service,
lookup(local.services, path_matcher.value.default_service,
lookup(local.buckets, path_matcher.value.default_service, null)
)
).type == "bucket" ? google_compute_backend_bucket.bucket[path_matcher.value.default_service].id : null
dynamic "path_rule" {
for_each = path_matcher.value.path_rules
content {
paths = path_rule.value.paths
service = lookup(
local.negs, path_rule.value.service,
lookup(local.services, path_rule.value.service,
lookup(local.buckets, path_rule.value.service, null)
)
).type == "neg" ? google_compute_backend_service.app_backend[path_rule.value.service].id : lookup(
local.negs, path_rule.value.service,
lookup(local.services, path_rule.value.service,
lookup(local.buckets, path_rule.value.service, null)
)
).type == "cloudrun" ? google_compute_backend_service.cloudrun[path_rule.value.service].id : lookup(
local.negs, path_rule.value.service,
lookup(local.services, path_rule.value.service,
lookup(local.buckets, path_rule.value.service, null)
)
).type == "bucket" ? google_compute_backend_bucket.bucket[path_rule.value.service].id : null
}
}
dynamic "path_rule" {
for_each = var.mask_metrics_endpoint ? [1] : []
content {
paths = [
"/metrics",
]
service = google_compute_backend_bucket.cn_lb.id
}
}
}
}
}