From c9e0de087455a0acd770922d2b090e68d05d05de Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 29 Jul 2025 17:48:06 +0000 Subject: [PATCH 1/6] feat: dynamic username template --- registry/ericpaulsen/.images/avatar.png | Bin 0 -> 23910 bytes registry/ericpaulsen/README.md | 16 + registry/ericpaulsen/templates/README.md | 52 +++ .../ericpaulsen/templates/k8s-username.tf | 341 ++++++++++++++++++ 4 files changed, 409 insertions(+) create mode 100644 registry/ericpaulsen/.images/avatar.png create mode 100644 registry/ericpaulsen/README.md create mode 100644 registry/ericpaulsen/templates/README.md create mode 100644 registry/ericpaulsen/templates/k8s-username.tf diff --git a/registry/ericpaulsen/.images/avatar.png b/registry/ericpaulsen/.images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd947af337d102ed7a18cbe48c54795ac158e8c GIT binary patch literal 23910 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

ob$1J|BuXO%7y`a>$0hQ`rZQ*&K( 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 D3)DpJ literal 0 HcmV?d00001 diff --git a/registry/ericpaulsen/README.md b/registry/ericpaulsen/README.md new file mode 100644 index 000000000..2bea78e54 --- /dev/null +++ b/registry/ericpaulsen/README.md @@ -0,0 +1,16 @@ +--- +display_name: "Eric Paulsen" +bio: "Field CTO, EMEA @ Coder" +avatar_url: "./.images/avatar.png" +github: "ericpaulsen" +linkedin: "https://www.linkedin.com/in/ericpaulsen17" # Optional +website: "https://ericpaulsen.io" # Optional +support_email: "ericpaulsen@hey.com" # Optional +status: "coder" +--- + +# Eric Paulsen + +I'm Eric Paulsen, Coder's EMEA Field CTO based in London, originating from Miami. +Outside of working with our customers, I enjoy teaching myself things, +playing volleyball, and dabbling in a bit of DJing & photography. \ No newline at end of file diff --git a/registry/ericpaulsen/templates/README.md b/registry/ericpaulsen/templates/README.md new file mode 100644 index 000000000..36359f706 --- /dev/null +++ b/registry/ericpaulsen/templates/README.md @@ -0,0 +1,52 @@ +--- +display_name: Kubernetes (Deployment) with Dynamic Username +description: Provision Kubernetes Deployments as Coder workspaces with your Username +icon: ../../../site/static/icon/k8s.png +maintainer_github: ericpaulsen +verified: true +tags: [kubernetes, container] +--- + +# Remote development on Kubernetes with dynamic usernames + +Provision Kubernetes Pods as [Coder workspaces](https://coder.com/docs/workspaces) with this example template. This template +will run the workspace container as a non-root UID using your Coder username. + +Here is the entrypoint logic in the template that enables Coder to source your username and write it to the Ubuntu operating system at start-up. + +> These commands may differ if you run your workspace image with a distro other than Ubuntu. + +```terraform +command = ["sh", "-c", < + +## Prerequisites + +### Infrastructure + +**Cluster**: This template requires an existing Kubernetes cluster + +**Container Image**: This template uses the [codercom/enterprise-base:ubuntu image](https://github.com/coder/enterprise-images/tree/main/images/base) with some dev tools preinstalled. To add additional tools, extend this image or build it yourself. + +### Authentication + +This template authenticates using a `~/.kube/config`, if present on the server, or via built-in authentication if the Coder provisioner is running on Kubernetes with an authorized ServiceAccount. To use another [authentication method](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs#authentication), edit the template. + +## Architecture + +This template provisions the following resources: + +- Kubernetes Deployment (ephemeral) +- Kubernetes persistent volume claim (persistent on `/home/coder`) + +This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the container image. Alternatively, individual developers can [personalize](https://coder.com/docs/dotfiles) their workspaces with dotfiles. \ No newline at end of file diff --git a/registry/ericpaulsen/templates/k8s-username.tf b/registry/ericpaulsen/templates/k8s-username.tf new file mode 100644 index 000000000..a0f765149 --- /dev/null +++ b/registry/ericpaulsen/templates/k8s-username.tf @@ -0,0 +1,341 @@ +terraform { + required_providers { + coder = { + source = "coder/coder" + } + kubernetes = { + source = "hashicorp/kubernetes" + } + } +} + +provider "coder" { +} + +variable "use_kubeconfig" { + type = bool + description = <<-EOF + Use host kubeconfig? (true/false) + + Set this to false if the Coder host is itself running as a Pod on the same + Kubernetes cluster as you are deploying workspaces to. + + Set this to true if the Coder host is running outside the Kubernetes cluster + for workspaces. A valid "~/.kube/config" must be present on the Coder host. + EOF + default = false +} + +variable "namespace" { + type = string + description = "The Kubernetes namespace to create workspaces in (must exist prior to creating workspaces). If the Coder host is itself running as a Pod on the same Kubernetes cluster as you are deploying workspaces to, set this to the same namespace." +} + +data "coder_parameter" "cpu" { + name = "cpu" + display_name = "CPU" + description = "The number of CPU cores" + default = "2" + icon = "/icon/memory.svg" + mutable = true + option { + name = "2 Cores" + value = "2" + } + option { + name = "4 Cores" + value = "4" + } + option { + name = "6 Cores" + value = "6" + } + option { + name = "8 Cores" + value = "8" + } +} + +data "coder_parameter" "memory" { + name = "memory" + display_name = "Memory" + description = "The amount of memory in GB" + default = "2" + icon = "/icon/memory.svg" + mutable = true + option { + name = "2 GB" + value = "2" + } + option { + name = "4 GB" + value = "4" + } + option { + name = "6 GB" + value = "6" + } + option { + name = "8 GB" + value = "8" + } +} + +data "coder_parameter" "home_disk_size" { + name = "home_disk_size" + display_name = "Home disk size" + description = "The size of the home disk in GB" + default = "10" + type = "number" + icon = "/emojis/1f4be.png" + mutable = false + validation { + min = 1 + max = 99999 + } +} + +provider "kubernetes" { + # Authenticate via ~/.kube/config or a Coder-specific ServiceAccount, depending on admin preferences + config_path = var.use_kubeconfig == true ? "~/.kube/config" : null +} + +data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} + +resource "coder_agent" "main" { + os = "linux" + arch = "amd64" + startup_script = <<-EOT + set -e + + true +EOT + + # The following metadata blocks are optional. They are used to display + # information about your workspace in the dashboard. You can remove them + # if you don't want to display any information. + # For basic resources, you can use the `coder stat` command. + # If you need more control, you can write your own script. + metadata { + display_name = "CPU Usage" + key = "0_cpu_usage" + script = "coder stat cpu" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "RAM Usage" + key = "1_ram_usage" + script = "coder stat mem" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "Home Disk" + key = "3_home_disk" + script = "coder stat disk --path $${HOME}" + interval = 60 + timeout = 1 + } + + metadata { + display_name = "CPU Usage (Host)" + key = "4_cpu_usage_host" + script = "coder stat cpu --host" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "Memory Usage (Host)" + key = "5_mem_usage_host" + script = "coder stat mem --host" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "Load Average (Host)" + key = "6_load_host" + # get load avg scaled by number of cores + script = < Date: Wed, 30 Jul 2025 08:57:34 +0000 Subject: [PATCH 2/6] feedback changes --- registry/ericpaulsen/templates/README.md | 5 +- .../ericpaulsen/templates/k8s-username.tf | 47 ++++++++++--------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/registry/ericpaulsen/templates/README.md b/registry/ericpaulsen/templates/README.md index 36359f706..6e9a77835 100644 --- a/registry/ericpaulsen/templates/README.md +++ b/registry/ericpaulsen/templates/README.md @@ -2,9 +2,8 @@ display_name: Kubernetes (Deployment) with Dynamic Username description: Provision Kubernetes Deployments as Coder workspaces with your Username icon: ../../../site/static/icon/k8s.png -maintainer_github: ericpaulsen verified: true -tags: [kubernetes, container] +tags: [kubernetes, container, username] --- # Remote development on Kubernetes with dynamic usernames @@ -47,6 +46,6 @@ This template authenticates using a `~/.kube/config`, if present on the server, This template provisions the following resources: - Kubernetes Deployment (ephemeral) -- Kubernetes persistent volume claim (persistent on `/home/coder`) +- Kubernetes persistent volume claim (persistent on `/home/${username}`, where `${username}` is your Coder username) This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the container image. Alternatively, individual developers can [personalize](https://coder.com/docs/dotfiles) their workspaces with dotfiles. \ No newline at end of file diff --git a/registry/ericpaulsen/templates/k8s-username.tf b/registry/ericpaulsen/templates/k8s-username.tf index a0f765149..cf11344f2 100644 --- a/registry/ericpaulsen/templates/k8s-username.tf +++ b/registry/ericpaulsen/templates/k8s-username.tf @@ -108,8 +108,13 @@ resource "coder_agent" "main" { arch = "amd64" startup_script = <<-EOT set -e - - true + + # Install the latest code-server. + # Append "--version x.x.x" to install a specific version of code-server. + curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server + + # Start code-server in the background. + /tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 & EOT # The following metadata blocks are optional. They are used to display @@ -169,22 +174,22 @@ EOT } } -# # code-server -# resource "coder_app" "code-server" { -# agent_id = coder_agent.main.id -# slug = "code-server" -# display_name = "code-server" -# icon = "/icon/code.svg" -# url = "http://localhost:13337?folder=/home/coder" -# subdomain = false -# share = "owner" +# code-server +resource "coder_app" "code-server" { + agent_id = coder_agent.main.id + slug = "code-server" + display_name = "code-server" + icon = "/icon/code.svg" + url = "http://localhost:13337?folder=/home/coder" + subdomain = false + share = "owner" -# healthcheck { -# url = "http://localhost:13337/healthz" -# interval = 3 -# threshold = 10 -# } -# } + healthcheck { + url = "http://localhost:13337/healthz" + interval = 3 + threshold = 10 + } +} resource "kubernetes_persistent_volume_claim" "home" { metadata { @@ -280,11 +285,11 @@ resource "kubernetes_deployment" "main" { image_pull_policy = "Always" command = ["sh", "-c", < Date: Wed, 30 Jul 2025 09:04:47 +0000 Subject: [PATCH 3/6] bun fmt --- registry/ericpaulsen/templates/README.md | 2 +- registry/ericpaulsen/templates/k8s-username.tf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/ericpaulsen/templates/README.md b/registry/ericpaulsen/templates/README.md index 6e9a77835..ec106a505 100644 --- a/registry/ericpaulsen/templates/README.md +++ b/registry/ericpaulsen/templates/README.md @@ -48,4 +48,4 @@ This template provisions the following resources: - Kubernetes Deployment (ephemeral) - Kubernetes persistent volume claim (persistent on `/home/${username}`, where `${username}` is your Coder username) -This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the container image. Alternatively, individual developers can [personalize](https://coder.com/docs/dotfiles) their workspaces with dotfiles. \ No newline at end of file +This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the container image. Alternatively, individual developers can [personalize](https://coder.com/docs/dotfiles) their workspaces with dotfiles. diff --git a/registry/ericpaulsen/templates/k8s-username.tf b/registry/ericpaulsen/templates/k8s-username.tf index cf11344f2..ddc2be8ba 100644 --- a/registry/ericpaulsen/templates/k8s-username.tf +++ b/registry/ericpaulsen/templates/k8s-username.tf @@ -291,7 +291,7 @@ resource "kubernetes_deployment" "main" { # Switch to user and run agent exec sudo --preserve-env=CODER_AGENT_TOKEN -u ${lower(data.coder_workspace_owner.me.name)} sh -c '${coder_agent.main.init_script}' EOF -] + ] env { name = "CODER_AGENT_TOKEN" value = coder_agent.main.token From 46d3a051ce4009db0b4214f19ca92190132acc9f Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 30 Jul 2025 09:05:08 +0000 Subject: [PATCH 4/6] bun fmt v2 --- registry/ericpaulsen/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/ericpaulsen/README.md b/registry/ericpaulsen/README.md index 2bea78e54..585b99480 100644 --- a/registry/ericpaulsen/README.md +++ b/registry/ericpaulsen/README.md @@ -6,11 +6,11 @@ github: "ericpaulsen" linkedin: "https://www.linkedin.com/in/ericpaulsen17" # Optional website: "https://ericpaulsen.io" # Optional support_email: "ericpaulsen@hey.com" # Optional -status: "coder" +status: "community" --- # Eric Paulsen I'm Eric Paulsen, Coder's EMEA Field CTO based in London, originating from Miami. Outside of working with our customers, I enjoy teaching myself things, -playing volleyball, and dabbling in a bit of DJing & photography. \ No newline at end of file +playing volleyball, and dabbling in a bit of DJing & photography. From 7b248fb1bd258c7a95a8c3e8ec1b4ef5a80c508c Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 30 Jul 2025 09:53:37 +0000 Subject: [PATCH 5/6] rm code-server & add vs code web module --- .../ericpaulsen/templates/k8s-username.tf | 39 +++++-------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/registry/ericpaulsen/templates/k8s-username.tf b/registry/ericpaulsen/templates/k8s-username.tf index ddc2be8ba..ee632f9d1 100644 --- a/registry/ericpaulsen/templates/k8s-username.tf +++ b/registry/ericpaulsen/templates/k8s-username.tf @@ -103,19 +103,17 @@ provider "kubernetes" { data "coder_workspace" "me" {} data "coder_workspace_owner" "me" {} -resource "coder_agent" "main" { - os = "linux" - arch = "amd64" - startup_script = <<-EOT - set -e - - # Install the latest code-server. - # Append "--version x.x.x" to install a specific version of code-server. - curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server +module "vscode-web" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/coder/vscode-web/coder" + version = "1.3.1" + agent_id = coder_agent.main.id + accept_license = true +} - # Start code-server in the background. - /tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 & -EOT +resource "coder_agent" "main" { + os = "linux" + arch = "amd64" # The following metadata blocks are optional. They are used to display # information about your workspace in the dashboard. You can remove them @@ -174,23 +172,6 @@ EOT } } -# code-server -resource "coder_app" "code-server" { - agent_id = coder_agent.main.id - slug = "code-server" - display_name = "code-server" - icon = "/icon/code.svg" - url = "http://localhost:13337?folder=/home/coder" - subdomain = false - share = "owner" - - healthcheck { - url = "http://localhost:13337/healthz" - interval = 3 - threshold = 10 - } -} - resource "kubernetes_persistent_volume_claim" "home" { metadata { name = "coder-${data.coder_workspace.me.id}-home" From 14b95d3410dc98944c925f55a198f69b77ab7bbe Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 31 Jul 2025 14:20:01 +0000 Subject: [PATCH 6/6] add subdir for template --- registry/ericpaulsen/templates/{ => k8s-username}/README.md | 0 .../templates/{k8s-username.tf => k8s-username/main.tf} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename registry/ericpaulsen/templates/{ => k8s-username}/README.md (100%) rename registry/ericpaulsen/templates/{k8s-username.tf => k8s-username/main.tf} (100%) diff --git a/registry/ericpaulsen/templates/README.md b/registry/ericpaulsen/templates/k8s-username/README.md similarity index 100% rename from registry/ericpaulsen/templates/README.md rename to registry/ericpaulsen/templates/k8s-username/README.md diff --git a/registry/ericpaulsen/templates/k8s-username.tf b/registry/ericpaulsen/templates/k8s-username/main.tf similarity index 100% rename from registry/ericpaulsen/templates/k8s-username.tf rename to registry/ericpaulsen/templates/k8s-username/main.tf