@@ -4,17 +4,35 @@ data "google_compute_default_service_account" "default" {
4
4
}
5
5
6
6
locals {
7
- abs_module_path = abspath (path. module )
8
- rel_kubeconfig_path = " ../../.coderv2/${ var . name } -cluster.kubeconfig"
9
- cluster_kubeconfig_path = abspath (" ${ local . abs_module_path } /${ local . rel_kubeconfig_path } " )
7
+ node_pools = flatten ([ for i , deployment in var . deployments : [
8
+ {
9
+ name = " ${ var . name } -${ deployment . name } -coder"
10
+ zone = deployment.zone
11
+ size = deployment.coder_node_pool_size
12
+ cluster_i = i
13
+ },
14
+ {
15
+ name = " ${ var . name } -${ deployment . name } -workspaces"
16
+ zone = deployment.zone
17
+ size = deployment.workspaces_node_pool_size
18
+ cluster_i = i
19
+ },
20
+ {
21
+ name = " ${ var . name } -${ deployment . name } -misc"
22
+ zone = deployment.zone
23
+ size = deployment.misc_node_pool_size
24
+ cluster_i = i
25
+ }
26
+ ] ])
10
27
}
11
28
12
- resource "google_container_cluster" "primary" {
13
- name = var. name
14
- location = var. zone
29
+ resource "google_container_cluster" "cluster" {
30
+ count = length (var. deployments )
31
+ name = " ${ var . name } -${ var . deployments [count . index ]. name } "
32
+ location = var. deployments [count . index ]. zone
15
33
project = var. project_id
16
34
network = google_compute_network. vpc . name
17
- subnetwork = google_compute_subnetwork. subnet . name
35
+ subnetwork = google_compute_subnetwork. subnet [ count . index ] . name
18
36
networking_mode = " VPC_NATIVE"
19
37
default_max_pods_per_node = 256
20
38
ip_allocation_policy { # Required with networking_mode=VPC_NATIVE
@@ -53,14 +71,15 @@ resource "google_container_cluster" "primary" {
53
71
}
54
72
}
55
73
56
- resource "google_container_node_pool" "coder" {
57
- name = " ${ var . name } -coder"
58
- location = var. zone
74
+ resource "google_container_node_pool" "node_pool" {
75
+ count = length (local. node_pools )
76
+ name = local. node_pools [count . index ]. name
77
+ location = local. node_pools [count . index ]. zone
59
78
project = var. project_id
60
- cluster = google_container_cluster. primary . name
79
+ cluster = google_container_cluster. cluster [ local . node_pools [ count . index ] . cluster_i ] . name
61
80
autoscaling {
62
81
min_node_count = 1
63
- max_node_count = var . nodepool_size_coder
82
+ max_node_count = local . node_pools [ count . index ] . size
64
83
}
65
84
node_config {
66
85
oauth_scopes = [
@@ -88,100 +107,3 @@ resource "google_container_node_pool" "coder" {
88
107
ignore_changes = [management [0 ]. auto_repair , management [0 ]. auto_upgrade , timeouts ]
89
108
}
90
109
}
91
-
92
- resource "google_container_node_pool" "workspaces" {
93
- name = " ${ var . name } -workspaces"
94
- location = var. zone
95
- project = var. project_id
96
- cluster = google_container_cluster. primary . name
97
- autoscaling {
98
- min_node_count = 0
99
- total_max_node_count = var. nodepool_size_workspaces
100
- }
101
- management {
102
- auto_upgrade = false
103
- }
104
- node_config {
105
- oauth_scopes = [
106
- " https://www.googleapis.com/auth/logging.write" ,
107
- " https://www.googleapis.com/auth/monitoring" ,
108
- " https://www.googleapis.com/auth/trace.append" ,
109
- " https://www.googleapis.com/auth/devstorage.read_only" ,
110
- " https://www.googleapis.com/auth/service.management.readonly" ,
111
- " https://www.googleapis.com/auth/servicecontrol" ,
112
- ]
113
- disk_size_gb = var. node_disk_size_gb
114
- machine_type = var. nodepool_machine_type_workspaces
115
- image_type = var. node_image_type
116
- preemptible = var. node_preemptible
117
- service_account = data. google_compute_default_service_account . default . email
118
- tags = [" gke-node" , " ${ var . project_id } -gke" ]
119
- labels = {
120
- env = var.project_id
121
- }
122
- metadata = {
123
- disable-legacy-endpoints = " true"
124
- }
125
- }
126
- lifecycle {
127
- ignore_changes = [management [0 ]. auto_repair , management [0 ]. auto_upgrade , timeouts ]
128
- }
129
- }
130
-
131
- resource "google_container_node_pool" "misc" {
132
- name = " ${ var . name } -misc"
133
- location = var. zone
134
- project = var. project_id
135
- cluster = google_container_cluster. primary . name
136
- node_count = var. state == " stopped" ? 0 : var. nodepool_size_misc
137
- management {
138
- auto_upgrade = false
139
- }
140
- node_config {
141
- oauth_scopes = [
142
- " https://www.googleapis.com/auth/logging.write" ,
143
- " https://www.googleapis.com/auth/monitoring" ,
144
- " https://www.googleapis.com/auth/trace.append" ,
145
- " https://www.googleapis.com/auth/devstorage.read_only" ,
146
- " https://www.googleapis.com/auth/service.management.readonly" ,
147
- " https://www.googleapis.com/auth/servicecontrol" ,
148
- ]
149
- disk_size_gb = var. node_disk_size_gb
150
- machine_type = var. nodepool_machine_type_misc
151
- image_type = var. node_image_type
152
- preemptible = var. node_preemptible
153
- service_account = data. google_compute_default_service_account . default . email
154
- tags = [" gke-node" , " ${ var . project_id } -gke" ]
155
- labels = {
156
- env = var.project_id
157
- }
158
- metadata = {
159
- disable-legacy-endpoints = " true"
160
- }
161
- }
162
- lifecycle {
163
- ignore_changes = [management [0 ]. auto_repair , management [0 ]. auto_upgrade , timeouts ]
164
- }
165
- }
166
-
167
- resource "null_resource" "cluster_kubeconfig" {
168
- depends_on = [google_container_cluster . primary ]
169
- triggers = {
170
- path = local.cluster_kubeconfig_path
171
- name = google_container_cluster.primary.name
172
- project_id = var.project_id
173
- zone = var.zone
174
- }
175
- provisioner "local-exec" {
176
- command = << EOF
177
- KUBECONFIG=${ self . triggers . path } gcloud container clusters get-credentials ${ self . triggers . name } --project=${ self . triggers . project_id } --zone=${ self . triggers . zone }
178
- EOF
179
- }
180
-
181
- provisioner "local-exec" {
182
- when = destroy
183
- command = << EOF
184
- rm -f ${ self . triggers . path }
185
- EOF
186
- }
187
- }
0 commit comments