-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.tf
More file actions
321 lines (250 loc) · 9.35 KB
/
Copy pathmain.tf
File metadata and controls
321 lines (250 loc) · 9.35 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
locals {
cluster_domain = "${var.cluster_name}.${var.domain_zone}"
storage_class_name = "cosmotech-retain"
persistences = {
keycloak-postgresql = {
size = 10
name = "${var.cluster_name}-keycloak-postgresql"
namespace = "keycloak"
}
prometheusstack-prometheus = {
size = 100
name = "${var.cluster_name}-prometheusstack-prometheus"
namespace = "monitoring"
}
prometheusstack-grafana = {
size = 10
name = "${var.cluster_name}-prometheusstack-grafana"
namespace = "monitoring"
}
harbor-redis = {
size = 10
name = "${var.cluster_name}-harbor-redis"
namespace = "harbor"
}
harbor-postgresql = {
size = 10
name = "${var.cluster_name}-harbor-postgresql"
namespace = "harbor"
}
harbor-registry = {
size = 30
name = "${var.cluster_name}-harbor-registry"
namespace = "harbor"
}
harbor-jobservice = {
size = 10
name = "${var.cluster_name}-harbor-jobservice"
namespace = "harbor"
}
superset-postgresql = {
size = 10
name = "${var.cluster_name}-superset-postgresql"
namespace = "superset"
}
superset-redis = {
size = 10
name = "${var.cluster_name}-superset-redis"
namespace = "superset"
}
}
}
module "registry_authentication" {
source = "./modules/registry_authentication"
image_registry_auth_secret_source_namespace = var.image_registry_auth_secret_source_namespace
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
image_registry_username = var.image_registry_username
image_registry_password = var.image_registry_password
}
module "kube_namespaces" {
source = "./modules/kube_namespaces"
namespaces = [
"traefik",
"cert-manager",
"monitoring",
"keycloak",
"harbor",
"superset"
]
image_registry_auth_secret_source_namespace = var.image_registry_auth_secret_source_namespace
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
depends_on = [
module.registry_authentication,
]
}
# Timer to wait for storage to be created before continue.
# Also used a general gateway before install next modules.
resource "time_sleep" "timer" {
create_duration = "30s"
depends_on = [
module.registry_authentication,
]
}
module "workload_scheduler" {
source = "./modules/workload_scheduler"
# Do not deploy for on-premise
create_workload_scheduler = var.cloud_provider == "kob" ? false : var.workloadscheduler_enable_creation
scaler_time_zone = var.workloadscheduler_timezone
scale_down_cron_schedule = var.workloadscheduler_cron_stop
scale_up_cron_schedule = var.workloadscheduler_cron_start
depends_on = [
time_sleep.timer,
]
}
module "storageclass" {
source = "./modules/kube_storageclass"
cloud_provider = var.cloud_provider
storage_class = local.storage_class_name
deploy_storageclass = true
deploy_storageclass_nfs = true
depends_on = [
time_sleep.timer,
]
}
module "chart_traefik" {
source = "./modules/chart_traefik"
namespace = "traefik"
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
chart_repository = var.traefik_chart_repository
chart_name = var.traefik_chart_name
chart_tag = var.traefik_chart_tag
chart_release = "traefik"
traefik_image_repository = var.traefik_image_repository
traefik_image_tag = var.traefik_image_tag
lb_annotations = local.lb_annotations
platform_lb_ip = local.lb_ip
depends_on = [
module.kube_namespaces,
time_sleep.timer,
]
}
module "chart_cert_manager" {
source = "./modules/chart_cert_manager"
namespace = "cert-manager"
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
chart_repository = var.certmanager_chart_repository
chart_name = var.certmanager_chart_name
chart_tag = var.certmanager_chart_tag
chart_release = "cert-manager"
dns_challenge_provider = var.dns_challenge_provider
# service_annotations = local.cloud_identity
# service_annotations = tostring(local.cloud_identity)
# service_annotations = replace(replace(jsonencode(local.cloud_identity), "\"", ""), ":", "=")
service_annotations = yamlencode(local.cloud_identity)
cloud_provider = var.cloud_provider
cluster_domain = local.cluster_domain
certificate_email = var.certificate_email
depends_on = [
module.kube_namespaces,
module.chart_traefik,
]
}
module "chart_harbor" {
source = "./modules/chart_harbor"
namespace = "harbor"
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
chart_harbor_repository = var.harbor_chart_repository
chart_harbor_name = var.harbor_chart_name
chart_harbor_tag = var.harbor_chart_tag
chart_harbor_release = "harbor"
chart_postgresql_repository = var.harbor_postgresql_chart_repository
chart_postgresql_name = var.harbor_postgresql_chart_name
chart_postgresql_tag = var.harbor_postgresql_chart_tag
chart_postgresql_release = "harbor-postgresql"
postgresql_image_repository = var.postgresql_image_repository
postgresql_image_tag = var.harbor_postgresql_image_tag
chart_redis_repository = var.harbor_redis_chart_repository
chart_redis_name = var.harbor_redis_chart_name
chart_redis_tag = var.harbor_redis_chart_tag
chart_redis_release = "harbor-redis"
pvc_storage_class = local.storage_class_name
pvc_redis = "pvc-${local.persistences.harbor-redis["name"]}"
pvc_postgresql = "pvc-${local.persistences.harbor-postgresql["name"]}"
pvc_registry = "pvc-${local.persistences.harbor-registry["name"]}"
pvc_jobservice = "pvc-${local.persistences.harbor-jobservice["name"]}"
cluster_domain = local.cluster_domain
depends_on = [
module.kube_namespaces,
module.storageclass,
module.chart_traefik,
module.chart_cert_manager,
]
}
module "chart_keycloak" {
source = "./modules/chart_keycloak"
namespace = "keycloak"
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
chart_keycloak_repository = var.keycloak_chart_repository
chart_keycloak_name = var.keycloak_chart_name
chart_keycloak_tag = var.keycloak_chart_tag
chart_keycloak_release = "keycloak"
chart_postgresql_repository = var.keycloak_postgresql_chart_repository
chart_postgresql_name = var.keycloak_postgresql_chart_name
chart_postgresql_tag = var.keycloak_postgresql_chart_tag
chart_postgresql_release = "keycloak-postgresql"
postgresql_image_repository = var.postgresql_image_repository
postgresql_image_tag = var.keycloak_postgresql_image_tag
pvc_storage_class = local.storage_class_name
pvc = "pvc-${local.persistences.keycloak-postgresql["name"]}"
keycloak_ingress_hostname = local.cluster_domain
depends_on = [
module.kube_namespaces,
module.storageclass,
module.chart_traefik,
module.chart_cert_manager,
]
}
module "chart_prometheus_stack" {
source = "./modules/chart_prometheus_stack"
namespace = "monitoring"
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
chart_repository = var.prometheusstack_chart_repository
chart_name = var.prometheusstack_chart_name
chart_tag = var.prometheusstack_chart_tag
chart_release = "kube-prometheus-stack"
pvc_storage_class = local.storage_class_name
size_prometheus = local.persistences.prometheusstack-prometheus["size"]
pvc_prometheus = "pvc-${local.persistences.prometheusstack-prometheus["name"]}"
size_grafana = local.persistences.prometheusstack-grafana["size"]
pvc_grafana = "pvc-${local.persistences.prometheusstack-grafana["name"]}"
cluster_domain = local.cluster_domain
depends_on = [
module.kube_namespaces,
module.storageclass,
module.chart_traefik,
module.chart_cert_manager,
]
}
module "chart_superset" {
source = "./modules/chart_superset"
namespace = "superset"
image_registry = var.image_registry
image_registry_auth_secret = var.image_registry_auth_secret
chart_repository = var.superset_chart_repository
chart_name = var.superset_chart_name
chart_tag = var.superset_chart_tag
chart_release = "superset"
postgresql_image_repository = var.postgresql_image_repository
postgresql_image_tag = var.superset_postgresql_image_tag
pvc_storage_class = local.storage_class_name
pvc_redis = "pvc-${local.persistences.superset-redis["name"]}"
pvc_postgresql = "pvc-${local.persistences.superset-postgresql["name"]}"
cluster_domain = local.cluster_domain
superset_cluster_domain = "superset-${local.cluster_domain}"
superset_connect_timeout = "30s"
superset_query_timeout = "60s"
superset_buffer_size = "16K"
superset_max_file_size = "5m"
depends_on = [
module.kube_namespaces,
module.chart_traefik,
module.chart_cert_manager,
]
}