From 895230770dab2182dfa5fffdcd40e77d857293e5 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Tue, 4 Jul 2023 16:33:59 +0200 Subject: [PATCH 1/2] feat: add `prompt_user` to coder parameter --- docs/data-sources/parameter.md | 1 + examples/resources/coder_parameter/resource.tf | 1 + provider/decode_test.go | 3 +++ provider/parameter.go | 12 ++++++++++-- provider/parameter_test.go | 2 ++ 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/data-sources/parameter.md b/docs/data-sources/parameter.md index 180a7d7b..68360652 100644 --- a/docs/data-sources/parameter.md +++ b/docs/data-sources/parameter.md @@ -30,6 +30,7 @@ Use this data source to configure editable options for workspaces. - `mutable` (Boolean) Whether this value can be changed after workspace creation. This can be destructive for values like region, so use with caution! - `option` (Block List, Max: 64) Each "option" block defines a value for a user to select from. (see [below for nested schema](#nestedblock--option)) - `order` (Number) The order determines the position of a template parameter in the UI/CLI presentation. The lowest order is shown first and parameters with equal order are sorted by name (ascending order). +- `prompt_user` (String) Prompt user for the parameter value. Coder will not persist it between workspace builds. - `type` (String) The type of this parameter. Must be one of: "number", "string", "bool", or "list(string)". - `validation` (Block List, Max: 1) Validate the input of a parameter. (see [below for nested schema](#nestedblock--validation)) diff --git a/examples/resources/coder_parameter/resource.tf b/examples/resources/coder_parameter/resource.tf index 15b747c4..513cfec4 100644 --- a/examples/resources/coder_parameter/resource.tf +++ b/examples/resources/coder_parameter/resource.tf @@ -76,6 +76,7 @@ data "coder_parameter" "cat_lives" { data "coder_parameter" "fairy_tale" { name = "Fairy Tale" type = "string" + prompt_user = "always" } data "coder_parameter" "users" { diff --git a/provider/decode_test.go b/provider/decode_test.go index de56922c..16479cb7 100644 --- a/provider/decode_test.go +++ b/provider/decode_test.go @@ -14,6 +14,7 @@ func TestDecode(t *testing.T) { const ( legacyVariable = "Legacy Variable" legacyVariableName = "Legacy Variable Name" + promptUserAlways = "always" displayName = "Display Name" ) @@ -32,6 +33,7 @@ func TestDecode(t *testing.T) { "max_disabled": true, }, }, + "prompt_user": promptUserAlways, } var param provider.Parameter @@ -44,4 +46,5 @@ func TestDecode(t *testing.T) { assert.True(t, param.Validation[0].MaxDisabled) assert.Equal(t, 0, param.Validation[0].Min) assert.False(t, param.Validation[0].MinDisabled) + assert.Equal(t, promptUserAlways, param.PromptUser) } diff --git a/provider/parameter.go b/provider/parameter.go index e8cfd4c6..b9546123 100644 --- a/provider/parameter.go +++ b/provider/parameter.go @@ -56,8 +56,8 @@ type Parameter struct { Option []Option Validation []Validation Optional bool - - Order int + Order int + PromptUser string `mapstructure:"prompt_user"` LegacyVariableName string `mapstructure:"legacy_variable_name"` LegacyVariable string `mapstructure:"legacy_variable"` @@ -93,6 +93,7 @@ func parameterDataSource() *schema.Resource { Validation interface{} Optional interface{} Order interface{} + PromptUser interface{} LegacyVariableName interface{} LegacyVariable interface{} @@ -126,6 +127,7 @@ func parameterDataSource() *schema.Resource { return val }(), Order: rd.Get("order"), + PromptUser: rd.Get("prompt_user"), LegacyVariableName: rd.Get("legacy_variable_name"), LegacyVariable: rd.Get("legacy_variable"), }, ¶meter) @@ -340,6 +342,12 @@ func parameterDataSource() *schema.Resource { Optional: true, Description: "The order determines the position of a template parameter in the UI/CLI presentation. The lowest order is shown first and parameters with equal order are sorted by name (ascending order).", }, + "prompt_user": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice([]string{"always"}, false), + Description: "Prompt user for the parameter value. Coder will not persist it between workspace builds.", + }, "legacy_variable_name": { Type: schema.TypeString, Optional: true, diff --git a/provider/parameter_test.go b/provider/parameter_test.go index f591eeff..670de0be 100644 --- a/provider/parameter_test.go +++ b/provider/parameter_test.go @@ -44,6 +44,7 @@ func TestParameter(t *testing.T) { description = "Select for east!" } order = 5 + prompt_user = "always" } `, Check: func(state *terraform.ResourceState) { @@ -64,6 +65,7 @@ func TestParameter(t *testing.T) { "option.1.icon": "/icon/east.svg", "option.1.description": "Select for east!", "order": "5", + "prompt_user": "always", } { require.Equal(t, value, attrs[key]) } From 80bbce3c77991db32a3ce8ddc57219a76c93d90f Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Tue, 4 Jul 2023 16:37:50 +0200 Subject: [PATCH 2/2] fmt --- examples/resources/coder_parameter/resource.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/resources/coder_parameter/resource.tf b/examples/resources/coder_parameter/resource.tf index 513cfec4..5d708c09 100644 --- a/examples/resources/coder_parameter/resource.tf +++ b/examples/resources/coder_parameter/resource.tf @@ -74,8 +74,8 @@ data "coder_parameter" "cat_lives" { } data "coder_parameter" "fairy_tale" { - name = "Fairy Tale" - type = "string" + name = "Fairy Tale" + type = "string" prompt_user = "always" }