Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat(coderd): support ephemeral parameters#8367

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
mtojek merged 23 commits intomainfrom6828-support-ephemeral-parameters
Jul 10, 2023
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
23 commits
Select commitHold shift + click to select a range
ef50c35
WIP
mtojekJul 7, 2023
de38911
WIP2
mtojekJul 7, 2023
3239d07
Merge branch 'main' into 6828-support-ephemeral-parameters
mtojekJul 7, 2023
469fcc2
fix
mtojekJul 7, 2023
712519f
fix
mtojekJul 7, 2023
ec04dc5
cleanup
mtojekJul 7, 2023
f1f3a0a
Refs to ephemeral
mtojekJul 7, 2023
533dde3
fix: frontend
mtojekJul 7, 2023
97df39f
fmt
mtojekJul 7, 2023
4ff2705
make gen
mtojekJul 7, 2023
f826d99
resolver: if not ephemeral
mtojekJul 7, 2023
cc20564
Merge branch 'main' into 6828-support-ephemeral-parameters
mtojekJul 10, 2023
35321fc
ParameterResolver tests
mtojekJul 10, 2023
feceec3
WIP
mtojekJul 10, 2023
e8cd16d
Tests: resources
mtojekJul 10, 2023
ffb7b94
fmt
mtojekJul 10, 2023
85044d3
Long ephemeral test
mtojekJul 10, 2023
3636b70
Merge branch 'main' into 6828-support-ephemeral-parameters
mtojekJul 10, 2023
343c87e
remove debug
mtojekJul 10, 2023
38eacbf
fix: go.mod
mtojekJul 10, 2023
8e73da8
go mod tidy
mtojekJul 10, 2023
dffefb6
Merge branch 'main' into 6828-support-ephemeral-parameters
mtojekJul 10, 2023
69e46ee
rename to ephemeralParameter
mtojekJul 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletionscoderd/apidoc/docs.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

3 changes: 3 additions & 0 deletionscoderd/apidoc/swagger.json
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

1 change: 1 addition & 0 deletionscoderd/database/db2sdk/db2sdk.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -75,6 +75,7 @@ func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk
ValidationError: param.ValidationError,
ValidationMonotonic: codersdk.ValidationMonotonicOrder(param.ValidationMonotonic),
Required: param.Required,
Ephemeral: param.Ephemeral,
}, nil
}

Expand Down
1 change: 1 addition & 0 deletionscoderd/database/dbfake/dbfake.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3966,6 +3966,7 @@ func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg data
ValidationMonotonic: arg.ValidationMonotonic,
Required: arg.Required,
DisplayOrder: arg.DisplayOrder,
Ephemeral: arg.Ephemeral,
}
q.templateVersionParameters = append(q.templateVersionParameters, param)
return param, nil
Expand Down
3 changes: 3 additions & 0 deletionscoderd/database/dump.sql
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
ALTER TABLE template_version_parameters DROP COLUMN ephemeral;
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
ALTER TABLE template_version_parameters ADD COLUMN ephemeral boolean NOT NULL DEFAULT false;

COMMENT ON COLUMN template_version_parameters.ephemeral
IS 'The value of an ephemeral parameter will not be preserved between consecutive workspace builds.';
2 changes: 2 additions & 0 deletionscoderd/database/models.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

14 changes: 10 additions & 4 deletionscoderd/database/queries.sql.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

6 changes: 4 additions & 2 deletionscoderd/database/queries/templateversionparameters.sql
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,8 @@ INSERT INTO
validation_monotonic,
required,
display_name,
display_order
display_order,
ephemeral
)
VALUES
(
Expand All@@ -35,7 +36,8 @@ VALUES
$13,
$14,
$15,
$16
$16,
$17
) RETURNING *;

-- name: GetTemplateVersionParameters :many
Expand Down
3 changes: 3 additions & 0 deletionscoderd/provisionerdserver/provisionerdserver.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -789,6 +789,8 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
server.Logger.Info(ctx, "inserting template import job parameter",
slog.F("job_id", job.ID.String()),
slog.F("parameter_name", richParameter.Name),
slog.F("type", richParameter.Type),
slog.F("ephemeral", richParameter.Ephemeral),
)
options, err := json.Marshal(richParameter.Options)
if err != nil {
Expand DownExpand Up@@ -826,6 +828,7 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
ValidationMonotonic: richParameter.ValidationMonotonic,
Required: richParameter.Required,
DisplayOrder: richParameter.Order,
Ephemeral: richParameter.Ephemeral,
})
if err != nil {
return nil, xerrors.Errorf("insert parameter: %w", err)
Expand Down
1 change: 1 addition & 0 deletionscoderd/templateversions.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1484,6 +1484,7 @@ func convertTemplateVersionParameter(param database.TemplateVersionParameter) (c
ValidationError: param.ValidationError,
ValidationMonotonic: codersdk.ValidationMonotonicOrder(param.ValidationMonotonic),
Required: param.Required,
Ephemeral: param.Ephemeral,
}, nil
}

Expand Down
125 changes: 125 additions & 0 deletionscoderd/workspaces_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2518,6 +2518,131 @@ func TestWorkspaceWithOptionalRichParameters(t *testing.T) {
require.ElementsMatch(t, expectedBuildParameters, workspaceBuildParameters)
}

func TestWorkspaceWithEphemeralRichParameters(t *testing.T) {
t.Parallel()

const (
firstParameterName = "first_parameter"
firstParameterType = "string"
firstParameterDescription = "This is first parameter"
firstParameterMutable = true
firstParameterDefaultValue = "1"
firstParameterValue = "i_am_first_parameter"

ephemeralParameterName = "second_parameter"
ephemeralParameterType = "string"
ephemeralParameterDescription = "This is second parameter"
ephemeralParameterDefaultValue = ""
ephemeralParameterMutable = true
ephemeralParameterValue = "i_am_ephemeral"
)

// Create template version with ephemeral parameter
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
Parse: echo.ParseComplete,
ProvisionPlan: []*proto.Provision_Response{
{
Type: &proto.Provision_Response_Complete{
Complete: &proto.Provision_Complete{
Parameters: []*proto.RichParameter{
{
Name: firstParameterName,
Type: firstParameterType,
Description: firstParameterDescription,
DefaultValue: firstParameterDefaultValue,
Mutable: firstParameterMutable,
},
{
Name: ephemeralParameterName,
Type: ephemeralParameterType,
Description: ephemeralParameterDescription,
DefaultValue: ephemeralParameterDefaultValue,
Mutable: ephemeralParameterMutable,
Ephemeral: true,
},
},
},
},
},
},
ProvisionApply: []*proto.Provision_Response{{
Type: &proto.Provision_Response_Complete{
Complete: &proto.Provision_Complete{},
},
}},
})
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)

// Create workspace with default values
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
workspaceBuild := coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
require.Equal(t, codersdk.WorkspaceStatusRunning, workspaceBuild.Status)

// Verify workspace build parameters (default values)
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
defer cancel()

workspaceBuildParameters, err := client.WorkspaceBuildParameters(ctx, workspaceBuild.ID)
require.NoError(t, err)

expectedBuildParameters := []codersdk.WorkspaceBuildParameter{
{Name: firstParameterName, Value: firstParameterDefaultValue},
{Name: ephemeralParameterName, Value: ephemeralParameterDefaultValue},
}
require.ElementsMatch(t, expectedBuildParameters, workspaceBuildParameters)

// Trigger workspace build job with ephemeral parameter
workspaceBuild, err = client.CreateWorkspaceBuild(ctx, workspaceBuild.WorkspaceID, codersdk.CreateWorkspaceBuildRequest{
Transition: codersdk.WorkspaceTransitionStart,
RichParameterValues: []codersdk.WorkspaceBuildParameter{
{
Name: ephemeralParameterName,
Value: ephemeralParameterValue,
},
},
})
require.NoError(t, err)
workspaceBuild = coderdtest.AwaitWorkspaceBuildJob(t, client, workspaceBuild.ID)
require.Equal(t, codersdk.WorkspaceStatusRunning, workspaceBuild.Status)

// Verify workspace build parameters (including ephemeral)
workspaceBuildParameters, err = client.WorkspaceBuildParameters(ctx, workspaceBuild.ID)
require.NoError(t, err)

expectedBuildParameters = []codersdk.WorkspaceBuildParameter{
{Name: firstParameterName, Value: firstParameterDefaultValue},
{Name: ephemeralParameterName, Value: ephemeralParameterValue},
}
require.ElementsMatch(t, expectedBuildParameters, workspaceBuildParameters)

// Trigger workspace build one more time without the ephemeral parameter
workspaceBuild, err = client.CreateWorkspaceBuild(ctx, workspaceBuild.WorkspaceID, codersdk.CreateWorkspaceBuildRequest{
Transition: codersdk.WorkspaceTransitionStart,
RichParameterValues: []codersdk.WorkspaceBuildParameter{
{
Name: firstParameterName,
Value: firstParameterValue,
},
},
})
require.NoError(t, err)
workspaceBuild = coderdtest.AwaitWorkspaceBuildJob(t, client, workspaceBuild.ID)
require.Equal(t, codersdk.WorkspaceStatusRunning, workspaceBuild.Status)

// Verify workspace build parameters (ephemeral should be back to default)
workspaceBuildParameters, err = client.WorkspaceBuildParameters(ctx, workspaceBuild.ID)
require.NoError(t, err)

expectedBuildParameters = []codersdk.WorkspaceBuildParameter{
{Name: firstParameterName, Value: firstParameterValue},
{Name: ephemeralParameterName, Value: ephemeralParameterDefaultValue},
}
require.ElementsMatch(t, expectedBuildParameters, workspaceBuildParameters)
}

func TestWorkspaceLock(t *testing.T) {
t.Parallel()

Expand Down
4 changes: 2 additions & 2 deletionscodersdk/richparameters.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -148,8 +148,8 @@ func (r *ParameterResolver) ValidateResolve(p TemplateVersionParameter, v *Works
}
// First, the provided value
resolvedValue := v
// Second, previous value
if resolvedValue == nil {
// Second, previous value if not ephemeral
if resolvedValue == nil&& !p.Ephemeral{
resolvedValue = prevV
}
// Last, default value
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp