From 193e2b407e54fb941081eaed0c432d758f246a83 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 24 Aug 2022 16:20:14 +0300 Subject: [PATCH 1/3] fix: Use immutable names for volumes in example templates This contributes towards #3000, #3386 Related #3409 --- docs/templates.md | 2 +- dogfood/main.tf | 2 +- examples/templates/do-linux/main.tf | 2 +- examples/templates/docker-code-server/main.tf | 2 +- examples/templates/docker-image-builds/main.tf | 2 +- examples/templates/docker-with-dotfiles/main.tf | 2 +- examples/templates/docker/main.tf | 2 +- examples/templates/gcp-linux/main.tf | 2 +- examples/templates/gcp-windows/main.tf | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/templates.md b/docs/templates.md index 9c81789197c16..4afe9d6fceea6 100644 --- a/docs/templates.md +++ b/docs/templates.md @@ -184,7 +184,7 @@ data "coder_workspace" "me" { resource "docker_volume" "home_volume" { # persistent resource (remains a workspace is stopped) count = 1 - name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" } resource "docker_container" "workspace" { diff --git a/dogfood/main.tf b/dogfood/main.tf index f39ccc491e8e0..b46ed8c301a25 100644 --- a/dogfood/main.tf +++ b/dogfood/main.tf @@ -54,7 +54,7 @@ resource "coder_app" "code-server" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-home" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" lifecycle { ignore_changes = all } diff --git a/examples/templates/do-linux/main.tf b/examples/templates/do-linux/main.tf index fbb5a6d227e4d..6314c927edebf 100644 --- a/examples/templates/do-linux/main.tf +++ b/examples/templates/do-linux/main.tf @@ -100,7 +100,7 @@ resource "coder_agent" "main" { resource "digitalocean_volume" "home_volume" { region = var.region - name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-home" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" size = var.home_volume_size initial_filesystem_type = "ext4" initial_filesystem_label = "coder-home" diff --git a/examples/templates/docker-code-server/main.tf b/examples/templates/docker-code-server/main.tf index d9e713dc26faf..c10af57d7dcea 100644 --- a/examples/templates/docker-code-server/main.tf +++ b/examples/templates/docker-code-server/main.tf @@ -54,7 +54,7 @@ resource "coder_app" "code-server" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" } resource "docker_container" "workspace" { diff --git a/examples/templates/docker-image-builds/main.tf b/examples/templates/docker-image-builds/main.tf index dbce5de1aaedc..8ed2485d7bcb8 100644 --- a/examples/templates/docker-image-builds/main.tf +++ b/examples/templates/docker-image-builds/main.tf @@ -69,7 +69,7 @@ variable "docker_image" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}-root" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" } resource "docker_image" "coder_image" { diff --git a/examples/templates/docker-with-dotfiles/main.tf b/examples/templates/docker-with-dotfiles/main.tf index ae9475ededee2..8f3a50232e592 100644 --- a/examples/templates/docker-with-dotfiles/main.tf +++ b/examples/templates/docker-with-dotfiles/main.tf @@ -47,7 +47,7 @@ resource "coder_agent" "main" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}-root" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" } resource "docker_container" "workspace" { diff --git a/examples/templates/docker/main.tf b/examples/templates/docker/main.tf index 2ca356c60cb73..f22e3b70e3aa9 100644 --- a/examples/templates/docker/main.tf +++ b/examples/templates/docker/main.tf @@ -60,7 +60,7 @@ resource "coder_app" "code-server" { resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}-home" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" } diff --git a/examples/templates/gcp-linux/main.tf b/examples/templates/gcp-linux/main.tf index 59a51c2aebf04..827ddbbacf8a0 100644 --- a/examples/templates/gcp-linux/main.tf +++ b/examples/templates/gcp-linux/main.tf @@ -36,7 +36,7 @@ data "coder_workspace" "me" { } resource "google_compute_disk" "root" { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-root" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-root" type = "pd-ssd" zone = var.zone image = "debian-cloud/debian-11" diff --git a/examples/templates/gcp-windows/main.tf b/examples/templates/gcp-windows/main.tf index dac920654a873..7b5be419b3460 100644 --- a/examples/templates/gcp-windows/main.tf +++ b/examples/templates/gcp-windows/main.tf @@ -36,7 +36,7 @@ data "google_compute_default_service_account" "default" { } resource "google_compute_disk" "root" { - name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-root" + name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-root" type = "pd-ssd" zone = var.zone image = "projects/windows-cloud/global/images/windows-server-2022-dc-core-v20220215" From 564969a4909fc85e3123d692fb6f5459d3951d11 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 26 Aug 2022 16:24:28 +0300 Subject: [PATCH 2/3] fix: Only use workspace UUID for volume names --- docs/templates.md | 2 +- dogfood/main.tf | 2 +- examples/templates/do-linux/main.tf | 2 +- examples/templates/docker-code-server/main.tf | 2 +- examples/templates/docker-image-builds/main.tf | 2 +- examples/templates/docker-with-dotfiles/main.tf | 2 +- examples/templates/docker/main.tf | 2 +- examples/templates/gcp-linux/main.tf | 2 +- examples/templates/gcp-windows/main.tf | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/templates.md b/docs/templates.md index 4afe9d6fceea6..a0d9a11ee44df 100644 --- a/docs/templates.md +++ b/docs/templates.md @@ -184,7 +184,7 @@ data "coder_workspace" "me" { resource "docker_volume" "home_volume" { # persistent resource (remains a workspace is stopped) count = 1 - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" } resource "docker_container" "workspace" { diff --git a/dogfood/main.tf b/dogfood/main.tf index b46ed8c301a25..f5b40e20a69c3 100644 --- a/dogfood/main.tf +++ b/dogfood/main.tf @@ -54,7 +54,7 @@ resource "coder_app" "code-server" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" lifecycle { ignore_changes = all } diff --git a/examples/templates/do-linux/main.tf b/examples/templates/do-linux/main.tf index 6314c927edebf..0fe2ffcdfcda0 100644 --- a/examples/templates/do-linux/main.tf +++ b/examples/templates/do-linux/main.tf @@ -100,7 +100,7 @@ resource "coder_agent" "main" { resource "digitalocean_volume" "home_volume" { region = var.region - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" size = var.home_volume_size initial_filesystem_type = "ext4" initial_filesystem_label = "coder-home" diff --git a/examples/templates/docker-code-server/main.tf b/examples/templates/docker-code-server/main.tf index c10af57d7dcea..f72bf904e2adc 100644 --- a/examples/templates/docker-code-server/main.tf +++ b/examples/templates/docker-code-server/main.tf @@ -54,7 +54,7 @@ resource "coder_app" "code-server" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" } resource "docker_container" "workspace" { diff --git a/examples/templates/docker-image-builds/main.tf b/examples/templates/docker-image-builds/main.tf index 8ed2485d7bcb8..862dd020aef6c 100644 --- a/examples/templates/docker-image-builds/main.tf +++ b/examples/templates/docker-image-builds/main.tf @@ -69,7 +69,7 @@ variable "docker_image" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" } resource "docker_image" "coder_image" { diff --git a/examples/templates/docker-with-dotfiles/main.tf b/examples/templates/docker-with-dotfiles/main.tf index 8f3a50232e592..96dac6259e4ef 100644 --- a/examples/templates/docker-with-dotfiles/main.tf +++ b/examples/templates/docker-with-dotfiles/main.tf @@ -47,7 +47,7 @@ resource "coder_agent" "main" { } resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" } resource "docker_container" "workspace" { diff --git a/examples/templates/docker/main.tf b/examples/templates/docker/main.tf index f22e3b70e3aa9..a55c4dde120f0 100644 --- a/examples/templates/docker/main.tf +++ b/examples/templates/docker/main.tf @@ -60,7 +60,7 @@ resource "coder_app" "code-server" { resource "docker_volume" "home_volume" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-home" + name = "coder-${data.coder_workspace.me.id}-home" } diff --git a/examples/templates/gcp-linux/main.tf b/examples/templates/gcp-linux/main.tf index 827ddbbacf8a0..a95463df97854 100644 --- a/examples/templates/gcp-linux/main.tf +++ b/examples/templates/gcp-linux/main.tf @@ -36,7 +36,7 @@ data "coder_workspace" "me" { } resource "google_compute_disk" "root" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-root" + name = "coder-${data.coder_workspace.me.id}-root" type = "pd-ssd" zone = var.zone image = "debian-cloud/debian-11" diff --git a/examples/templates/gcp-windows/main.tf b/examples/templates/gcp-windows/main.tf index 7b5be419b3460..5c41c67505164 100644 --- a/examples/templates/gcp-windows/main.tf +++ b/examples/templates/gcp-windows/main.tf @@ -36,7 +36,7 @@ data "google_compute_default_service_account" "default" { } resource "google_compute_disk" "root" { - name = "coder-${data.coder_workspace.me.owner_id}-${data.coder_workspace.me.id}-root" + name = "coder-${data.coder_workspace.me.id}-root" type = "pd-ssd" zone = var.zone image = "projects/windows-cloud/global/images/windows-server-2022-dc-core-v20220215" From 85e590fa592ff225696268861821e11723a01ebe Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Tue, 8 Nov 2022 15:41:14 +0000 Subject: [PATCH 3/3] Add lifecycle and labels --- docs/templates.md | 3 ++ dogfood/main.tf | 37 +++++++++++++++++ examples/templates/do-linux/main.tf | 4 ++ examples/templates/docker-code-server/main.tf | 40 +++++++++++++++++++ .../templates/docker-image-builds/main.tf | 40 +++++++++++++++++++ .../templates/docker-with-dotfiles/main.tf | 40 +++++++++++++++++++ examples/templates/docker/main.tf | 40 +++++++++++++++++++ examples/templates/gcp-linux/main.tf | 2 +- examples/templates/gcp-windows/main.tf | 2 +- 9 files changed, 206 insertions(+), 2 deletions(-) diff --git a/docs/templates.md b/docs/templates.md index a0d9a11ee44df..9b801a2a72a0d 100644 --- a/docs/templates.md +++ b/docs/templates.md @@ -185,6 +185,9 @@ resource "docker_volume" "home_volume" { # persistent resource (remains a workspace is stopped) count = 1 name = "coder-${data.coder_workspace.me.id}-home" + lifecycle { + ignore_changes = all + } } resource "docker_container" "workspace" { diff --git a/dogfood/main.tf b/dogfood/main.tf index f5b40e20a69c3..27f447e92def6 100644 --- a/dogfood/main.tf +++ b/dogfood/main.tf @@ -55,9 +55,29 @@ resource "coder_app" "code-server" { resource "docker_volume" "home_volume" { name = "coder-${data.coder_workspace.me.id}-home" + # Protect the volume from being deleted due to changes in attributes. lifecycle { ignore_changes = all } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + # This field becomes outdated if the workspace is renamed but can + # be useful for debugging or cleaning out dangling volumes. + labels { + label = "coder.workspace_name_at_creation" + value = data.coder_workspace.me.name + } } resource "coder_metadata" "home_info" { @@ -116,6 +136,23 @@ resource "docker_container" "workspace" { volume_name = docker_volume.home_volume.name read_only = false } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + labels { + label = "coder.workspace_name" + value = data.coder_workspace.me.name + } } resource "coder_metadata" "container_info" { diff --git a/examples/templates/do-linux/main.tf b/examples/templates/do-linux/main.tf index 0fe2ffcdfcda0..713ee69242324 100644 --- a/examples/templates/do-linux/main.tf +++ b/examples/templates/do-linux/main.tf @@ -104,6 +104,10 @@ resource "digitalocean_volume" "home_volume" { size = var.home_volume_size initial_filesystem_type = "ext4" initial_filesystem_label = "coder-home" + # Protect the volume from being deleted due to changes in attributes. + lifecycle { + ignore_changes = all + } } resource "digitalocean_droplet" "workspace" { diff --git a/examples/templates/docker-code-server/main.tf b/examples/templates/docker-code-server/main.tf index f72bf904e2adc..6ee9c569cbe3a 100644 --- a/examples/templates/docker-code-server/main.tf +++ b/examples/templates/docker-code-server/main.tf @@ -55,6 +55,29 @@ resource "coder_app" "code-server" { resource "docker_volume" "home_volume" { name = "coder-${data.coder_workspace.me.id}-home" + # Protect the volume from being deleted due to changes in attributes. + lifecycle { + ignore_changes = all + } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + # This field becomes outdated if the workspace is renamed but can + # be useful for debugging or cleaning out dangling volumes. + labels { + label = "coder.workspace_name_at_creation" + value = data.coder_workspace.me.name + } } resource "docker_container" "workspace" { @@ -76,4 +99,21 @@ resource "docker_container" "workspace" { volume_name = docker_volume.home_volume.name read_only = false } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + labels { + label = "coder.workspace_name" + value = data.coder_workspace.me.name + } } diff --git a/examples/templates/docker-image-builds/main.tf b/examples/templates/docker-image-builds/main.tf index 862dd020aef6c..564ed545e58f1 100644 --- a/examples/templates/docker-image-builds/main.tf +++ b/examples/templates/docker-image-builds/main.tf @@ -70,6 +70,29 @@ variable "docker_image" { resource "docker_volume" "home_volume" { name = "coder-${data.coder_workspace.me.id}-home" + # Protect the volume from being deleted due to changes in attributes. + lifecycle { + ignore_changes = all + } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + # This field becomes outdated if the workspace is renamed but can + # be useful for debugging or cleaning out dangling volumes. + labels { + label = "coder.workspace_name_at_creation" + value = data.coder_workspace.me.name + } } resource "docker_image" "coder_image" { @@ -104,6 +127,23 @@ resource "docker_container" "workspace" { volume_name = docker_volume.home_volume.name read_only = false } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + labels { + label = "coder.workspace_name" + value = data.coder_workspace.me.name + } } resource "coder_metadata" "container_info" { diff --git a/examples/templates/docker-with-dotfiles/main.tf b/examples/templates/docker-with-dotfiles/main.tf index 96dac6259e4ef..517f509733942 100644 --- a/examples/templates/docker-with-dotfiles/main.tf +++ b/examples/templates/docker-with-dotfiles/main.tf @@ -48,6 +48,29 @@ resource "coder_agent" "main" { resource "docker_volume" "home_volume" { name = "coder-${data.coder_workspace.me.id}-home" + # Protect the volume from being deleted due to changes in attributes. + lifecycle { + ignore_changes = all + } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + # This field becomes outdated if the workspace is renamed but can + # be useful for debugging or cleaning out dangling volumes. + labels { + label = "coder.workspace_name_at_creation" + value = data.coder_workspace.me.name + } } resource "docker_container" "workspace" { @@ -68,6 +91,23 @@ resource "docker_container" "workspace" { volume_name = docker_volume.home_volume.name read_only = false } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + labels { + label = "coder.workspace_name" + value = data.coder_workspace.me.name + } } resource "coder_metadata" "container_info" { diff --git a/examples/templates/docker/main.tf b/examples/templates/docker/main.tf index a55c4dde120f0..5a7cfff1647cd 100644 --- a/examples/templates/docker/main.tf +++ b/examples/templates/docker/main.tf @@ -61,6 +61,29 @@ resource "coder_app" "code-server" { resource "docker_volume" "home_volume" { name = "coder-${data.coder_workspace.me.id}-home" + # Protect the volume from being deleted due to changes in attributes. + lifecycle { + ignore_changes = all + } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + # This field becomes outdated if the workspace is renamed but can + # be useful for debugging or cleaning out dangling volumes. + labels { + label = "coder.workspace_name_at_creation" + value = data.coder_workspace.me.name + } } @@ -100,4 +123,21 @@ resource "docker_container" "workspace" { volume_name = docker_volume.home_volume.name read_only = false } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace.me.owner + } + labels { + label = "coder.owner_id" + value = data.coder_workspace.me.owner_id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + labels { + label = "coder.workspace_name" + value = data.coder_workspace.me.name + } } diff --git a/examples/templates/gcp-linux/main.tf b/examples/templates/gcp-linux/main.tf index a95463df97854..585a079ebff91 100644 --- a/examples/templates/gcp-linux/main.tf +++ b/examples/templates/gcp-linux/main.tf @@ -41,7 +41,7 @@ resource "google_compute_disk" "root" { zone = var.zone image = "debian-cloud/debian-11" lifecycle { - ignore_changes = [image] + ignore_changes = [name, image] } } diff --git a/examples/templates/gcp-windows/main.tf b/examples/templates/gcp-windows/main.tf index 5c41c67505164..3b4dd745c5f67 100644 --- a/examples/templates/gcp-windows/main.tf +++ b/examples/templates/gcp-windows/main.tf @@ -41,7 +41,7 @@ resource "google_compute_disk" "root" { zone = var.zone image = "projects/windows-cloud/global/images/windows-server-2022-dc-core-v20220215" lifecycle { - ignore_changes = [image] + ignore_changes = [name, image] } }