@@ -56,25 +56,40 @@ data "coder_parameter" "droplet_image" {
56
56
type = " string"
57
57
mutable = false
58
58
option {
59
- name = " Ubuntu 22.04 "
60
- value = " ubuntu-22-04 -x64"
61
- icon = " /icon/ubuntu .svg"
59
+ name = " AlmaLinux 9 "
60
+ value = " almalinux-9 -x64"
61
+ icon = " /icon/almalinux .svg"
62
62
}
63
63
option {
64
- name = " Ubuntu 20.04 "
65
- value = " ubuntu-20-04 -x64"
66
- icon = " /icon/ubuntu .svg"
64
+ name = " AlmaLinux 8 "
65
+ value = " almalinux-8 -x64"
66
+ icon = " /icon/almalinux .svg"
67
67
}
68
68
option {
69
- name = " Fedora 36 "
70
- value = " fedora-36 -x64"
69
+ name = " Fedora 39 "
70
+ value = " fedora-39 -x64"
71
71
icon = " /icon/fedora.svg"
72
72
}
73
73
option {
74
- name = " Fedora 35 "
75
- value = " fedora-35 -x64"
74
+ name = " Fedora 38 "
75
+ value = " fedora-38 -x64"
76
76
icon = " /icon/fedora.svg"
77
77
}
78
+ option {
79
+ name = " CentOS Stream 9"
80
+ value = " centos-stream-9-x64"
81
+ icon = " /icon/centos.svg"
82
+ }
83
+ option {
84
+ name = " CentOS Stream 8"
85
+ value = " centos-stream-8-x64"
86
+ icon = " /icon/centos.svg"
87
+ }
88
+ option {
89
+ name = " Debian 12"
90
+ value = " debian-12-x64"
91
+ icon = " /icon/debian.svg"
92
+ }
78
93
option {
79
94
name = " Debian 11"
80
95
value = " debian-11-x64"
@@ -86,24 +101,24 @@ data "coder_parameter" "droplet_image" {
86
101
icon = " /icon/debian.svg"
87
102
}
88
103
option {
89
- name = " CentOS Stream 9"
90
- value = " centos-stream-9-x64"
91
- icon = " /icon/centos.svg"
92
- }
93
- option {
94
- name = " CentOS Stream 8"
95
- value = " centos-stream-8-x64"
96
- icon = " /icon/centos.svg"
104
+ name = " Rocky Linux 9"
105
+ value = " rockylinux-9-x64"
106
+ icon = " /icon/rockylinux.svg"
97
107
}
98
108
option {
99
109
name = " Rocky Linux 8"
100
110
value = " rockylinux-8-x64"
101
111
icon = " /icon/rockylinux.svg"
102
112
}
103
113
option {
104
- name = " Rocky Linux 8.4"
105
- value = " rockylinux-8-4-x64"
106
- icon = " /icon/rockylinux.svg"
114
+ name = " Ubuntu 22.04 (LTS)"
115
+ value = " ubuntu-22-04-x64"
116
+ icon = " /icon/ubuntu.svg"
117
+ }
118
+ option {
119
+ name = " Ubuntu 20.04 (LTS)"
120
+ value = " ubuntu-20-04-x64"
121
+ icon = " /icon/ubuntu.svg"
107
122
}
108
123
}
109
124
@@ -115,6 +130,8 @@ data "coder_parameter" "droplet_size" {
115
130
type = " string"
116
131
icon = " /icon/memory.svg"
117
132
mutable = false
133
+ # s-1vcpu-512mb-10gb is unsupported in tor1, blr1, lon1, sfo2, and nyc3 regions
134
+ # s-8vcpu-16gb access requires a support ticket with Digital Ocean
118
135
option {
119
136
name = " 1 vCPU, 1 GB RAM"
120
137
value = " s-1vcpu-1gb"
@@ -135,13 +152,8 @@ data "coder_parameter" "droplet_size" {
135
152
name = " 4 vCPU, 8 GB RAM"
136
153
value = " s-4vcpu-8gb"
137
154
}
138
- option {
139
- name = " 8 vCPU, 16 GB RAM"
140
- value = " s-8vcpu-16gb"
141
- }
142
155
}
143
156
144
-
145
157
data "coder_parameter" "home_volume_size" {
146
158
name = " home_volume_size"
147
159
display_name = " Home volume size"
@@ -151,7 +163,7 @@ data "coder_parameter" "home_volume_size" {
151
163
mutable = false
152
164
validation {
153
165
min = 1
154
- max = 999999
166
+ max = 100 # Sizes larger than 100 GB require a support ticket with Digital Ocean
155
167
}
156
168
}
157
169
@@ -163,70 +175,56 @@ data "coder_parameter" "region" {
163
175
type = " string"
164
176
default = " ams3"
165
177
mutable = false
178
+ # nyc1, sfo1, and ams2 regions were excluded because they do not support volumes, which are used to persist data while decreasing cost
166
179
option {
167
- name = " New York 1"
168
- value = " nyc1"
169
- icon = " /emojis/1f1fa-1f1f8.png"
170
- }
171
- option {
172
- name = " New York 2"
173
- value = " nyc2"
174
- icon = " /emojis/1f1fa-1f1f8.png"
175
- }
176
- option {
177
- name = " New York 3"
178
- value = " nyc3"
179
- icon = " /emojis/1f1fa-1f1f8.png"
180
- }
181
- option {
182
- name = " San Francisco 1"
183
- value = " sfo1"
184
- icon = " /emojis/1f1fa-1f1f8.png"
185
- }
186
- option {
187
- name = " San Francisco 2"
188
- value = " sfo2"
189
- icon = " /emojis/1f1fa-1f1f8.png"
180
+ name = " Canada (Toronto)"
181
+ value = " tor1"
182
+ icon = " /emojis/1f1e8-1f1e6.png"
190
183
}
191
184
option {
192
- name = " San Francisco 3 "
193
- value = " sfo3 "
194
- icon = " /emojis/1f1fa-1f1f8 .png"
185
+ name = " Germany (Frankfurt) "
186
+ value = " fra1 "
187
+ icon = " /emojis/1f1e9-1f1ea .png"
195
188
}
196
189
option {
197
- name = " Amsterdam 2 "
198
- value = " ams2 "
199
- icon = " /emojis/1f1f3-1f1f1 .png"
190
+ name = " India (Bangalore) "
191
+ value = " blr1 "
192
+ icon = " /emojis/1f1ee-1f1f3 .png"
200
193
}
201
194
option {
202
- name = " Amsterdam 3 "
195
+ name = " Netherlands (Amsterdam) "
203
196
value = " ams3"
204
197
icon = " /emojis/1f1f3-1f1f1.png"
205
198
}
206
199
option {
207
- name = " Singapore 1 "
200
+ name = " Singapore"
208
201
value = " sgp1"
209
202
icon = " /emojis/1f1f8-1f1ec.png"
210
203
}
211
204
option {
212
- name = " London 1 "
205
+ name = " United Kingdom (London) "
213
206
value = " lon1"
214
207
icon = " /emojis/1f1ec-1f1e7.png"
215
208
}
216
209
option {
217
- name = " Frankfurt 1 "
218
- value = " fra1 "
219
- icon = " /emojis/1f1e9-1f1ea .png"
210
+ name = " United States (California - 2) "
211
+ value = " sfo2 "
212
+ icon = " /emojis/1f1fa-1f1f8 .png"
220
213
}
221
214
option {
222
- name = " Toronto 1 "
223
- value = " tor1 "
224
- icon = " /emojis/1f1e8-1f1e6 .png"
215
+ name = " United States (California - 3) "
216
+ value = " sfo3 "
217
+ icon = " /emojis/1f1fa-1f1f8 .png"
225
218
}
226
219
option {
227
- name = " Bangalore 1"
228
- value = " blr1"
229
- icon = " /emojis/1f1ee-1f1f3.png"
220
+ name = " United States (New York - 1)"
221
+ value = " nyc1"
222
+ icon = " /emojis/1f1fa-1f1f8.png"
223
+ }
224
+ option {
225
+ name = " United States (New York - 3)"
226
+ value = " nyc3"
227
+ icon = " /emojis/1f1fa-1f1f8.png"
230
228
}
231
229
}
232
230
@@ -247,35 +245,22 @@ resource "coder_agent" "main" {
247
245
display_name = " CPU Usage"
248
246
interval = 5
249
247
timeout = 5
250
- script = <<- EOT
251
- #!/bin/bash
252
- set -e
253
- top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4 "%"}'
254
- EOT
248
+ script = " coder stat cpu"
255
249
}
256
250
metadata {
257
251
key = " memory"
258
252
display_name = " Memory Usage"
259
253
interval = 5
260
254
timeout = 5
261
- script = <<- EOT
262
- #!/bin/bash
263
- set -e
264
- free -m | awk 'NR==2{printf "%.2f%%\t", $3*100/$2 }'
265
- EOT
255
+ script = " coder stat mem"
266
256
}
267
257
metadata {
268
- key = " disk "
269
- display_name = " Disk Usage"
258
+ key = " home "
259
+ display_name = " Home Usage"
270
260
interval = 600 # every 10 minutes
271
261
timeout = 30 # df can take a while on large filesystems
272
- script = <<- EOT
273
- #!/bin/bash
274
- set -e
275
- df /home/coder | awk '$NF=="/"{printf "%s", $5}'
276
- EOT
262
+ script = " coder stat disk --path /home/${ lower (data. coder_workspace . me . owner )} "
277
263
}
278
-
279
264
}
280
265
281
266
resource "digitalocean_volume" "home_volume" {
@@ -293,13 +278,13 @@ resource "digitalocean_volume" "home_volume" {
293
278
resource "digitalocean_droplet" "workspace" {
294
279
region = data. coder_parameter . region . value
295
280
count = data. coder_workspace . me . start_count
296
- name = " coder-${ data . coder_workspace . me . owner } -${ data . coder_workspace . me . name } "
281
+ name = " coder-${ lower ( data. coder_workspace . me . owner ) } -${ lower ( data. coder_workspace . me . name ) } "
297
282
image = data. coder_parameter . droplet_image . value
298
283
size = data. coder_parameter . droplet_size . value
299
284
300
285
volume_ids = [digitalocean_volume . home_volume . id ]
301
286
user_data = templatefile (" cloud-config.yaml.tftpl" , {
302
- username = data.coder_workspace.me.owner
287
+ username = lower ( data. coder_workspace . me . owner )
303
288
home_volume_label = digitalocean_volume.home_volume.initial_filesystem_label
304
289
init_script = base64encode (coder_agent. main . init_script )
305
290
coder_agent_token = coder_agent.main.token
0 commit comments