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/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 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/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/examples/resources/coder_parameter/resource.tf b/examples/data-sources/coder_parameter/data-source.tf similarity index 100% rename from examples/resources/coder_parameter/resource.tf rename to examples/data-sources/coder_parameter/data-source.tf 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 6fa73d21..ab68954b 100644 --- a/provider/examples_test.go +++ b/provider/examples_test.go @@ -1,13 +1,13 @@ package provider_test import ( + "fmt" "os" "testing" "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" ) @@ -22,19 +22,23 @@ func TestExamples(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) }) } } +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 { content, err := os.ReadFile(path) require.NoError(t, err)