From fa3c4a8951d1313231851304c1fd40a4ac5ceb9d Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Wed, 29 May 2024 11:14:59 +0100 Subject: [PATCH 1/4] chore(examples): update deprecated usage of coder_workspace.owner* fields --- examples/jfrog/docker/main.tf | 9 ++++---- examples/parameters-dynamic-options/main.tf | 21 ++++++++++--------- examples/parameters/main.tf | 13 ++++++------ examples/templates/aws-devcontainer/main.tf | 3 ++- examples/templates/aws-linux/main.tf | 3 ++- examples/templates/aws-windows/main.tf | 3 ++- examples/templates/azure-linux/main.tf | 3 ++- examples/templates/azure-windows/main.tf | 1 + .../templates/devcontainer-docker/main.tf | 19 +++++++++-------- .../templates/devcontainer-kubernetes/main.tf | 21 ++++++++++--------- examples/templates/do-linux/main.tf | 7 ++++--- examples/templates/docker/main.tf | 21 ++++++++++--------- examples/templates/envbox/main.tf | 5 +++-- examples/templates/gcp-devcontainer/main.tf | 9 ++++---- examples/templates/gcp-linux/main.tf | 5 +++-- examples/templates/gcp-vm-container/main.tf | 3 ++- examples/templates/gcp-windows/main.tf | 3 ++- examples/templates/incus/main.tf | 7 ++++--- examples/templates/kubernetes/main.tf | 21 ++++++++++--------- examples/templates/nomad-docker/main.tf | 7 ++++--- examples/templates/scratch/main.tf | 1 + examples/workspace-tags/main.tf | 21 ++++++++++--------- 22 files changed, 114 insertions(+), 92 deletions(-) diff --git a/examples/jfrog/docker/main.tf b/examples/jfrog/docker/main.tf index 4bb807403657f..d7f1d57980906 100644 --- a/examples/jfrog/docker/main.tf +++ b/examples/jfrog/docker/main.tf @@ -15,13 +15,13 @@ terraform { locals { # Make sure to use the same field as the username field in the Artifactory # It can be either the username or the email address. - artifactory_username = data.coder_workspace.me.owner_email + artifactory_username = data.coder_workspace_owner.me.email artifactory_repository_keys = { "npm" = "npm" "python" = "python" "go" = "go" } - workspace_user = data.coder_workspace.me.owner + workspace_user = data.coder_workspace_owner.me.name jfrog_host = replace(var.jfrog_url, "^https://", "") } @@ -30,6 +30,7 @@ data "coder_provisioner" "me" {} provider "docker" {} data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} variable "jfrog_url" { type = string @@ -83,7 +84,7 @@ resource "coder_agent" "main" { # Configure the `npm` CLI to use the Artifactory "npm" repository. cat << EOF > ~/.npmrc - email = ${data.coder_workspace.me.owner_email} + email = ${data.coder_workspace_owner.me.email} registry = ${var.jfrog_url}/artifactory/api/npm/${local.artifactory_repository_keys["npm"]} EOF jf rt curl /api/npm/auth >> .npmrc @@ -149,7 +150,7 @@ resource "docker_container" "workspace" { count = data.coder_workspace.me.start_count image = docker_image.main.name # Uses lower() to avoid Docker restriction on container names. - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" # Hostname makes the shell more user friendly: coder@my-workspace:~$ hostname = data.coder_workspace.me.name entrypoint = ["sh", "-c", coder_agent.main.init_script] diff --git a/examples/parameters-dynamic-options/main.tf b/examples/parameters-dynamic-options/main.tf index d459a41f70461..19304e3b370dc 100644 --- a/examples/parameters-dynamic-options/main.tf +++ b/examples/parameters-dynamic-options/main.tf @@ -20,7 +20,7 @@ variable "java_image" { } locals { - username = data.coder_workspace.me.owner + username = data.coder_workspace_owner.me.name images = { "go" = var.go_image, @@ -33,6 +33,7 @@ data "coder_provisioner" "me" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "coder_parameter" "container_image" { name = "container_image" @@ -61,10 +62,10 @@ resource "coder_agent" "main" { EOF env = { - GIT_AUTHOR_NAME = "${data.coder_workspace.me.owner}" - GIT_COMMITTER_NAME = "${data.coder_workspace.me.owner}" - GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}" - GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}" + GIT_AUTHOR_NAME = "${data.coder_workspace_owner.me.name}" + GIT_COMMITTER_NAME = "${data.coder_workspace_owner.me.name}" + GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}" + GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" } } @@ -91,11 +92,11 @@ resource "docker_volume" "home_volume" { } labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" @@ -119,7 +120,7 @@ resource "coder_metadata" "home_info" { resource "docker_container" "workspace" { count = data.coder_workspace.me.start_count image = local.images[data.coder_parameter.container_image.value] - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" hostname = data.coder_workspace.me.name entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")] env = [ @@ -138,11 +139,11 @@ resource "docker_container" "workspace" { labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" diff --git a/examples/parameters/main.tf b/examples/parameters/main.tf index 407f09a208281..33d3e7f6aafcf 100644 --- a/examples/parameters/main.tf +++ b/examples/parameters/main.tf @@ -10,7 +10,7 @@ terraform { } locals { - username = data.coder_workspace.me.owner + username = data.coder_workspace_owner.me.name } data "coder_provisioner" "me" { @@ -21,6 +21,7 @@ provider "docker" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = data.coder_provisioner.me.arch @@ -59,11 +60,11 @@ resource "docker_volume" "home_volume" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" @@ -94,7 +95,7 @@ resource "docker_container" "workspace" { count = data.coder_workspace.me.start_count image = docker_image.main.name # Uses lower() to avoid Docker restriction on container names. - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" # Hostname makes the shell more user friendly: coder@my-workspace:~$ hostname = data.coder_workspace.me.name # Use the docker gateway if the access URL is 127.0.0.1 @@ -112,11 +113,11 @@ resource "docker_container" "workspace" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" diff --git a/examples/templates/aws-devcontainer/main.tf b/examples/templates/aws-devcontainer/main.tf index 664ace2713798..343e7c584e09c 100644 --- a/examples/templates/aws-devcontainer/main.tf +++ b/examples/templates/aws-devcontainer/main.tf @@ -52,6 +52,7 @@ provider "aws" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "aws_ami" "ubuntu" { most_recent = true @@ -167,7 +168,7 @@ resource "aws_instance" "vm" { user_data = local.user_data tags = { - Name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}" + Name = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}" # Required if you are using our example policy, see template README Coder_Provisioned = "true" } diff --git a/examples/templates/aws-linux/main.tf b/examples/templates/aws-linux/main.tf index 5815f27ed7340..51d2f16701ee6 100644 --- a/examples/templates/aws-linux/main.tf +++ b/examples/templates/aws-linux/main.tf @@ -142,6 +142,7 @@ provider "aws" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "aws_ami" "ubuntu" { most_recent = true @@ -249,7 +250,7 @@ resource "aws_instance" "dev" { user_data = local.user_data tags = { - Name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}" + Name = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}" # Required if you are using our example policy, see template README Coder_Provisioned = "true" } diff --git a/examples/templates/aws-windows/main.tf b/examples/templates/aws-windows/main.tf index 1b9bb54021499..167b1b69ffc70 100644 --- a/examples/templates/aws-windows/main.tf +++ b/examples/templates/aws-windows/main.tf @@ -142,6 +142,7 @@ provider "aws" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "aws_ami" "windows" { most_recent = true @@ -187,7 +188,7 @@ resource "aws_instance" "dev" { user_data = data.coder_workspace.me.transition == "start" ? local.user_data_start : local.user_data_end tags = { - Name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}" + Name = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}" # Required if you are using our example policy, see template README Coder_Provisioned = "true" } diff --git a/examples/templates/azure-linux/main.tf b/examples/templates/azure-linux/main.tf index 9afb876a3c753..2fb0cd5876a7c 100644 --- a/examples/templates/azure-linux/main.tf +++ b/examples/templates/azure-linux/main.tf @@ -221,6 +221,7 @@ provider "azurerm" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = "amd64" @@ -263,7 +264,7 @@ resource "coder_agent" "main" { } locals { - prefix = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}" + prefix = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}" userdata = templatefile("cloud-config.yaml.tftpl", { username = "coder" # Ensure this user/group does not exist in your VM image diff --git a/examples/templates/azure-windows/main.tf b/examples/templates/azure-windows/main.tf index e494b037f7348..eeb3b8ca5e96e 100644 --- a/examples/templates/azure-windows/main.tf +++ b/examples/templates/azure-windows/main.tf @@ -17,6 +17,7 @@ provider "coder" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} data "coder_parameter" "location" { description = "What location should your workspace live in?" diff --git a/examples/templates/devcontainer-docker/main.tf b/examples/templates/devcontainer-docker/main.tf index 349d6d41cd2ad..b400c1f0651d8 100644 --- a/examples/templates/devcontainer-docker/main.tf +++ b/examples/templates/devcontainer-docker/main.tf @@ -17,6 +17,7 @@ provider "docker" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = data.coder_provisioner.me.arch @@ -35,10 +36,10 @@ resource "coder_agent" "main" { # You can remove this block if you'd prefer to configure Git manually or using # dotfiles. (see docs/dotfiles.md) env = { - GIT_AUTHOR_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner) - GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}" - GIT_COMMITTER_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner) - GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}" + GIT_AUTHOR_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}" + GIT_COMMITTER_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" } # The following metadata blocks are optional. They are used to display @@ -134,11 +135,11 @@ resource "docker_volume" "workspaces" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" @@ -207,7 +208,7 @@ resource "docker_container" "workspace" { # https://github.com/coder/envbuilder/tags image = "ghcr.io/coder/envbuilder:0.2.1" # Uses lower() to avoid Docker restriction on container names. - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" # Hostname makes the shell more user friendly: coder@my-workspace:~$ hostname = data.coder_workspace.me.name # Use the docker gateway if the access URL is 127.0.0.1 @@ -230,11 +231,11 @@ resource "docker_container" "workspace" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" diff --git a/examples/templates/devcontainer-kubernetes/main.tf b/examples/templates/devcontainer-kubernetes/main.tf index f4a1c029336c8..b030c02a4a7ca 100644 --- a/examples/templates/devcontainer-kubernetes/main.tf +++ b/examples/templates/devcontainer-kubernetes/main.tf @@ -42,6 +42,7 @@ provider "kubernetes" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = data.coder_provisioner.me.arch @@ -60,10 +61,10 @@ resource "coder_agent" "main" { # You can remove this block if you'd prefer to configure Git manually or using # dotfiles. (see docs/dotfiles.md) env = { - GIT_AUTHOR_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner) - GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}" - GIT_COMMITTER_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner) - GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}" + GIT_AUTHOR_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}" + GIT_COMMITTER_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" } } @@ -89,8 +90,8 @@ resource "kubernetes_persistent_volume_claim" "workspaces" { name = "coder-${data.coder_workspace.me.id}" namespace = var.namespace labels = { - "coder.owner" = data.coder_workspace.me.owner - "coder.owner_id" = data.coder_workspace.me.owner_id + "coder.owner" = data.coder_workspace_owner.me.name + "coder.owner_id" = data.coder_workspace_owner.me.id "coder.workspace_id" = data.coder_workspace.me.id "coder.workspace_name_at_creation" = data.coder_workspace.me.name } @@ -160,11 +161,11 @@ data "coder_parameter" "custom_repo_url" { resource "kubernetes_deployment" "workspace" { metadata { - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" namespace = var.namespace labels = { - "coder.owner" = data.coder_workspace.me.owner - "coder.owner_id" = data.coder_workspace.me.owner_id + "coder.owner" = data.coder_workspace_owner.me.name + "coder.owner_id" = data.coder_workspace_owner.me.id "coder.workspace_id" = data.coder_workspace.me.id "coder.workspace_name" = data.coder_workspace.me.name } @@ -187,7 +188,7 @@ resource "kubernetes_deployment" "workspace" { } spec { container { - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" # Find the latest version here: # https://github.com/coder/envbuilder/tags image = "ghcr.io/coder/envbuilder:0.2.1" diff --git a/examples/templates/do-linux/main.tf b/examples/templates/do-linux/main.tf index 3afcaebc59806..ee83e361e5531 100644 --- a/examples/templates/do-linux/main.tf +++ b/examples/templates/do-linux/main.tf @@ -235,6 +235,7 @@ provider "digitalocean" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -259,7 +260,7 @@ resource "coder_agent" "main" { display_name = "Home Usage" interval = 600 # every 10 minutes timeout = 30 # df can take a while on large filesystems - script = "coder stat disk --path /home/${lower(data.coder_workspace.me.owner)}" + script = "coder stat disk --path /home/${lower(data.coder_workspace_owner.me.name)}" } } @@ -278,13 +279,13 @@ resource "digitalocean_volume" "home_volume" { resource "digitalocean_droplet" "workspace" { region = data.coder_parameter.region.value count = data.coder_workspace.me.start_count - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" image = data.coder_parameter.droplet_image.value size = data.coder_parameter.droplet_size.value volume_ids = [digitalocean_volume.home_volume.id] user_data = templatefile("cloud-config.yaml.tftpl", { - username = lower(data.coder_workspace.me.owner) + username = lower(data.coder_workspace_owner.me.name) home_volume_label = digitalocean_volume.home_volume.initial_filesystem_label init_script = base64encode(coder_agent.main.init_script) coder_agent_token = coder_agent.main.token diff --git a/examples/templates/docker/main.tf b/examples/templates/docker/main.tf index 3d8bef5c594cc..6cc5344334905 100644 --- a/examples/templates/docker/main.tf +++ b/examples/templates/docker/main.tf @@ -10,7 +10,7 @@ terraform { } locals { - username = data.coder_workspace.me.owner + username = data.coder_workspace_owner.me.name } data "coder_provisioner" "me" { @@ -21,6 +21,7 @@ provider "docker" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = data.coder_provisioner.me.arch @@ -44,10 +45,10 @@ resource "coder_agent" "main" { # You can remove this block if you'd prefer to configure Git manually or using # dotfiles. (see docs/dotfiles.md) env = { - GIT_AUTHOR_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner) - GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}" - GIT_COMMITTER_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner) - GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}" + GIT_AUTHOR_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}" + GIT_COMMITTER_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" } # The following metadata blocks are optional. They are used to display @@ -142,11 +143,11 @@ resource "docker_volume" "home_volume" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" @@ -177,7 +178,7 @@ resource "docker_container" "workspace" { count = data.coder_workspace.me.start_count image = docker_image.main.name # Uses lower() to avoid Docker restriction on container names. - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" # Hostname makes the shell more user friendly: coder@my-workspace:~$ hostname = data.coder_workspace.me.name # Use the docker gateway if the access URL is 127.0.0.1 @@ -196,11 +197,11 @@ resource "docker_container" "workspace" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" diff --git a/examples/templates/envbox/main.tf b/examples/templates/envbox/main.tf index e452ac450794f..3b52a65b4370d 100644 --- a/examples/templates/envbox/main.tf +++ b/examples/templates/envbox/main.tf @@ -88,6 +88,7 @@ provider "kubernetes" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -126,7 +127,7 @@ resource "coder_app" "code-server" { resource "kubernetes_persistent_volume_claim" "home" { metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-home" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}-home" namespace = var.namespace } wait_until_bound = false @@ -144,7 +145,7 @@ resource "kubernetes_pod" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = var.namespace } diff --git a/examples/templates/gcp-devcontainer/main.tf b/examples/templates/gcp-devcontainer/main.tf index 00323ec20a246..5beaefe82e2ee 100644 --- a/examples/templates/gcp-devcontainer/main.tf +++ b/examples/templates/gcp-devcontainer/main.tf @@ -61,6 +61,7 @@ data "google_compute_default_service_account" "default" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "google_compute_disk" "root" { name = "coder-${data.coder_workspace.me.id}-root" @@ -117,10 +118,10 @@ module "code-server" { } resource "google_compute_instance" "vm" { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-root" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}-root" machine_type = "e2-medium" - # data.coder_workspace.me.owner == "default" is a workaround to suppress error in the terraform plan phase while creating a new workspace. - desired_status = (data.coder_workspace.me.owner == "default" || data.coder_workspace.me.start_count == 1) ? "RUNNING" : "TERMINATED" + # data.coder_workspace_owner.me.name == "default" is a workaround to suppress error in the terraform plan phase while creating a new workspace. + desired_status = (data.coder_workspace_owner.me.name == "default" || data.coder_workspace.me.start_count == 1) ? "RUNNING" : "TERMINATED" network_interface { network = "default" @@ -179,7 +180,7 @@ resource "google_compute_instance" "vm" { locals { # Ensure Coder username is a valid Linux username - linux_user = lower(substr(data.coder_workspace.me.owner, 0, 32)) + linux_user = lower(substr(data.coder_workspace_owner.me.name, 0, 32)) } resource "coder_metadata" "workspace_info" { diff --git a/examples/templates/gcp-linux/main.tf b/examples/templates/gcp-linux/main.tf index 42e3cdcd3262d..0caa01cd83bca 100644 --- a/examples/templates/gcp-linux/main.tf +++ b/examples/templates/gcp-linux/main.tf @@ -61,6 +61,7 @@ data "google_compute_default_service_account" "default" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "google_compute_disk" "root" { name = "coder-${data.coder_workspace.me.id}-root" @@ -139,7 +140,7 @@ resource "coder_app" "code-server" { resource "google_compute_instance" "dev" { zone = data.coder_parameter.zone.value count = data.coder_workspace.me.start_count - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-root" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}-root" machine_type = "e2-medium" network_interface { network = "default" @@ -174,7 +175,7 @@ EOMETA locals { # Ensure Coder username is a valid Linux username - linux_user = lower(substr(data.coder_workspace.me.owner, 0, 32)) + linux_user = lower(substr(data.coder_workspace_owner.me.name, 0, 32)) } resource "coder_metadata" "workspace_info" { diff --git a/examples/templates/gcp-vm-container/main.tf b/examples/templates/gcp-vm-container/main.tf index d712859d222d5..a7ab81b4d2bac 100644 --- a/examples/templates/gcp-vm-container/main.tf +++ b/examples/templates/gcp-vm-container/main.tf @@ -61,6 +61,7 @@ data "google_compute_default_service_account" "default" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { auth = "google-instance-identity" @@ -109,7 +110,7 @@ module "gce-container" { resource "google_compute_instance" "dev" { zone = data.coder_parameter.zone.value count = data.coder_workspace.me.start_count - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" machine_type = "e2-medium" network_interface { network = "default" diff --git a/examples/templates/gcp-windows/main.tf b/examples/templates/gcp-windows/main.tf index ea9032eaf3772..74ff06109a83a 100644 --- a/examples/templates/gcp-windows/main.tf +++ b/examples/templates/gcp-windows/main.tf @@ -58,6 +58,7 @@ provider "google" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "google_compute_default_service_account" "default" { } @@ -82,7 +83,7 @@ resource "coder_agent" "main" { resource "google_compute_instance" "dev" { zone = data.coder_parameter.zone.value count = data.coder_workspace.me.start_count - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" machine_type = "e2-medium" network_interface { network = "default" diff --git a/examples/templates/incus/main.tf b/examples/templates/incus/main.tf index ec7445bcb59f6..c51d088cc152b 100644 --- a/examples/templates/incus/main.tf +++ b/examples/templates/incus/main.tf @@ -14,6 +14,7 @@ data "coder_provisioner" "me" {} provider "incus" {} data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} data "coder_parameter" "image" { name = "image" @@ -96,7 +97,7 @@ resource "coder_agent" "main" { metadata { display_name = "Home Disk" key = "3_home_disk" - script = "coder stat disk --path /home/${lower(data.coder_workspace.me.owner)}" + script = "coder stat disk --path /home/${lower(data.coder_workspace_owner.me.name)}" interval = 60 timeout = 1 } @@ -156,7 +157,7 @@ EOF resource "incus_instance" "dev" { running = data.coder_workspace.me.start_count == 1 - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" image = incus_cached_image.image.fingerprint config = { @@ -273,7 +274,7 @@ EOF } locals { - workspace_user = lower(data.coder_workspace.me.owner) + workspace_user = lower(data.coder_workspace_owner.me.name) pool = "coder" repo_base_dir = data.coder_parameter.repo_base_dir.value == "~" ? "/home/${local.workspace_user}" : replace(data.coder_parameter.repo_base_dir.value, "/^~\\//", "/home/${local.workspace_user}/") repo_dir = module.git-clone.repo_dir diff --git a/examples/templates/kubernetes/main.tf b/examples/templates/kubernetes/main.tf index 19000d9e70d3c..649cc94c40a66 100644 --- a/examples/templates/kubernetes/main.tf +++ b/examples/templates/kubernetes/main.tf @@ -101,6 +101,7 @@ provider "kubernetes" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -189,21 +190,21 @@ resource "coder_app" "code-server" { resource "kubernetes_persistent_volume_claim" "home" { metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-home" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}-home" namespace = var.namespace labels = { "app.kubernetes.io/name" = "coder-pvc" - "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" "app.kubernetes.io/part-of" = "coder" //Coder-specific labels. "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } annotations = { - "com.coder.user.email" = data.coder_workspace.me.owner_email + "com.coder.user.email" = data.coder_workspace_owner.me.email } } wait_until_bound = false @@ -224,20 +225,20 @@ resource "kubernetes_deployment" "main" { ] wait_for_rollout = false metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = var.namespace labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" "app.kubernetes.io/part-of" = "coder" "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } annotations = { - "com.coder.user.email" = data.coder_workspace.me.owner_email + "com.coder.user.email" = data.coder_workspace_owner.me.email } } diff --git a/examples/templates/nomad-docker/main.tf b/examples/templates/nomad-docker/main.tf index 28fd675b91933..97c1872f15e64 100644 --- a/examples/templates/nomad-docker/main.tf +++ b/examples/templates/nomad-docker/main.tf @@ -86,6 +86,7 @@ data "coder_parameter" "memory" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -127,7 +128,7 @@ resource "coder_app" "code-server" { } locals { - workspace_tag = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}" + workspace_tag = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}" home_volume_name = "coder_${data.coder_workspace.me.id}_home" } @@ -135,7 +136,7 @@ resource "nomad_namespace" "coder_workspace" { name = local.workspace_tag description = "Coder workspace" meta = { - owner = data.coder_workspace.me.owner + owner = data.coder_workspace_owner.me.name } } @@ -169,7 +170,7 @@ resource "nomad_job" "workspace" { count = data.coder_workspace.me.start_count depends_on = [nomad_csi_volume.home_volume] jobspec = templatefile("${path.module}/workspace.nomad.tpl", { - coder_workspace_owner = data.coder_workspace.me.owner + coder_workspace_owner = data.coder_workspace_owner.me.name coder_workspace_name = data.coder_workspace.me.name workspace_tag = local.workspace_tag cores = tonumber(data.coder_parameter.cpu.value) diff --git a/examples/templates/scratch/main.tf b/examples/templates/scratch/main.tf index 35a7c69d6b26d..4845379edc07b 100644 --- a/examples/templates/scratch/main.tf +++ b/examples/templates/scratch/main.tf @@ -9,6 +9,7 @@ terraform { data "coder_provisioner" "me" {} data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = data.coder_provisioner.me.arch diff --git a/examples/workspace-tags/main.tf b/examples/workspace-tags/main.tf index f74286741cbb0..711fed869640f 100644 --- a/examples/workspace-tags/main.tf +++ b/examples/workspace-tags/main.tf @@ -10,7 +10,7 @@ terraform { } locals { - username = data.coder_workspace.me.owner + username = data.coder_workspace_owner.me.name } data "coder_provisioner" "me" { @@ -18,6 +18,7 @@ data "coder_provisioner" "me" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "coder_workspace_tags" "custom_workspace_tags" { tags = { @@ -77,10 +78,10 @@ resource "coder_agent" "main" { EOF env = { - GIT_AUTHOR_NAME = "${data.coder_workspace.me.owner}" - GIT_COMMITTER_NAME = "${data.coder_workspace.me.owner}" - GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}" - GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}" + GIT_AUTHOR_NAME = "${data.coder_workspace_owner.me.name}" + GIT_COMMITTER_NAME = "${data.coder_workspace_owner.me.name}" + GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}" + GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" } } @@ -107,11 +108,11 @@ resource "docker_volume" "home_volume" { } labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" @@ -135,7 +136,7 @@ resource "coder_metadata" "home_info" { resource "docker_container" "workspace" { count = data.coder_workspace.me.start_count image = "ubuntu:22.04" - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" hostname = data.coder_workspace.me.name entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")] env = [ @@ -153,11 +154,11 @@ resource "docker_container" "workspace" { labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" From d83f81111b9d07c0c300469cb06996c6c3f0b7c8 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Wed, 29 May 2024 11:16:37 +0100 Subject: [PATCH 2/4] chore: update existing usages in dogfood, pr-deployment, scaletest templates --- .github/pr-deployments/template/main.tf | 21 +++++++------ dogfood/main.tf | 13 ++++---- scaletest/templates/kubernetes-large/main.tf | 9 +++--- .../kubernetes-medium-greedy/main.tf | 9 +++--- scaletest/templates/kubernetes-medium/main.tf | 9 +++--- .../templates/kubernetes-minimal/main.tf | 17 +++++----- scaletest/templates/kubernetes-small/main.tf | 9 +++--- scaletest/templates/scaletest-runner/main.tf | 31 ++++++++++--------- scaletest/terraform/k8s/coder.tf | 9 +++--- 9 files changed, 68 insertions(+), 59 deletions(-) diff --git a/.github/pr-deployments/template/main.tf b/.github/pr-deployments/template/main.tf index 978209a4e16d1..2bd941dd7cc3d 100644 --- a/.github/pr-deployments/template/main.tf +++ b/.github/pr-deployments/template/main.tf @@ -86,6 +86,7 @@ provider "kubernetes" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -175,21 +176,21 @@ resource "coder_app" "code-server" { resource "kubernetes_persistent_volume_claim" "home" { metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-home" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}-home" namespace = var.namespace labels = { "app.kubernetes.io/name" = "coder-pvc" - "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" "app.kubernetes.io/part-of" = "coder" //Coder-specific labels. "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } annotations = { - "com.coder.user.email" = data.coder_workspace.me.owner_email + "com.coder.user.email" = data.coder_workspace_owner.me.email } } wait_until_bound = false @@ -210,20 +211,20 @@ resource "kubernetes_deployment" "main" { ] wait_for_rollout = false metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = var.namespace labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" "app.kubernetes.io/part-of" = "coder" "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } annotations = { - "com.coder.user.email" = data.coder_workspace.me.owner_email + "com.coder.user.email" = data.coder_workspace_owner.me.email } } diff --git a/dogfood/main.tf b/dogfood/main.tf index 1656a223ae2a3..a2c1528ecaffa 100644 --- a/dogfood/main.tf +++ b/dogfood/main.tf @@ -24,7 +24,7 @@ locals { repo_base_dir = data.coder_parameter.repo_base_dir.value == "~" ? "/home/coder" : replace(data.coder_parameter.repo_base_dir.value, "/^~\\//", "/home/coder/") repo_dir = replace(module.git-clone.repo_dir, "/^~\\//", "/home/coder/") - container_name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + container_name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" } data "coder_parameter" "repo_base_dir" { @@ -95,6 +95,7 @@ data "coder_external_auth" "github" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} module "slackme" { source = "registry.coder.com/modules/slackme/coder" @@ -267,11 +268,11 @@ resource "docker_volume" "home_volume" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" @@ -309,7 +310,7 @@ resource "docker_container" "workspace" { # Use the docker gateway if the access URL is 127.0.0.1 entrypoint = ["sh", "-c", coder_agent.dev.init_script] # CPU limits are unnecessary since Docker will load balance automatically - memory = data.coder_workspace.me.owner == "code-asher" ? 65536 : 32768 + memory = data.coder_workspace_owner.me.name == "code-asher" ? 65536 : 32768 runtime = "sysbox-runc" env = [ "CODER_AGENT_TOKEN=${coder_agent.dev.token}", @@ -330,11 +331,11 @@ resource "docker_container" "workspace" { # Add labels in Docker to keep track of orphan resources. labels { label = "coder.owner" - value = data.coder_workspace.me.owner + value = data.coder_workspace_owner.me.name } labels { label = "coder.owner_id" - value = data.coder_workspace.me.owner_id + value = data.coder_workspace_owner.me.id } labels { label = "coder.workspace_id" diff --git a/scaletest/templates/kubernetes-large/main.tf b/scaletest/templates/kubernetes-large/main.tf index 161d4448bab64..b195f3574666a 100644 --- a/scaletest/templates/kubernetes-large/main.tf +++ b/scaletest/templates/kubernetes-large/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { coder = { source = "coder/coder" - version = "~> 0.7.0" + version = "~> 0.23.0" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.18" + version = "~> 2.30" } } } @@ -24,6 +24,7 @@ variable "kubernetes_nodepool_workspaces" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -35,11 +36,11 @@ resource "coder_agent" "main" { resource "kubernetes_pod" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = "coder-big" labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" } } spec { diff --git a/scaletest/templates/kubernetes-medium-greedy/main.tf b/scaletest/templates/kubernetes-medium-greedy/main.tf index 8a70eced34426..f1fa04b2d6c3f 100644 --- a/scaletest/templates/kubernetes-medium-greedy/main.tf +++ b/scaletest/templates/kubernetes-medium-greedy/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { coder = { source = "coder/coder" - version = "~> 0.7.0" + version = "~> 0.23.0" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.18" + version = "~> 2.30" } } } @@ -24,6 +24,7 @@ variable "kubernetes_nodepool_workspaces" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -149,11 +150,11 @@ resource "coder_agent" "main" { resource "kubernetes_pod" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = "coder-big" labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" } } spec { diff --git a/scaletest/templates/kubernetes-medium/main.tf b/scaletest/templates/kubernetes-medium/main.tf index 5e3980a0e252e..656e47dd44011 100644 --- a/scaletest/templates/kubernetes-medium/main.tf +++ b/scaletest/templates/kubernetes-medium/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { coder = { source = "coder/coder" - version = "~> 0.7.0" + version = "~> 0.23.0" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.18" + version = "~> 2.30" } } } @@ -24,6 +24,7 @@ variable "kubernetes_nodepool_workspaces" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -35,11 +36,11 @@ resource "coder_agent" "main" { resource "kubernetes_pod" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = "coder-big" labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" } } spec { diff --git a/scaletest/templates/kubernetes-minimal/main.tf b/scaletest/templates/kubernetes-minimal/main.tf index 7ad97f7a89e85..514e8bffd4c38 100644 --- a/scaletest/templates/kubernetes-minimal/main.tf +++ b/scaletest/templates/kubernetes-minimal/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { coder = { source = "coder/coder" - version = "~> 0.12.0" + version = "~> 0.23.0" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.18" + version = "~> 2.30" } } } @@ -24,6 +24,7 @@ variable "kubernetes_nodepool_workspaces" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "m" { os = "linux" @@ -92,24 +93,24 @@ resource "coder_app" "ws_discard" { resource "kubernetes_deployment" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = "coder-big" labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" "app.kubernetes.io/part-of" = "coder" "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } } spec { replicas = 1 selector { match_labels = { - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" } } strategy { @@ -119,7 +120,7 @@ resource "kubernetes_deployment" "main" { metadata { labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" } } spec { diff --git a/scaletest/templates/kubernetes-small/main.tf b/scaletest/templates/kubernetes-small/main.tf index 0c81ba245b1df..9da2d59a9c38e 100644 --- a/scaletest/templates/kubernetes-small/main.tf +++ b/scaletest/templates/kubernetes-small/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { coder = { source = "coder/coder" - version = "~> 0.7.0" + version = "~> 0.23.0" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.18" + version = "~> 2.30" } } } @@ -24,6 +24,7 @@ variable "kubernetes_nodepool_workspaces" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -35,11 +36,11 @@ resource "coder_agent" "main" { resource "kubernetes_pod" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" namespace = "coder-big" labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" } } spec { diff --git a/scaletest/templates/scaletest-runner/main.tf b/scaletest/templates/scaletest-runner/main.tf index 2d17c66435f62..450fab44dce6c 100644 --- a/scaletest/templates/scaletest-runner/main.tf +++ b/scaletest/templates/scaletest-runner/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { coder = { source = "coder/coder" - version = "~> 0.12" + version = "~> 0.23" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.22" + version = "~> 2.30" } } } @@ -17,7 +17,7 @@ resource "time_static" "start_time" { # the scaletest is restarted. triggers = { count : data.coder_workspace.me.start_count - token : data.coder_workspace.me.owner_session_token # Rely on this being re-generated every start. + token : data.coder_workspace_owner.me.session_token # Rely on this being re-generated every start. } } @@ -29,15 +29,15 @@ resource "null_resource" "permission_check" { # for the plan, and consequently, updating the template. lifecycle { precondition { - condition = can(regex("^(default/default|scaletest/runner)$", "${data.coder_workspace.me.owner}/${data.coder_workspace.me.name}")) + condition = can(regex("^(default/default|scaletest/runner)$", "${data.coder_workspace_owner.me.name}/${data.coder_workspace.me.name}")) error_message = "User and workspace name is not allowed, expected 'scaletest/runner'." } } } locals { - workspace_pod_name = "coder-scaletest-runner-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" - workspace_pod_instance = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + workspace_pod_name = "coder-scaletest-runner-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" + workspace_pod_instance = "coder-workspace-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" workspace_pod_termination_grace_period_seconds = 5 * 60 * 60 # 5 hours (cleanup timeout). service_account_name = "scaletest-sa" home_disk_size = 10 @@ -54,6 +54,7 @@ data "coder_provisioner" "me" { data "coder_workspace" "me" { } +data "coder_workspace_owner" "me" {} data "coder_parameter" "verbose" { order = 1 @@ -562,9 +563,9 @@ resource "coder_agent" "main" { VERBOSE : data.coder_parameter.verbose.value ? "1" : "0", DRY_RUN : data.coder_parameter.dry_run.value ? "1" : "0", CODER_CONFIG_DIR : "/home/coder/.config/coderv2", - CODER_USER_TOKEN : data.coder_workspace.me.owner_session_token, + CODER_USER_TOKEN : data.coder_workspace_owner.me.session_token, CODER_URL : data.coder_workspace.me.access_url, - CODER_USER : data.coder_workspace.me.owner, + CODER_USER : data.coder_workspace_owner.me.name, CODER_WORKSPACE : data.coder_workspace.me.name, # Global scaletest envs that may affect each `coder exp scaletest` invocation. @@ -756,17 +757,17 @@ resource "kubernetes_persistent_volume_claim" "home" { namespace = data.coder_parameter.namespace.value labels = { "app.kubernetes.io/name" = "coder-pvc" - "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}" "app.kubernetes.io/part-of" = "coder" // Coder specific labels. "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } annotations = { - "com.coder.user.email" = data.coder_workspace.me.owner_email + "com.coder.user.email" = data.coder_workspace_owner.me.email } } wait_until_bound = false @@ -794,11 +795,11 @@ resource "kubernetes_pod" "main" { "com.coder.resource" = "true" "com.coder.workspace.id" = data.coder_workspace.me.id "com.coder.workspace.name" = data.coder_workspace.me.name - "com.coder.user.id" = data.coder_workspace.me.owner_id - "com.coder.user.username" = data.coder_workspace.me.owner + "com.coder.user.id" = data.coder_workspace_owner.me.id + "com.coder.user.username" = data.coder_workspace_owner.me.name } annotations = { - "com.coder.user.email" = data.coder_workspace.me.owner_email + "com.coder.user.email" = data.coder_workspace_owner.me.email } } # Set the pod delete timeout to termination_grace_period_seconds + 1m. diff --git a/scaletest/terraform/k8s/coder.tf b/scaletest/terraform/k8s/coder.tf index 7e8fcaa7128c4..78f1faf932ae9 100644 --- a/scaletest/terraform/k8s/coder.tf +++ b/scaletest/terraform/k8s/coder.tf @@ -284,11 +284,11 @@ resource "local_file" "kubernetes_template" { required_providers { coder = { source = "coder/coder" - version = "~> 0.7.0" + version = "~> 0.23.0" } kubernetes = { source = "hashicorp/kubernetes" - version = "~> 2.18" + version = "~> 2.30" } } } @@ -300,6 +300,7 @@ resource "local_file" "kubernetes_template" { } data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" @@ -309,11 +310,11 @@ resource "local_file" "kubernetes_template" { resource "kubernetes_pod" "main" { count = data.coder_workspace.me.start_count metadata { - name = "coder-$${lower(data.coder_workspace.me.owner)}-$${lower(data.coder_workspace.me.name)}" + name = "coder-$${lower(data.coder_workspace_owner.me.name)}-$${lower(data.coder_workspace.me.name)}" namespace = "${local.coder_namespace}" labels = { "app.kubernetes.io/name" = "coder-workspace" - "app.kubernetes.io/instance" = "coder-workspace-$${lower(data.coder_workspace.me.owner)}-$${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/instance" = "coder-workspace-$${lower(data.coder_workspace_owner.me.name)}-$${lower(data.coder_workspace.me.name)}" } } spec { From 93fa4d0edf252a8888b71c11fa446c5b23d5ed5b Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Wed, 29 May 2024 11:17:07 +0100 Subject: [PATCH 3/4] chore: update usage and reference in all other places --- docs/admin/quotas.md | 2 +- docs/faqs.md | 2 +- provisioner/terraform/diagnostic_test.go | 4 ++-- .../modules/templates/TemplateFiles/TemplateFiles.stories.tsx | 2 +- site/src/pages/UserSettingsPage/AccountPage/AccountForm.tsx | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/admin/quotas.md b/docs/admin/quotas.md index aa12cf328c4d1..88ca4b27860dc 100644 --- a/docs/admin/quotas.md +++ b/docs/admin/quotas.md @@ -30,7 +30,7 @@ compute: ```hcl resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root" + name = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}-root" } resource "coder_metadata" "home_volume" { diff --git a/docs/faqs.md b/docs/faqs.md index 66c0e98a76dfc..9ee9d30ef26e1 100644 --- a/docs/faqs.md +++ b/docs/faqs.md @@ -315,7 +315,7 @@ This code produces a hashed value that will be difficult to replicate. ```hcl locals { - concatenated_string = "${data.coder_workspace.me.name}+${data.coder_workspace.me.owner}" + concatenated_string = "${data.coder_workspace.me.name}+${data.coder_workspace_owner.me.name}" hashed_string = md5(local.concatenated_string) truncated_hash = substr(local.hashed_string, 0, 16) } diff --git a/provisioner/terraform/diagnostic_test.go b/provisioner/terraform/diagnostic_test.go index 54b5b6c5c35d3..8727256b75376 100644 --- a/provisioner/terraform/diagnostic_test.go +++ b/provisioner/terraform/diagnostic_test.go @@ -23,10 +23,10 @@ func TestFormatDiagnostic(t *testing.T) { expected []string }{ "Expression": { - input: `{"@level":"error","@message":"Error: Unsupported attribute","@module":"terraform.ui","@timestamp":"2023-03-17T10:33:38.761493+01:00","diagnostic":{"severity":"error","summary":"Unsupported attribute","detail":"This object has no argument, nested block, or exported attribute named \"foobar\".","range":{"filename":"main.tf","start":{"line":230,"column":81,"byte":5648},"end":{"line":230,"column":88,"byte":5655}},"snippet":{"context":"resource \"docker_container\" \"workspace\"","code":" name = \"coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.foobar)}\"","start_line":230,"highlight_start_offset":80,"highlight_end_offset":87,"values":[]}},"type":"diagnostic"}`, + input: `{"@level":"error","@message":"Error: Unsupported attribute","@module":"terraform.ui","@timestamp":"2023-03-17T10:33:38.761493+01:00","diagnostic":{"severity":"error","summary":"Unsupported attribute","detail":"This object has no argument, nested block, or exported attribute named \"foobar\".","range":{"filename":"main.tf","start":{"line":230,"column":81,"byte":5648},"end":{"line":230,"column":88,"byte":5655}},"snippet":{"context":"resource \"docker_container\" \"workspace\"","code":" name = \"coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.foobar)}\"","start_line":230,"highlight_start_offset":80,"highlight_end_offset":87,"values":[]}},"type":"diagnostic"}`, expected: []string{ "on main.tf line 230, in resource \"docker_container\" \"workspace\":", - " 230: name = \"coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.foobar)}\"", + " 230: name = \"coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.foobar)}\"", "", "This object has no argument, nested block, or exported attribute named \"foobar\".", }, diff --git a/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx b/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx index e7f4e815b6003..2877a6e30bcf0 100644 --- a/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx +++ b/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx @@ -8,7 +8,7 @@ const exampleFiles = { "build/Dockerfile": 'FROM ubuntu\n\nRUN apt-get update \\\n\t&& apt-get install -y \\\n\tcurl \\\n\tgit \\\n\tgolang \\\n\tsudo \\\n\tvim \\\n\twget \\\n\t&& rm -rf /var/lib/apt/lists/*\n\nARG USER=coder\nRUN useradd --groups sudo --no-create-home --shell /bin/bash ${USER} \\\n\t&& echo "${USER} ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/${USER} \\\n\t&& chmod 0440 /etc/sudoers.d/${USER}\nUSER ${USER}\nWORKDIR /home/${USER}\n', "main.tf": - 'terraform {\n required_providers {\n coder = {\n source = "coder/coder"\n }\n docker = {\n source = "kreuzwerker/docker"\n }\n }\n}\n\nlocals {\n username = data.coder_workspace.me.owner\n}\n\ndata "coder_provisioner" "me" {\n}\n\nprovider "docker" {\n}\n\ndata "coder_workspace" "me" {\n}\n\nresource "coder_agent" "main" {\n arch = data.coder_provisioner.me.arch\n os = "linux"\n startup_script_timeout = 180\n startup_script = <<-EOT\n set -e\n\n # install and start code-server\n curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server --version 4.11.0\n /tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &\n EOT\n\n # These environment variables allow you to make Git commits right away after creating a\n # workspace. Note that they take precedence over configuration defined in ~/.gitconfig!\n # You can remove this block if you\'d prefer to configure Git manually or using\n # dotfiles. (see docs/dotfiles.md)\n env = {\n GIT_AUTHOR_NAME = "${data.coder_workspace.me.owner}"\n GIT_COMMITTER_NAME = "${data.coder_workspace.me.owner}"\n GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}"\n GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}"\n }\n\n # The following metadata blocks are optional. They are used to display\n # information about your workspace in the dashboard. You can remove them\n # if you don\'t want to display any information.\n # For basic resources, you can use the `coder stat` command.\n # If you need more control, you can write your own script.\n metadata {\n display_name = "CPU Usage"\n key = "0_cpu_usage"\n script = "coder stat cpu"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "RAM Usage"\n key = "1_ram_usage"\n script = "coder stat mem"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Home Disk"\n key = "3_home_disk"\n script = "coder stat disk --path $${HOME}"\n interval = 60\n timeout = 1\n }\n\n metadata {\n display_name = "CPU Usage (Host)"\n key = "4_cpu_usage_host"\n script = "coder stat cpu --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Memory Usage (Host)"\n key = "5_mem_usage_host"\n script = "coder stat mem --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Load Average (Host)"\n key = "6_load_host"\n # get load avg scaled by number of cores\n script = </tmp/code-server.log 2>&1 &\n EOT\n\n # These environment variables allow you to make Git commits right away after creating a\n # workspace. Note that they take precedence over configuration defined in ~/.gitconfig!\n # You can remove this block if you\'d prefer to configure Git manually or using\n # dotfiles. (see docs/dotfiles.md)\n env = {\n GIT_AUTHOR_NAME = "${data.coder_workspace_owner.me.name}"\n GIT_COMMITTER_NAME = "${data.coder_workspace_owner.me.name}"\n GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}"\n GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}"\n }\n\n # The following metadata blocks are optional. They are used to display\n # information about your workspace in the dashboard. You can remove them\n # if you don\'t want to display any information.\n # For basic resources, you can use the `coder stat` command.\n # If you need more control, you can write your own script.\n metadata {\n display_name = "CPU Usage"\n key = "0_cpu_usage"\n script = "coder stat cpu"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "RAM Usage"\n key = "1_ram_usage"\n script = "coder stat mem"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Home Disk"\n key = "3_home_disk"\n script = "coder stat disk --path $${HOME}"\n interval = 60\n timeout = 1\n }\n\n metadata {\n display_name = "CPU Usage (Host)"\n key = "4_cpu_usage_host"\n script = "coder stat cpu --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Memory Usage (Host)"\n key = "5_mem_usage_host"\n script = "coder stat mem --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Load Average (Host)"\n key = "6_load_host"\n # get load avg scaled by number of cores\n script = < = { diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountForm.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountForm.tsx index 28c772620e97e..84cdd04b39144 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountForm.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountForm.tsx @@ -83,7 +83,7 @@ export const AccountForm: FC = ({ disabled={!editable} fullWidth label={Language.nameLabel} - helperText='The human-readable name is optional and can be accessed in a template via the "data.coder_workspace.me.owner_name" property.' + helperText='The human-readable name is optional and can be accessed in a template via the "data.coder_workspace_owner.me.full_name" property.' />
From caeb908ff4ee3ca8cc924c36c3654cee67a85260 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Thu, 30 May 2024 09:21:54 +0100 Subject: [PATCH 4/4] address PR comments --- examples/templates/azure-windows/main.tf | 1 - examples/templates/scratch/main.tf | 1 - scaletest/terraform/k8s/coder.tf | 2 +- .../modules/templates/TemplateFiles/TemplateFiles.stories.tsx | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/examples/templates/azure-windows/main.tf b/examples/templates/azure-windows/main.tf index eeb3b8ca5e96e..e494b037f7348 100644 --- a/examples/templates/azure-windows/main.tf +++ b/examples/templates/azure-windows/main.tf @@ -17,7 +17,6 @@ provider "coder" { } data "coder_workspace" "me" {} -data "coder_workspace_owner" "me" {} data "coder_parameter" "location" { description = "What location should your workspace live in?" diff --git a/examples/templates/scratch/main.tf b/examples/templates/scratch/main.tf index 4845379edc07b..35a7c69d6b26d 100644 --- a/examples/templates/scratch/main.tf +++ b/examples/templates/scratch/main.tf @@ -9,7 +9,6 @@ terraform { data "coder_provisioner" "me" {} data "coder_workspace" "me" {} -data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { arch = data.coder_provisioner.me.arch diff --git a/scaletest/terraform/k8s/coder.tf b/scaletest/terraform/k8s/coder.tf index 78f1faf932ae9..ea83317127fd8 100644 --- a/scaletest/terraform/k8s/coder.tf +++ b/scaletest/terraform/k8s/coder.tf @@ -300,7 +300,7 @@ resource "local_file" "kubernetes_template" { } data "coder_workspace" "me" {} -data "coder_workspace_owner" "me" {} + data "coder_workspace_owner" "me" {} resource "coder_agent" "main" { os = "linux" diff --git a/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx b/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx index 2877a6e30bcf0..8222a9bb4cca3 100644 --- a/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx +++ b/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx @@ -8,7 +8,7 @@ const exampleFiles = { "build/Dockerfile": 'FROM ubuntu\n\nRUN apt-get update \\\n\t&& apt-get install -y \\\n\tcurl \\\n\tgit \\\n\tgolang \\\n\tsudo \\\n\tvim \\\n\twget \\\n\t&& rm -rf /var/lib/apt/lists/*\n\nARG USER=coder\nRUN useradd --groups sudo --no-create-home --shell /bin/bash ${USER} \\\n\t&& echo "${USER} ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/${USER} \\\n\t&& chmod 0440 /etc/sudoers.d/${USER}\nUSER ${USER}\nWORKDIR /home/${USER}\n', "main.tf": - 'terraform {\n required_providers {\n coder = {\n source = "coder/coder"\n }\n docker = {\n source = "kreuzwerker/docker"\n }\n }\n}\n\nlocals {\n username = data.coder_workspace_owner.me.name\n}\n\ndata "coder_provisioner" "me" {\n}\n\nprovider "docker" {\n}\n\ndata "coder_workspace" "me" {\n}\n\nresource "coder_agent" "main" {\n arch = data.coder_provisioner.me.arch\n os = "linux"\n startup_script_timeout = 180\n startup_script = <<-EOT\n set -e\n\n # install and start code-server\n curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server --version 4.11.0\n /tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &\n EOT\n\n # These environment variables allow you to make Git commits right away after creating a\n # workspace. Note that they take precedence over configuration defined in ~/.gitconfig!\n # You can remove this block if you\'d prefer to configure Git manually or using\n # dotfiles. (see docs/dotfiles.md)\n env = {\n GIT_AUTHOR_NAME = "${data.coder_workspace_owner.me.name}"\n GIT_COMMITTER_NAME = "${data.coder_workspace_owner.me.name}"\n GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}"\n GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}"\n }\n\n # The following metadata blocks are optional. They are used to display\n # information about your workspace in the dashboard. You can remove them\n # if you don\'t want to display any information.\n # For basic resources, you can use the `coder stat` command.\n # If you need more control, you can write your own script.\n metadata {\n display_name = "CPU Usage"\n key = "0_cpu_usage"\n script = "coder stat cpu"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "RAM Usage"\n key = "1_ram_usage"\n script = "coder stat mem"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Home Disk"\n key = "3_home_disk"\n script = "coder stat disk --path $${HOME}"\n interval = 60\n timeout = 1\n }\n\n metadata {\n display_name = "CPU Usage (Host)"\n key = "4_cpu_usage_host"\n script = "coder stat cpu --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Memory Usage (Host)"\n key = "5_mem_usage_host"\n script = "coder stat mem --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Load Average (Host)"\n key = "6_load_host"\n # get load avg scaled by number of cores\n script = </tmp/code-server.log 2>&1 &\n EOT\n\n # These environment variables allow you to make Git commits right away after creating a\n # workspace. Note that they take precedence over configuration defined in ~/.gitconfig!\n # You can remove this block if you\'d prefer to configure Git manually or using\n # dotfiles. (see docs/dotfiles.md)\n env = {\n GIT_AUTHOR_NAME = "${data.coder_workspace_owner.me.name}"\n GIT_COMMITTER_NAME = "${data.coder_workspace_owner.me.name}"\n GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}"\n GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}"\n }\n\n # The following metadata blocks are optional. They are used to display\n # information about your workspace in the dashboard. You can remove them\n # if you don\'t want to display any information.\n # For basic resources, you can use the `coder stat` command.\n # If you need more control, you can write your own script.\n metadata {\n display_name = "CPU Usage"\n key = "0_cpu_usage"\n script = "coder stat cpu"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "RAM Usage"\n key = "1_ram_usage"\n script = "coder stat mem"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Home Disk"\n key = "3_home_disk"\n script = "coder stat disk --path $${HOME}"\n interval = 60\n timeout = 1\n }\n\n metadata {\n display_name = "CPU Usage (Host)"\n key = "4_cpu_usage_host"\n script = "coder stat cpu --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Memory Usage (Host)"\n key = "5_mem_usage_host"\n script = "coder stat mem --host"\n interval = 10\n timeout = 1\n }\n\n metadata {\n display_name = "Load Average (Host)"\n key = "6_load_host"\n # get load avg scaled by number of cores\n script = < = {