@@ -167,3 +167,106 @@ coder:
167
167
EOF
168
168
]
169
169
}
170
+
171
+ resource "local_file" "kubernetes_template" {
172
+ filename = " ${ path . module } /templates/kubernetes/main.tf"
173
+ content = << EOF
174
+ terraform {
175
+ required_providers {
176
+ coder = {
177
+ source = "coder/coder"
178
+ version = "~> 0.7.0"
179
+ }
180
+ kubernetes = {
181
+ source = "hashicorp/kubernetes"
182
+ version = "~> 2.18"
183
+ }
184
+ }
185
+ }
186
+
187
+ provider "coder" {}
188
+
189
+ provider "kubernetes" {
190
+ config_path = null # always use host
191
+ }
192
+
193
+ data "coder_workspace" "me" {}
194
+
195
+ resource "coder_agent" "main" {
196
+ os = "linux"
197
+ arch = "amd64"
198
+ startup_script_timeout = 180
199
+ startup_script = ""
200
+ }
201
+
202
+ resource "kubernetes_pod" "main" {
203
+ count = data.coder_workspace.me.start_count
204
+ metadata {
205
+ name = "coder-${ lower (data. coder_workspace . me . owner )} -${ lower (data. coder_workspace . me . name )} "
206
+ namespace = var.namespace
207
+ labels = {
208
+ "app.kubernetes.io/name" = "coder-workspace"
209
+ "app.kubernetes.io/instance" = "coder-workspace-${ lower (data. coder_workspace . me . owner )} -${ lower (data. coder_workspace . me . name )} "
210
+ }
211
+ }
212
+ spec {
213
+ security_context {
214
+ run_as_user = "1000"
215
+ fs_group = "1000"
216
+ }
217
+ container {
218
+ name = "dev"
219
+ image = "gcr.io/coder-dev-1/coder-cian/minimal:ubuntu"
220
+ image_pull_policy = "Always"
221
+ command = ["sh", "-c", coder_agent.main.init_script]
222
+ security_context {
223
+ run_as_user = "1000"
224
+ }
225
+ env {
226
+ name = "CODER_AGENT_TOKEN"
227
+ value = coder_agent.main.token
228
+ }
229
+ resources {
230
+ requests = {
231
+ "cpu" = "1"
232
+ "memory" = "1Gi"
233
+ }
234
+ limits = {
235
+ "cpu" = "1"
236
+ "memory" = "1Gi"
237
+ }
238
+ }
239
+ }
240
+
241
+ affinity {
242
+ node_affinity {
243
+ required_during_scheduling_ignored_during_execution {
244
+ node_selector_terms {
245
+ match_expressions {
246
+ key = "cloud.google.com/gke-nodepool"
247
+ operator = "in"
248
+ values = ["${ google_container_node_pool . workspaces . name } "]
249
+ }
250
+ }
251
+ }
252
+ }
253
+ pod_affinity {
254
+ preferred_during_scheduling_ignored_during_execution {
255
+ weight = 1
256
+ pod_affinity_term {
257
+ topology_key = "kubernetes.io/hostname"
258
+ label_selector {
259
+ match_expressions {
260
+ key = "app.kubernetes.io/name"
261
+ operator = "In"
262
+ values = ["coder-workspace"]
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+ EOF
272
+ }
0 commit comments