feat: make ephemeral parameters optional (#8571)

This commit is contained in:
Marcin Tojek
2023-07-18 11:56:41 +02:00
committed by GitHub
parent 7d92537af5
commit ab54008c94
9 changed files with 15 additions and 107 deletions

View File

@ -23,8 +23,6 @@ func (r *RootCmd) create() *clibase.Cmd {
startAt string
stopAfter time.Duration
workspaceName string
parameterFlags workspaceParameterFlags
)
client := new(codersdk.Client)
cmd := &clibase.Cmd{
@ -135,7 +133,6 @@ func (r *RootCmd) create() *clibase.Cmd {
Template: template,
RichParameterFile: richParameterFile,
NewWorkspaceName: workspaceName,
BuildOptions: parameterFlags.buildOptions,
})
if err != nil {
return xerrors.Errorf("prepare build: %w", err)
@ -204,8 +201,6 @@ func (r *RootCmd) create() *clibase.Cmd {
},
cliui.SkipPromptOption(),
)
cmd.Options = append(cmd.Options, parameterFlags.options()...)
return cmd
}

View File

@ -252,10 +252,6 @@ func TestCreateWithRichParameters(t *testing.T) {
secondParameterDescription = "This is second parameter"
secondParameterValue = "2"
ephemeralParameterName = "ephemeral_parameter"
ephemeralParameterDescription = "This is ephemeral parameter"
ephemeralParameterValue = "3"
immutableParameterName = "third_parameter"
immutableParameterDescription = "This is not mutable parameter"
immutableParameterValue = "4"
@ -270,7 +266,6 @@ func TestCreateWithRichParameters(t *testing.T) {
Parameters: []*proto.RichParameter{
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
{Name: secondParameterName, DisplayName: secondParameterDisplayName, Description: secondParameterDescription, Mutable: true},
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
},
},
@ -362,60 +357,6 @@ func TestCreateWithRichParameters(t *testing.T) {
}
<-doneChan
})
t.Run("BuildOptions", func(t *testing.T) {
t.Parallel()
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, echoResponses)
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
const workspaceName = "my-workspace"
inv, root := clitest.New(t, "create", workspaceName, "--template", template.Name, "--build-options")
clitest.SetupConfig(t, client, root)
doneChan := make(chan struct{})
pty := ptytest.New(t).Attach(inv)
go func() {
defer close(doneChan)
err := inv.Run()
assert.NoError(t, err)
}()
matches := []string{
ephemeralParameterDescription, ephemeralParameterValue,
firstParameterDescription, firstParameterValue,
secondParameterDisplayName, "",
secondParameterDescription, secondParameterValue,
immutableParameterDescription, immutableParameterValue,
"Confirm create?", "yes",
}
for i := 0; i < len(matches); i += 2 {
match := matches[i]
value := matches[i+1]
pty.ExpectMatch(match)
if value != "" {
pty.WriteLine(value)
}
}
<-doneChan
// Verify if build option is set
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
defer cancel()
workspace, err := client.WorkspaceByOwnerAndName(ctx, user.UserID.String(), workspaceName, codersdk.WorkspaceOptions{})
require.NoError(t, err)
actualParameters, err := client.WorkspaceBuildParameters(ctx, workspace.LatestBuild.ID)
require.NoError(t, err)
require.Contains(t, actualParameters, codersdk.WorkspaceBuildParameter{
Name: ephemeralParameterName,
Value: ephemeralParameterValue,
})
})
}
func TestCreateValidateRichParameters(t *testing.T) {

View File

@ -11,7 +11,7 @@ import (
"github.com/coder/coder/codersdk"
)
// workspaceParameterFlags are used by "start", "restart", "create", and "update".
// workspaceParameterFlags are used by "start", "restart", and "update".
type workspaceParameterFlags struct {
buildOptions bool
}

View File

@ -7,9 +7,6 @@ Create a workspace
 $ coder create <username>/<workspace_name> 
Options
--build-options bool
Prompt for one-time build options defined with ephemeral parameters.
--rich-parameter-file string, $CODER_RICH_PARAMETER_FILE
Specify a file path with values for rich parameters defined in the
template.

View File

@ -315,11 +315,11 @@ func TestParameterResolver_ValidateResolve_Ephemeral_OverridePrevious(t *testing
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "5"}},
}
p := codersdk.TemplateVersionParameter{
Name: "n",
Type: "number",
Mutable: true,
Required: true,
Ephemeral: true,
Name: "n",
Type: "number",
Mutable: true,
DefaultValue: "4",
Ephemeral: true,
}
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
Name: "n",
@ -333,11 +333,11 @@ func TestParameterResolver_ValidateResolve_Ephemeral_FirstTime(t *testing.T) {
t.Parallel()
uut := codersdk.ParameterResolver{}
p := codersdk.TemplateVersionParameter{
Name: "n",
Type: "number",
Mutable: true,
Required: true,
Ephemeral: true,
Name: "n",
Type: "number",
Mutable: true,
DefaultValue: "5",
Ephemeral: true,
}
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
Name: "n",
@ -376,21 +376,3 @@ func TestParameterResolver_ValidateResolve_Ephemeral_UseEmptyDefault(t *testing.
require.NoError(t, err)
require.Equal(t, "", v)
}
func TestParameterResolver_ValidateResolve_Ephemeral_RequiredButMissing(t *testing.T) {
t.Parallel()
uut := codersdk.ParameterResolver{}
p := codersdk.TemplateVersionParameter{
Name: "n",
Type: "number",
Mutable: true,
Required: true,
Ephemeral: true,
}
// It is more theoretical than practical case. Schema allows to configure a parameter,
// which always requires from initiator to provide the value, but it is not persisted between
// consecutive workspace builds.
v, err := uut.ValidateResolve(p, nil)
require.Error(t, err) // Parameter is required, but not provided.
require.Equal(t, "", v)
}

View File

@ -20,14 +20,6 @@ coder create [flags] [name]
## Options
### --build-options
| | |
| ---- | ----------------- |
| Type | <code>bool</code> |
Prompt for one-time build options defined with ephemeral parameters.
### --rich-parameter-file
| | |

View File

@ -163,6 +163,7 @@ data "coder_parameter" "force_rebuild" {
type = "bool"
description = "Rebuild the Docker image rather than use the cached one."
mutable = true
default = false
ephemeral = true
}
```

2
go.mod
View File

@ -85,7 +85,7 @@ require (
github.com/codeclysm/extract/v3 v3.1.1
github.com/coder/flog v1.1.0
github.com/coder/retry v1.4.0
github.com/coder/terraform-provider-coder v0.11.0
github.com/coder/terraform-provider-coder v0.11.1
github.com/coder/wgtunnel v0.1.5
github.com/coreos/go-oidc/v3 v3.6.0
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf

4
go.sum
View File

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