Skip to content

Commit 1320b8d

Browse files
jaaydenhEmyrkblink-so[bot]
authored
feat: make dynamic parameters opt-in by default for new templates (#19006)
resolves #18975 --------- Co-authored-by: Steven Masley <stevenmasley@gmail.com> Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com>
1 parent faac753 commit 1320b8d

35 files changed

+476
-91
lines changed

cli/restart.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,17 @@ func (r *RootCmd) restart() *serpent.Command {
5151
return err
5252
}
5353

54+
stopParamValues, err := asWorkspaceBuildParameters(parameterFlags.ephemeralParameters)
55+
if err != nil {
56+
return xerrors.Errorf("parse ephemeral parameters: %w", err)
57+
}
5458
wbr := codersdk.CreateWorkspaceBuildRequest{
5559
Transition: codersdk.WorkspaceTransitionStop,
60+
// Ephemeral parameters should be passed to both stop and start builds.
61+
// TODO: maybe these values should be sourced from the previous build?
62+
// It has to be manually sourced, as ephemeral parameters do not carry across
63+
// builds.
64+
RichParameterValues: stopParamValues,
5665
}
5766
if bflags.provisionerLogDebug {
5867
wbr.LogLevel = codersdk.ProvisionerLogLevelDebug

cli/restart_test.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/coder/coder/v2/cli/clitest"
1212
"github.com/coder/coder/v2/coderd/coderdtest"
13+
"github.com/coder/coder/v2/coderd/util/ptr"
1314
"github.com/coder/coder/v2/codersdk"
1415
"github.com/coder/coder/v2/provisioner/echo"
1516
"github.com/coder/coder/v2/provisionersdk/proto"
@@ -70,8 +71,14 @@ func TestRestart(t *testing.T) {
7071
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
7172
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
7273
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
73-
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
74-
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
74+
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(request *codersdk.CreateTemplateRequest) {
75+
request.UseClassicParameterFlow = ptr.Ref(true) // TODO: Remove when dynamic parameters prompt missing ephemeral parameters.
76+
})
77+
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(request *codersdk.CreateWorkspaceRequest) {
78+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
79+
{Name: ephemeralParameterName, Value: "placeholder"},
80+
}
81+
})
7582
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
7683

7784
inv, root := clitest.New(t, "restart", workspace.Name, "--prompt-ephemeral-parameters")
@@ -125,7 +132,11 @@ func TestRestart(t *testing.T) {
125132
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
126133
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
127134
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
128-
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
135+
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(request *codersdk.CreateWorkspaceRequest) {
136+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
137+
{Name: ephemeralParameterName, Value: "placeholder"},
138+
}
139+
})
129140
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
130141

131142
inv, root := clitest.New(t, "restart", workspace.Name,
@@ -178,8 +189,14 @@ func TestRestart(t *testing.T) {
178189
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
179190
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
180191
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
181-
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
182-
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
192+
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(request *codersdk.CreateTemplateRequest) {
193+
request.UseClassicParameterFlow = ptr.Ref(true) // TODO: Remove when dynamic parameters prompts missing ephemeral parameters
194+
})
195+
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(request *codersdk.CreateWorkspaceRequest) {
196+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
197+
{Name: ephemeralParameterName, Value: "placeholder"},
198+
}
199+
})
183200
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
184201

185202
inv, root := clitest.New(t, "restart", workspace.Name, "--build-options")
@@ -233,7 +250,11 @@ func TestRestart(t *testing.T) {
233250
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
234251
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
235252
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
236-
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
253+
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(request *codersdk.CreateWorkspaceRequest) {
254+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
255+
{Name: ephemeralParameterName, Value: "placeholder"},
256+
}
257+
})
237258
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
238259

239260
inv, root := clitest.New(t, "restart", workspace.Name,

cli/start_test.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,18 @@ func TestStart(t *testing.T) {
113113
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
114114
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
115115
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
116-
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
116+
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(request *codersdk.CreateWorkspaceRequest) {
117+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
118+
{Name: ephemeralParameterName, Value: "foo"}, // Value is required, set it to something
119+
}
120+
})
117121
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
118122
// Stop the workspace
119-
workspaceBuild := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStop)
123+
workspaceBuild := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStop, func(request *codersdk.CreateWorkspaceBuildRequest) {
124+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
125+
{Name: ephemeralParameterName, Value: "foo"}, // Value is required, set it to something
126+
}
127+
})
120128
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspaceBuild.ID)
121129

122130
inv, root := clitest.New(t, "start", workspace.Name, "--prompt-ephemeral-parameters")
@@ -167,10 +175,18 @@ func TestStart(t *testing.T) {
167175
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
168176
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
169177
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
170-
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
178+
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(request *codersdk.CreateWorkspaceRequest) {
179+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
180+
{Name: ephemeralParameterName, Value: "foo"}, // Value is required, set it to something
181+
}
182+
})
171183
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
172184
// Stop the workspace
173-
workspaceBuild := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStop)
185+
workspaceBuild := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStop, func(request *codersdk.CreateWorkspaceBuildRequest) {
186+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
187+
{Name: ephemeralParameterName, Value: "foo"}, // Value is required, set it to something
188+
}
189+
})
174190
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspaceBuild.ID)
175191

176192
inv, root := clitest.New(t, "start", workspace.Name,

cli/templatepush_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ func TestTemplatePush(t *testing.T) {
509509
default = "1"
510510
}
511511
data "coder_parameter" "b" {
512+
name = "b"
512513
type = string
513514
default = "2"
514515
}

cli/testdata/coder_list_--output_json.golden

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"template_allow_user_cancel_workspace_jobs": false,
1616
"template_active_version_id": "============[version ID]============",
1717
"template_require_active_version": false,
18-
"template_use_classic_parameter_flow": true,
18+
"template_use_classic_parameter_flow": false,
1919
"latest_build": {
2020
"id": "========[workspace build ID]========",
2121
"created_at": "====[timestamp]=====",

cli/update_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
182182
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
183183
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
184184
{Name: secondParameterName, Description: secondParameterDescription, Mutable: true},
185-
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
185+
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true, DefaultValue: "unset"},
186186
})
187187
}
188188

@@ -811,7 +811,9 @@ func TestUpdateValidateRichParameters(t *testing.T) {
811811
}
812812
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, prepareEchoResponses(templateParameters))
813813
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
814-
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
814+
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(request *codersdk.CreateTemplateRequest) {
815+
request.UseClassicParameterFlow = ptr.Ref(true) // TODO: Remove when dynamic parameters can pass this test
816+
})
815817

816818
// Create new workspace
817819
inv, root := clitest.New(t, "create", "my-workspace", "--yes", "--template", template.Name, "--parameter", fmt.Sprintf("%s=%s", numberParameterName, tempVal))

coderd/database/dbgen/dbgen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func Template(t testing.TB, db database.Store, seed database.Template) database.
147147
DisplayName: takeFirst(seed.DisplayName, testutil.GetRandomName(t)),
148148
AllowUserCancelWorkspaceJobs: seed.AllowUserCancelWorkspaceJobs,
149149
MaxPortSharingLevel: takeFirst(seed.MaxPortSharingLevel, database.AppSharingLevelOwner),
150-
UseClassicParameterFlow: takeFirst(seed.UseClassicParameterFlow, true),
150+
UseClassicParameterFlow: takeFirst(seed.UseClassicParameterFlow, false),
151151
})
152152
require.NoError(t, err, "insert template")
153153

coderd/database/dump.sql

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE templates ALTER COLUMN use_classic_parameter_flow SET DEFAULT true;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE templates ALTER COLUMN use_classic_parameter_flow SET DEFAULT false;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy