Skip to content

Commit ab54008

Browse files
authored
feat: make ephemeral parameters optional (coder#8571)
1 parent 7d92537 commit ab54008

File tree

9 files changed

+15
-107
lines changed

9 files changed

+15
-107
lines changed

cli/create.go

-5
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ func (r *RootCmd) create() *clibase.Cmd {
2323
startAt string
2424
stopAfter time.Duration
2525
workspaceName string
26-
27-
parameterFlags workspaceParameterFlags
2826
)
2927
client := new(codersdk.Client)
3028
cmd := &clibase.Cmd{
@@ -135,7 +133,6 @@ func (r *RootCmd) create() *clibase.Cmd {
135133
Template: template,
136134
RichParameterFile: richParameterFile,
137135
NewWorkspaceName: workspaceName,
138-
BuildOptions: parameterFlags.buildOptions,
139136
})
140137
if err != nil {
141138
return xerrors.Errorf("prepare build: %w", err)
@@ -204,8 +201,6 @@ func (r *RootCmd) create() *clibase.Cmd {
204201
},
205202
cliui.SkipPromptOption(),
206203
)
207-
cmd.Options = append(cmd.Options, parameterFlags.options()...)
208-
209204
return cmd
210205
}
211206

cli/create_test.go

-59
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,6 @@ func TestCreateWithRichParameters(t *testing.T) {
252252
secondParameterDescription = "This is second parameter"
253253
secondParameterValue = "2"
254254

255-
ephemeralParameterName = "ephemeral_parameter"
256-
ephemeralParameterDescription = "This is ephemeral parameter"
257-
ephemeralParameterValue = "3"
258-
259255
immutableParameterName = "third_parameter"
260256
immutableParameterDescription = "This is not mutable parameter"
261257
immutableParameterValue = "4"
@@ -270,7 +266,6 @@ func TestCreateWithRichParameters(t *testing.T) {
270266
Parameters: []*proto.RichParameter{
271267
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
272268
{Name: secondParameterName, DisplayName: secondParameterDisplayName, Description: secondParameterDescription, Mutable: true},
273-
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
274269
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
275270
},
276271
},
@@ -362,60 +357,6 @@ func TestCreateWithRichParameters(t *testing.T) {
362357
}
363358
<-doneChan
364359
})
365-
366-
t.Run("BuildOptions", func(t *testing.T) {
367-
t.Parallel()
368-
369-
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
370-
user := coderdtest.CreateFirstUser(t, client)
371-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, echoResponses)
372-
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
373-
374-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
375-
376-
const workspaceName = "my-workspace"
377-
inv, root := clitest.New(t, "create", workspaceName, "--template", template.Name, "--build-options")
378-
clitest.SetupConfig(t, client, root)
379-
doneChan := make(chan struct{})
380-
pty := ptytest.New(t).Attach(inv)
381-
go func() {
382-
defer close(doneChan)
383-
err := inv.Run()
384-
assert.NoError(t, err)
385-
}()
386-
387-
matches := []string{
388-
ephemeralParameterDescription, ephemeralParameterValue,
389-
firstParameterDescription, firstParameterValue,
390-
secondParameterDisplayName, "",
391-
secondParameterDescription, secondParameterValue,
392-
immutableParameterDescription, immutableParameterValue,
393-
"Confirm create?", "yes",
394-
}
395-
for i := 0; i < len(matches); i += 2 {
396-
match := matches[i]
397-
value := matches[i+1]
398-
pty.ExpectMatch(match)
399-
400-
if value != "" {
401-
pty.WriteLine(value)
402-
}
403-
}
404-
<-doneChan
405-
406-
// Verify if build option is set
407-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
408-
defer cancel()
409-
410-
workspace, err := client.WorkspaceByOwnerAndName(ctx, user.UserID.String(), workspaceName, codersdk.WorkspaceOptions{})
411-
require.NoError(t, err)
412-
actualParameters, err := client.WorkspaceBuildParameters(ctx, workspace.LatestBuild.ID)
413-
require.NoError(t, err)
414-
require.Contains(t, actualParameters, codersdk.WorkspaceBuildParameter{
415-
Name: ephemeralParameterName,
416-
Value: ephemeralParameterValue,
417-
})
418-
})
419360
}
420361

421362
func TestCreateValidateRichParameters(t *testing.T) {

cli/start.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/coder/coder/codersdk"
1212
)
1313

14-
// workspaceParameterFlags are used by "start", "restart", "create", and "update".
14+
// workspaceParameterFlags are used by "start", "restart", and "update".
1515
type workspaceParameterFlags struct {
1616
buildOptions bool
1717
}

cli/testdata/coder_create_--help.golden

-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ Create a workspace
77
 $ coder create <username>/<workspace_name> 
88

99
Options
10-
--build-options bool
11-
Prompt for one-time build options defined with ephemeral parameters.
12-
1310
--rich-parameter-file string, $CODER_RICH_PARAMETER_FILE
1411
Specify a file path with values for rich parameters defined in the
1512
template.

codersdk/richparameters_test.go

+10-28
Original file line numberDiff line numberDiff line change
@@ -315,11 +315,11 @@ func TestParameterResolver_ValidateResolve_Ephemeral_OverridePrevious(t *testing
315315
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "5"}},
316316
}
317317
p := codersdk.TemplateVersionParameter{
318-
Name: "n",
319-
Type: "number",
320-
Mutable: true,
321-
Required: true,
322-
Ephemeral: true,
318+
Name: "n",
319+
Type: "number",
320+
Mutable: true,
321+
DefaultValue: "4",
322+
Ephemeral: true,
323323
}
324324
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
325325
Name: "n",
@@ -333,11 +333,11 @@ func TestParameterResolver_ValidateResolve_Ephemeral_FirstTime(t *testing.T) {
333333
t.Parallel()
334334
uut := codersdk.ParameterResolver{}
335335
p := codersdk.TemplateVersionParameter{
336-
Name: "n",
337-
Type: "number",
338-
Mutable: true,
339-
Required: true,
340-
Ephemeral: true,
336+
Name: "n",
337+
Type: "number",
338+
Mutable: true,
339+
DefaultValue: "5",
340+
Ephemeral: true,
341341
}
342342
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
343343
Name: "n",
@@ -376,21 +376,3 @@ func TestParameterResolver_ValidateResolve_Ephemeral_UseEmptyDefault(t *testing.
376376
require.NoError(t, err)
377377
require.Equal(t, "", v)
378378
}
379-
380-
func TestParameterResolver_ValidateResolve_Ephemeral_RequiredButMissing(t *testing.T) {
381-
t.Parallel()
382-
uut := codersdk.ParameterResolver{}
383-
p := codersdk.TemplateVersionParameter{
384-
Name: "n",
385-
Type: "number",
386-
Mutable: true,
387-
Required: true,
388-
Ephemeral: true,
389-
}
390-
// It is more theoretical than practical case. Schema allows to configure a parameter,
391-
// which always requires from initiator to provide the value, but it is not persisted between
392-
// consecutive workspace builds.
393-
v, err := uut.ValidateResolve(p, nil)
394-
require.Error(t, err) // Parameter is required, but not provided.
395-
require.Equal(t, "", v)
396-
}

docs/cli/create.md

-8
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,6 @@ coder create [flags] [name]
2020

2121
## Options
2222

23-
### --build-options
24-
25-
| | |
26-
| ---- | ----------------- |
27-
| Type | <code>bool</code> |
28-
29-
Prompt for one-time build options defined with ephemeral parameters.
30-
3123
### --rich-parameter-file
3224

3325
| | |

docs/templates/parameters.md

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ data "coder_parameter" "force_rebuild" {
163163
type = "bool"
164164
description = "Rebuild the Docker image rather than use the cached one."
165165
mutable = true
166+
default = false
166167
ephemeral = true
167168
}
168169
```

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ require (
8585
github.com/codeclysm/extract/v3 v3.1.1
8686
github.com/coder/flog v1.1.0
8787
github.com/coder/retry v1.4.0
88-
github.com/coder/terraform-provider-coder v0.11.0
88+
github.com/coder/terraform-provider-coder v0.11.1
8989
github.com/coder/wgtunnel v0.1.5
9090
github.com/coreos/go-oidc/v3 v3.6.0
9191
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ github.com/coder/ssh v0.0.0-20230621095435-9a7e23486f1c h1:TI7TzdFI0UvQmwgyQhtI1
196196
github.com/coder/ssh v0.0.0-20230621095435-9a7e23486f1c/go.mod h1:aGQbuCLyhRLMzZF067xc84Lh7JDs1FKwCmF1Crl9dxQ=
197197
github.com/coder/tailscale v0.0.0-20230522123520-74712221d00f h1:F0Xr1d8h8dAHn7tab1HXuzYFkcjmCydnEfdMbkOhlVk=
198198
github.com/coder/tailscale v0.0.0-20230522123520-74712221d00f/go.mod h1:jpg+77g19FpXL43U1VoIqoSg1K/Vh5CVxycGldQ8KhA=
199-
github.com/coder/terraform-provider-coder v0.11.0 h1:/swgVstwRaj12S/iHIA3zxFKSSQj+ohZZyb4CZQ7f4A=
200-
github.com/coder/terraform-provider-coder v0.11.0/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
199+
github.com/coder/terraform-provider-coder v0.11.1 h1:1sXcHfQrX8XhmLbtKxBED2lZ5jk3/ezBtaw6uVhpJZ4=
200+
github.com/coder/terraform-provider-coder v0.11.1/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
201201
github.com/coder/wgtunnel v0.1.5 h1:WP3sCj/3iJ34eKvpMQEp1oJHvm24RYh0NHbj1kfUKfs=
202202
github.com/coder/wgtunnel v0.1.5/go.mod h1:bokoUrHnUFY4lu9KOeSYiIcHTI2MO1KwqumU4DPDyJI=
203203
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=

0 commit comments

Comments
 (0)