mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: claim prebuilds based on workspace parameters instead of preset id (#19279)
Closes https://github.com/coder/coder/issues/18356. This change finds and selects a matching preset if one was not chosen during workspace creation. This solidifies the relationship between presets and parameters. When a workspace is created without in explicitly chosen preset, it will now still be eligible to claim a prebuilt workspace if one is available.
This commit is contained in:
@@ -1638,6 +1638,8 @@ func TestPostWorkspaceBuild(t *testing.T) {
|
||||
|
||||
t.Run("SetsPresetID", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitLong)
|
||||
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
|
||||
@@ -1645,9 +1647,20 @@ func TestPostWorkspaceBuild(t *testing.T) {
|
||||
ProvisionPlan: []*proto.Response{{
|
||||
Type: &proto.Response_Plan{
|
||||
Plan: &proto.PlanComplete{
|
||||
Presets: []*proto.Preset{{
|
||||
Name: "test",
|
||||
}},
|
||||
Presets: []*proto.Preset{
|
||||
{
|
||||
Name: "autodetected",
|
||||
},
|
||||
{
|
||||
Name: "manual",
|
||||
Parameters: []*proto.PresetParameter{
|
||||
{
|
||||
Name: "param1",
|
||||
Value: "value1",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}},
|
||||
@@ -1655,28 +1668,29 @@ func TestPostWorkspaceBuild(t *testing.T) {
|
||||
})
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||
workspace := coderdtest.CreateWorkspace(t, client, template.ID)
|
||||
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
|
||||
require.Nil(t, workspace.LatestBuild.TemplateVersionPresetID)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
|
||||
presets, err := client.TemplateVersionPresets(ctx, version.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, len(presets))
|
||||
require.Equal(t, "test", presets[0].Name)
|
||||
require.Equal(t, 2, len(presets))
|
||||
require.Equal(t, "autodetected", presets[0].Name)
|
||||
require.Equal(t, "manual", presets[1].Name)
|
||||
|
||||
workspace := coderdtest.CreateWorkspace(t, client, template.ID)
|
||||
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
|
||||
// Preset ID was detected based on the workspace parameters:
|
||||
require.Equal(t, presets[0].ID, *workspace.LatestBuild.TemplateVersionPresetID)
|
||||
|
||||
build, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
|
||||
TemplateVersionID: version.ID,
|
||||
Transition: codersdk.WorkspaceTransitionStart,
|
||||
TemplateVersionPresetID: presets[0].ID,
|
||||
TemplateVersionPresetID: presets[1].ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, build.TemplateVersionPresetID)
|
||||
|
||||
workspace, err = client.Workspace(ctx, workspace.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, presets[1].ID, *workspace.LatestBuild.TemplateVersionPresetID)
|
||||
require.Equal(t, build.TemplateVersionPresetID, workspace.LatestBuild.TemplateVersionPresetID)
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user