@@ -56,25 +56,40 @@ data "coder_parameter" "droplet_image" {
5656type = " string"
5757mutable = false
5858option {
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"
6262 }
6363option {
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"
6767 }
6868option {
69- name = " Fedora36 "
70- value = " fedora-36 -x64"
69+ name = " Fedora39 "
70+ value = " fedora-39 -x64"
7171icon = " /icon/fedora.svg"
7272 }
7373option {
74- name = " Fedora35 "
75- value = " fedora-35 -x64"
74+ name = " Fedora38 "
75+ value = " fedora-38 -x64"
7676icon = " /icon/fedora.svg"
7777 }
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+ }
7893option {
7994name = " Debian 11"
8095value = " debian-11-x64"
@@ -86,24 +101,24 @@ data "coder_parameter" "droplet_image" {
86101icon = " /icon/debian.svg"
87102 }
88103option {
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"
97107 }
98108option {
99109name = " Rocky Linux 8"
100110value = " rockylinux-8-x64"
101111icon = " /icon/rockylinux.svg"
102112 }
103113option {
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"
107122 }
108123}
109124
@@ -115,6 +130,8 @@ data "coder_parameter" "droplet_size" {
115130type = " string"
116131icon = " /icon/memory.svg"
117132mutable = 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
118135option {
119136name = " 1 vCPU, 1 GB RAM"
120137value = " s-1vcpu-1gb"
@@ -135,13 +152,8 @@ data "coder_parameter" "droplet_size" {
135152name = " 4 vCPU, 8 GB RAM"
136153value = " s-4vcpu-8gb"
137154 }
138- option {
139- name = " 8 vCPU, 16 GB RAM"
140- value = " s-8vcpu-16gb"
141- }
142155}
143156
144-
145157data "coder_parameter" "home_volume_size" {
146158name = " home_volume_size"
147159display_name = " Home volume size"
@@ -151,7 +163,7 @@ data "coder_parameter" "home_volume_size" {
151163mutable = false
152164validation {
153165min = 1
154- max = 999999
166+ max = 100 # Sizes larger than 100 GB require a support ticket with Digital Ocean
155167 }
156168}
157169
@@ -163,70 +175,56 @@ data "coder_parameter" "region" {
163175type = " string"
164176default = " ams3"
165177mutable = false
178+ # nyc1, sfo1, and ams2 regions were excluded because they do not support volumes, which are used to persist data while decreasing cost
166179option {
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"
190183 }
191184option {
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"
195188 }
196189option {
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"
200193 }
201194option {
202- name = " Amsterdam 3 "
195+ name = " Netherlands (Amsterdam) "
203196value = " ams3"
204197icon = " /emojis/1f1f3-1f1f1.png"
205198 }
206199option {
207- name = " Singapore 1 "
200+ name = " Singapore"
208201value = " sgp1"
209202icon = " /emojis/1f1f8-1f1ec.png"
210203 }
211204option {
212- name = " London 1 "
205+ name = " United Kingdom (London) "
213206value = " lon1"
214207icon = " /emojis/1f1ec-1f1e7.png"
215208 }
216209option {
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"
220213 }
221214option {
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"
225218 }
226219option {
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"
230228 }
231229}
232230
@@ -247,35 +245,22 @@ resource "coder_agent" "main" {
247245display_name = " CPU Usage"
248246interval = 5
249247timeout = 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"
255249 }
256250metadata {
257251key = " memory"
258252display_name = " Memory Usage"
259253interval = 5
260254timeout = 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"
266256 }
267257metadata {
268- key = " disk "
269- display_name = " Disk Usage"
258+ key = " home "
259+ display_name = " Home Usage"
270260interval = 600 # every 10 minutes
271261timeout = 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 )} "
277263 }
278-
279264}
280265
281266resource "digitalocean_volume" "home_volume" {
@@ -293,13 +278,13 @@ resource "digitalocean_volume" "home_volume" {
293278resource "digitalocean_droplet" "workspace" {
294279region = data. coder_parameter . region . value
295280count = 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 ) } "
297282image = data. coder_parameter . droplet_image . value
298283size = data. coder_parameter . droplet_size . value
299284
300285volume_ids = [digitalocean_volume . home_volume . id ]
301286user_data = templatefile (" cloud-config.yaml.tftpl" , {
302- username= data.coder_workspace.me.owner
287+ username= lower ( data. coder_workspace . me . owner )
303288 home_volume_label= digitalocean_volume.home_volume.initial_filesystem_label
304289 init_script= base64encode (coder_agent. main . init_script )
305290 coder_agent_token= coder_agent.main.token