From 89e27c0f9602b0bab7e58fd16792067110ed3de1 Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 19:25:24 +0000 Subject: [PATCH 01/11] moved coder_parameter --- examples/{resources => data-sources}/coder_parameter/resource.tf | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/{resources => data-sources}/coder_parameter/resource.tf (100%) diff --git a/examples/resources/coder_parameter/resource.tf b/examples/data-sources/coder_parameter/resource.tf similarity index 100% rename from examples/resources/coder_parameter/resource.tf rename to examples/data-sources/coder_parameter/resource.tf From a7e9d7e757b74eb527771e83ca1925270e7f735d Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 19:30:26 +0000 Subject: [PATCH 02/11] swapped test target, renamed parameter example file --- .../coder_parameter/{resource.tf => data-source.tf} | 0 provider/examples_test.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename examples/data-sources/coder_parameter/{resource.tf => data-source.tf} (100%) diff --git a/examples/data-sources/coder_parameter/resource.tf b/examples/data-sources/coder_parameter/data-source.tf similarity index 100% rename from examples/data-sources/coder_parameter/resource.tf rename to examples/data-sources/coder_parameter/data-source.tf diff --git a/provider/examples_test.go b/provider/examples_test.go index 6fa73d21..d516493e 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -15,7 +15,7 @@ func TestExamples(t *testing.T) { t.Parallel() for _, testDir := range []string{ - "coder_parameter", + "coder_agent", "coder_workspace_tags", } { t.Run(testDir, func(t *testing.T) { From 22fcf243dc71a44abc7e6f4a8f1bfbcda0dce854 Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 19:32:29 +0000 Subject: [PATCH 03/11] make gen --- docs/data-sources/parameter.md | 122 ++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/docs/data-sources/parameter.md b/docs/data-sources/parameter.md index 4bded2d3..9c6a11f5 100644 --- a/docs/data-sources/parameter.md +++ b/docs/data-sources/parameter.md @@ -10,7 +10,127 @@ description: |- Use this data source to configure editable options for workspaces. - +## Example Usage + +```terraform +provider "coder" {} + +data "coder_parameter" "example" { + name = "Region" + description = "Specify a region to place your workspace." + mutable = false + type = "string" + default = "asia-central1-a" + option { + value = "us-central1-a" + name = "US Central" + icon = "/icon/usa.svg" + } + option { + value = "asia-central1-a" + name = "Asia" + icon = "/icon/asia.svg" + } +} + +data "coder_parameter" "ami" { + name = "Machine Image" + description = <<-EOT + # Provide the machine image + See the [registry](https://container.registry.blah/namespace) for options. + EOT + option { + value = "ami-xxxxxxxx" + name = "Ubuntu" + icon = "/icon/ubuntu.svg" + } +} + +data "coder_parameter" "is_public_instance" { + name = "Is public instance?" + type = "bool" + icon = "/icon/docker.svg" + default = false +} + +data "coder_parameter" "cores" { + name = "CPU Cores" + type = "number" + icon = "/icon/cpu.svg" + default = 3 + order = 10 +} + +data "coder_parameter" "disk_size" { + name = "Disk Size" + type = "number" + default = "5" + order = 8 + validation { + # This can apply to number. + min = 0 + max = 10 + monotonic = "increasing" + } +} + +data "coder_parameter" "cat_lives" { + name = "Cat Lives" + type = "number" + default = "9" + validation { + # This can apply to number. + min = 0 + max = 10 + monotonic = "decreasing" + } +} + +data "coder_parameter" "fairy_tale" { + name = "Fairy Tale" + type = "string" + mutable = true + default = "Hansel and Gretel" + ephemeral = true +} + +data "coder_parameter" "users" { + name = "system_users" + display_name = "System users" + type = "list(string)" + default = jsonencode(["root", "user1", "user2"]) +} + +data "coder_parameter" "home_volume_size" { + name = "Home Volume Size" + description = <<-EOF + How large should your home volume be? + EOF + type = "number" + default = 30 + mutable = true + order = 3 + + option { + name = "30GB" + value = 30 + } + + option { + name = "60GB" + value = 60 + } + + option { + name = "100GB" + value = 100 + } + + validation { + monotonic = "increasing" + } +} +``` <!-- schema generated by tfplugindocs --> ## Schema From 0c57de0ca53be2f993e6b1bf02ef6323296ad6d1 Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 20:02:47 +0000 Subject: [PATCH 04/11] removed coder agent examples from test --- provider/examples_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/provider/examples_test.go b/provider/examples_test.go index d516493e..8923e14b 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -15,7 +15,6 @@ func TestExamples(t *testing.T) { t.Parallel() for _, testDir := range []string{ - "coder_agent", "coder_workspace_tags", } { t.Run(testDir, func(t *testing.T) { From 3a98b58efe3edcd5a6fbe2a346cc64ca9e98121f Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 20:28:08 +0000 Subject: [PATCH 05/11] attempting data source testing --- provider/examples_test.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/provider/examples_test.go b/provider/examples_test.go index 8923e14b..68a7c3ea 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -14,6 +14,7 @@ import ( func TestExamples(t *testing.T) { t.Parallel() + // Resource examples for _, testDir := range []string{ "coder_workspace_tags", } { @@ -32,6 +33,26 @@ func TestExamples(t *testing.T) { }) }) } + + // Data source examples + for _, testDir := range []string{ + "coder_parameter", + } { + t.Run(testDir, func(t *testing.T) { + testDir := testDir + t.Parallel() + + resource.Test(t, resource.TestCase{ + Providers: map[string]*schema.Provider{ + "coder": provider.New(), + }, + IsUnitTest: true, + Steps: []resource.TestStep{{ + Config: mustReadFile(t, "../examples/data-sources/"+testDir+"/data-source.tf"), + }}, + }) + }) + } } func mustReadFile(t *testing.T, path string) string { From 92f94d7e89baaaf02c5ac8ba6c41317e71c0efff Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 21:02:59 +0000 Subject: [PATCH 06/11] added git auth to test --- examples/data-sources/coder_git_auth/data-source.tf | 3 +-- provider/examples_test.go | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/data-sources/coder_git_auth/data-source.tf b/examples/data-sources/coder_git_auth/data-source.tf index eeed89aa..488554f2 100644 --- a/examples/data-sources/coder_git_auth/data-source.tf +++ b/examples/data-sources/coder_git_auth/data-source.tf @@ -1,5 +1,4 @@ -provider "coder" { -} +provider "coder" {} data "coder_git_auth" "github" { # Matches the ID of the git auth provider in Coder. diff --git a/provider/examples_test.go b/provider/examples_test.go index 68a7c3ea..be72f60a 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -37,6 +37,7 @@ func TestExamples(t *testing.T) { // Data source examples for _, testDir := range []string{ "coder_parameter", + "coder_git_auth" } { t.Run(testDir, func(t *testing.T) { testDir := testDir From 9f4971de07c8ae4576e33f576cfd1f9120405ef5 Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Mon, 24 Jun 2024 21:15:16 +0000 Subject: [PATCH 07/11] reverted git auth test --- provider/examples_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/provider/examples_test.go b/provider/examples_test.go index be72f60a..68a7c3ea 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -37,7 +37,6 @@ func TestExamples(t *testing.T) { // Data source examples for _, testDir := range []string{ "coder_parameter", - "coder_git_auth" } { t.Run(testDir, func(t *testing.T) { testDir := testDir From 763827465384276e24770410e113033107849679 Mon Sep 17 00:00:00 2001 From: Marcin Tojek <marcin@coder.com> Date: Tue, 25 Jun 2024 08:54:33 +0200 Subject: [PATCH 08/11] Refactor examples_test.go --- docs/data-sources/git_auth.md | 3 +- docs/data-sources/workspace_tags.md | 53 +++++++++++++++++++ .../coder_workspace_tags/data-source.tf} | 0 provider/examples_test.go | 43 +++++---------- 4 files changed, 68 insertions(+), 31 deletions(-) rename examples/{resources/coder_workspace_tags/resource.tf => data-sources/coder_workspace_tags/data-source.tf} (100%) diff --git a/docs/data-sources/git_auth.md b/docs/data-sources/git_auth.md index 53e01981..fe64805e 100644 --- a/docs/data-sources/git_auth.md +++ b/docs/data-sources/git_auth.md @@ -13,8 +13,7 @@ Use this data source to require users to authenticate with a Git provider prior ## Example Usage ```terraform -provider "coder" { -} +provider "coder" {} data "coder_git_auth" "github" { # Matches the ID of the git auth provider in Coder. diff --git a/docs/data-sources/workspace_tags.md b/docs/data-sources/workspace_tags.md index 62f72b0f..010adfe3 100644 --- a/docs/data-sources/workspace_tags.md +++ b/docs/data-sources/workspace_tags.md @@ -10,7 +10,60 @@ description: |- Use this data source to configure workspace tags to select provisioners. +## Example Usage +```terraform +provider "coder" {} + +data "coder_parameter" "os_selector" { + name = "os_selector" + display_name = "Operating System" + mutable = false + + default = "osx" + + option { + icon = "/icons/linux.png" + name = "Linux" + value = "linux" + } + option { + icon = "/icons/osx.png" + name = "OSX" + value = "osx" + } + option { + icon = "/icons/windows.png" + name = "Windows" + value = "windows" + } +} + +data "coder_parameter" "feature_cache_enabled" { + name = "feature_cache_enabled" + display_name = "Enable cache?" + type = "bool" + + default = false +} + +data "coder_parameter" "feature_debug_enabled" { + name = "feature_debug_enabled" + display_name = "Enable debug?" + type = "bool" + + default = true +} + +data "coder_workspace_tags" "custom_workspace_tags" { + tags = { + "cluster" = "developers" + "os" = data.coder_parameter.os_selector.value + "debug" = "${data.coder_parameter.feature_debug_enabled.value}+12345" + "cache" = data.coder_parameter.feature_cache_enabled.value == "true" ? "nix-with-cache" : "no-cache" + } +} +``` <!-- schema generated by tfplugindocs --> ## Schema diff --git a/examples/resources/coder_workspace_tags/resource.tf b/examples/data-sources/coder_workspace_tags/data-source.tf similarity index 100% rename from examples/resources/coder_workspace_tags/resource.tf rename to examples/data-sources/coder_workspace_tags/data-source.tf diff --git a/provider/examples_test.go b/provider/examples_test.go index 68a7c3ea..ad9691d2 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -1,6 +1,7 @@ package provider_test import ( + "fmt" "os" "testing" @@ -14,45 +15,29 @@ import ( func TestExamples(t *testing.T) { t.Parallel() - // Resource examples for _, testDir := range []string{ + "coder_parameter", "coder_workspace_tags", } { t.Run(testDir, func(t *testing.T) { testDir := testDir t.Parallel() - resource.Test(t, resource.TestCase{ - Providers: map[string]*schema.Provider{ - "coder": provider.New(), - }, - IsUnitTest: true, - Steps: []resource.TestStep{{ - Config: mustReadFile(t, "../examples/resources/"+testDir+"/resource.tf"), - }}, - }) + resourceTest(t, testDir) }) } +} - // Data source examples - for _, testDir := range []string{ - "coder_parameter", - } { - t.Run(testDir, func(t *testing.T) { - testDir := testDir - t.Parallel() - - resource.Test(t, resource.TestCase{ - Providers: map[string]*schema.Provider{ - "coder": provider.New(), - }, - IsUnitTest: true, - Steps: []resource.TestStep{{ - Config: mustReadFile(t, "../examples/data-sources/"+testDir+"/data-source.tf"), - }}, - }) - }) - } +func resourceTest(t *testing.T, testDir string) { + resource.Test(t, resource.TestCase{ + Providers: map[string]*schema.Provider{ + "coder": provider.New(), + }, + IsUnitTest: true, + Steps: []resource.TestStep{{ + Config: mustReadFile(t, fmt.Sprintf("../examples/data-sources/%s/data-source.tf", testDir)), + }}, + }) } func mustReadFile(t *testing.T, path string) string { From 6849c9dd84e5eb5dff9760f85446f88cd3fbd362 Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Tue, 25 Jun 2024 16:57:03 +0000 Subject: [PATCH 09/11] took a stab at expanding example test --- provider/examples_test.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/provider/examples_test.go b/provider/examples_test.go index ad9691d2..275923c6 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -12,30 +12,36 @@ import ( "github.com/coder/terraform-provider-coder/provider" ) +type ResourceTestData struct { + Name string + ResourceType string +} + func TestExamples(t *testing.T) { t.Parallel() - for _, testDir := range []string{ - "coder_parameter", - "coder_workspace_tags", + for _, resourceTestData := range []ResourceTestData{ + {"coder_parameter", "data-source"}, + {"coder_workspace_tags", "data-source"}, + {"coder_app", "resource"} } { - t.Run(testDir, func(t *testing.T) { - testDir := testDir + t.Run(resourceTestData.Name, func(t *testing.T) { + resourceTestData := resourceTestData t.Parallel() - resourceTest(t, testDir) + resourceTest(t, resourceTestData) }) } } -func resourceTest(t *testing.T, testDir string) { +func resourceTest(t *testing.T, testData ResourceTestData) { resource.Test(t, resource.TestCase{ Providers: map[string]*schema.Provider{ "coder": provider.New(), }, IsUnitTest: true, Steps: []resource.TestStep{{ - Config: mustReadFile(t, fmt.Sprintf("../examples/data-sources/%s/data-source.tf", testDir)), + Config: mustReadFile(t, fmt.Sprintf("../examples/%ss/%s/%s.tf", testData.ResourceType, testData.Name, testData.ResourceType)), }}, }) } From e8c7f5d020444245315cd9a159906a6409bd032c Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Tue, 25 Jun 2024 16:58:52 +0000 Subject: [PATCH 10/11] added provider to coder_ap --- examples/resources/coder_app/resource.tf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/resources/coder_app/resource.tf b/examples/resources/coder_app/resource.tf index 9345dfc5..bd9a7d11 100644 --- a/examples/resources/coder_app/resource.tf +++ b/examples/resources/coder_app/resource.tf @@ -1,3 +1,5 @@ +provider "coder" {} + data "coder_workspace" "me" {} resource "coder_agent" "dev" { From 2b60300c0cc9297932ac3e0f340ad8bd14c4577b Mon Sep 17 00:00:00 2001 From: Stephen Kirby <me@skirby.dev> Date: Tue, 25 Jun 2024 17:05:56 +0000 Subject: [PATCH 11/11] manually reverted test changes --- examples/resources/coder_app/resource.tf | 2 -- provider/examples_test.go | 23 ++++++++--------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/examples/resources/coder_app/resource.tf b/examples/resources/coder_app/resource.tf index bd9a7d11..9345dfc5 100644 --- a/examples/resources/coder_app/resource.tf +++ b/examples/resources/coder_app/resource.tf @@ -1,5 +1,3 @@ -provider "coder" {} - data "coder_workspace" "me" {} resource "coder_agent" "dev" { diff --git a/provider/examples_test.go b/provider/examples_test.go index 275923c6..ab68954b 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -8,40 +8,33 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/stretchr/testify/require" - "github.com/coder/terraform-provider-coder/provider" ) -type ResourceTestData struct { - Name string - ResourceType string -} - func TestExamples(t *testing.T) { t.Parallel() - for _, resourceTestData := range []ResourceTestData{ - {"coder_parameter", "data-source"}, - {"coder_workspace_tags", "data-source"}, - {"coder_app", "resource"} + for _, testDir := range []string{ + "coder_parameter", + "coder_workspace_tags", } { - t.Run(resourceTestData.Name, func(t *testing.T) { - resourceTestData := resourceTestData + t.Run(testDir, func(t *testing.T) { + testDir := testDir t.Parallel() - resourceTest(t, resourceTestData) + resourceTest(t, testDir) }) } } -func resourceTest(t *testing.T, testData ResourceTestData) { +func resourceTest(t *testing.T, testDir string) { resource.Test(t, resource.TestCase{ Providers: map[string]*schema.Provider{ "coder": provider.New(), }, IsUnitTest: true, Steps: []resource.TestStep{{ - Config: mustReadFile(t, fmt.Sprintf("../examples/%ss/%s/%s.tf", testData.ResourceType, testData.Name, testData.ResourceType)), + Config: mustReadFile(t, fmt.Sprintf("../examples/data-sources/%s/data-source.tf", testDir)), }}, }) }