Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 81d451c

Browse files
committed
plumb to executor
1 parent 4653105 commit 81d451c

File tree

13 files changed

+137
-71
lines changed

13 files changed

+137
-71
lines changed

cli/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1125,7 +1125,7 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
11251125
autobuildTicker := time.NewTicker(vals.AutobuildPollInterval.Value())
11261126
defer autobuildTicker.Stop()
11271127
autobuildExecutor := autobuild.NewExecutor(
1128-
ctx, options.Database, options.Pubsub, options.PrometheusRegistry, coderAPI.TemplateScheduleStore, &coderAPI.Auditor, coderAPI.AccessControlStore, logger, autobuildTicker.C, options.NotificationsEnqueuer, coderAPI.Experiments)
1128+
ctx, options.Database, options.Pubsub, coderAPI.FileCache, options.PrometheusRegistry, coderAPI.TemplateScheduleStore, &coderAPI.Auditor, coderAPI.AccessControlStore, logger, autobuildTicker.C, options.NotificationsEnqueuer, coderAPI.Experiments)
11291129
autobuildExecutor.Run()
11301130

11311131
jobReaperTicker := time.NewTicker(vals.JobReaperDetectorInterval.Value())

coderd/autobuild/lifecycle_executor.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ import (
3333

3434
// Executor automatically starts or stops workspaces.
3535
type Executor struct {
36-
ctx context.Context
37-
db database.Store
38-
ps pubsub.Pubsub
39-
//fileCache *files.Cache
36+
ctx context.Context
37+
db database.Store
38+
ps pubsub.Pubsub
39+
fileCache *files.Cache
4040
templateScheduleStore *atomic.Pointer[schedule.TemplateScheduleStore]
4141
accessControlStore *atomic.Pointer[dbauthz.AccessControlStore]
4242
auditor *atomic.Pointer[audit.Auditor]

coderd/coderdtest/coderdtest.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import (
5252
"cdr.dev/slog"
5353
"cdr.dev/slog/sloggers/sloghuman"
5454
"cdr.dev/slog/sloggers/slogtest"
55+
"github.com/coder/coder/v2/coderd/files"
5556
"github.com/coder/quartz"
5657

5758
"github.com/coder/coder/v2/coderd"
@@ -359,6 +360,7 @@ func NewOptions(t testing.TB, options *Options) (func(http.Handler), context.Can
359360
ctx,
360361
options.Database,
361362
options.Pubsub,
363+
files.New(prometheus.NewRegistry(), options.Authorizer),
362364
prometheus.NewRegistry(),
363365
&templateScheduleStore,
364366
&auditor,

coderd/dynamicparameters/render_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
package dynamicparameters
1+
package dynamicparameters_test
22

33
import (
44
"testing"
55

66
"github.com/stretchr/testify/require"
7+
8+
"github.com/coder/coder/v2/coderd/dynamicparameters"
79
)
810

911
func TestProvisionerVersionSupportsDynamicParameters(t *testing.T) {
@@ -26,7 +28,7 @@ func TestProvisionerVersionSupportsDynamicParameters(t *testing.T) {
2628
t.Run(v, func(t *testing.T) {
2729
t.Parallel()
2830

29-
does := ProvisionerVersionSupportsDynamicParameters(v)
31+
does := dynamicparameters.ProvisionerVersionSupportsDynamicParameters(v)
3032
require.Equal(t, dyn, does)
3133
})
3234
}

coderd/dynamicparameters/resolver.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,6 @@ import (
1212
"github.com/coder/coder/v2/codersdk"
1313
)
1414

15-
type ParameterResolver struct {
16-
renderer Renderer
17-
firstBuild bool
18-
presetValues []database.TemplateVersionPresetParameter
19-
previousValues []database.WorkspaceBuildParameter
20-
buildValues []database.WorkspaceBuildParameter
21-
}
22-
2315
type parameterValueSource int
2416

2517
const (
@@ -33,6 +25,7 @@ type parameterValue struct {
3325
Source parameterValueSource
3426
}
3527

28+
//nolint:revive // firstbuild is a control flag to turn on immutable validation
3629
func ResolveParameters(
3730
ctx context.Context,
3831
ownerID uuid.UUID,
@@ -53,16 +46,12 @@ func ResolveParameters(
5346

5447
// Add build values
5548
for _, buildValue := range buildValues {
56-
if _, ok := values[buildValue.Name]; !ok {
57-
values[buildValue.Name] = parameterValue{Source: sourceBuild, Value: buildValue.Value}
58-
}
49+
values[buildValue.Name] = parameterValue{Source: sourceBuild, Value: buildValue.Value}
5950
}
6051

6152
// Add preset values
6253
for _, preset := range presetValues {
63-
if _, ok := values[preset.Name]; !ok {
64-
values[preset.Name] = parameterValue{Source: sourcePreset, Value: preset.Value}
65-
}
54+
values[preset.Name] = parameterValue{Source: sourcePreset, Value: preset.Value}
6655
}
6756

6857
originalValues := make(map[string]parameterValue, len(values))

coderd/parameters_test.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,11 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
100100
require.Equal(t, -1, preview.ID)
101101
require.Empty(t, preview.Diagnostics)
102102

103-
require.Len(t, preview.Parameters, 1)
104-
require.Equal(t, "jetbrains_ide", preview.Parameters[0].Name)
105-
require.True(t, preview.Parameters[0].Value.Valid)
106-
require.Equal(t, "CL", preview.Parameters[0].Value.Value)
103+
require.Len(t, preview.Parameters, 2)
104+
coderdtest.AssertParameter(t, "jetbrains_ide", preview.Parameters).
105+
Exists().Value("CL")
106+
coderdtest.AssertParameter(t, "region", preview.Parameters).
107+
Exists().Value("na")
107108
})
108109

109110
// OldProvisioners use the static parameters in the dynamic param flow
@@ -241,10 +242,11 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
241242
require.Equal(t, -1, preview.ID)
242243
require.Empty(t, preview.Diagnostics)
243244

244-
require.Len(t, preview.Parameters, 1)
245-
require.Equal(t, "jetbrains_ide", preview.Parameters[0].Name)
246-
require.True(t, preview.Parameters[0].Value.Valid)
247-
require.Equal(t, "CL", preview.Parameters[0].Value.Value)
245+
require.Len(t, preview.Parameters, 2)
246+
coderdtest.AssertParameter(t, "jetbrains_ide", preview.Parameters).
247+
Exists().Value("CL")
248+
coderdtest.AssertParameter(t, "region", preview.Parameters).
249+
Exists().Value("na")
248250
_ = stream.Close(websocket.StatusGoingAway)
249251

250252
wrk := coderdtest.CreateWorkspace(t, setup.client, setup.template.ID, func(request *codersdk.CreateWorkspaceRequest) {
@@ -253,29 +255,35 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
253255
Name: preview.Parameters[0].Name,
254256
Value: "GO",
255257
},
258+
{
259+
Name: preview.Parameters[1].Name,
260+
Value: "eu",
261+
},
256262
}
257263
request.EnableDynamicParameters = true
258264
})
259265
coderdtest.AwaitWorkspaceBuildJobCompleted(t, setup.client, wrk.LatestBuild.ID)
260266

261267
params, err := setup.client.WorkspaceBuildParameters(ctx, wrk.LatestBuild.ID)
262268
require.NoError(t, err)
263-
require.Len(t, params, 1)
264-
require.Equal(t, "jetbrains_ide", params[0].Name)
265-
require.Equal(t, "GO", params[0].Value)
269+
require.ElementsMatch(t, []codersdk.WorkspaceBuildParameter{
270+
{Name: "jetbrains_ide", Value: "GO"}, {Name: "region", Value: "eu"},
271+
}, params)
272+
273+
regionOptions := []string{"na", "af", "sa", "as"}
266274

267275
// A helper function to assert params
268276
doTransition := func(t *testing.T, trans codersdk.WorkspaceTransition) {
269277
t.Helper()
270278

271-
fooVal := coderdtest.RandomUsername(t)
279+
regionVal := regionOptions[0]
280+
regionOptions = regionOptions[1:] // Choose the next region on the next build
281+
272282
bld, err := setup.client.CreateWorkspaceBuild(ctx, wrk.ID, codersdk.CreateWorkspaceBuildRequest{
273283
TemplateVersionID: setup.template.ActiveVersionID,
274284
Transition: trans,
275285
RichParameterValues: []codersdk.WorkspaceBuildParameter{
276-
// No validation, so this should work as is.
277-
// Overwrite the value on each transition
278-
{Name: "foo", Value: fooVal},
286+
{Name: "region", Value: regionVal},
279287
},
280288
EnableDynamicParameters: ptr.Ref(true),
281289
})
@@ -286,7 +294,7 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
286294
require.NoError(t, err)
287295
require.ElementsMatch(t, latestParams, []codersdk.WorkspaceBuildParameter{
288296
{Name: "jetbrains_ide", Value: "GO"},
289-
{Name: "foo", Value: fooVal},
297+
{Name: "region", Value: regionVal},
290298
})
291299
}
292300

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,47 @@
1-
terraform {}
1+
terraform {
2+
required_providers {
3+
coder = {
4+
source = "coder/coder"
5+
version = "2.5.3"
6+
}
7+
}
8+
}
29

310
module "jetbrains_gateway" {
411
source = "jetbrains_gateway"
512
}
13+
14+
data "coder_parameter" "region" {
15+
name = "region"
16+
display_name = "Select a region"
17+
type = "string"
18+
form_type = "dropdown"
19+
mutable = true
20+
default = "na"
21+
order = 1000
22+
23+
option {
24+
name = "North America"
25+
value = "na"
26+
}
27+
28+
option {
29+
name = "South America"
30+
value = "sa"
31+
}
32+
33+
option {
34+
name = "Europe"
35+
value = "eu"
36+
}
37+
38+
option {
39+
name = "Africa"
40+
value = "af"
41+
}
42+
43+
option {
44+
name = "Asia"
45+
value = "as"
46+
}
47+
}

coderd/wsbuilder/wsbuilder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -716,8 +716,8 @@ func (b *Builder) getDynamicParameters() (names, values []string, err error) {
716716
return nil, nil, xerrors.Errorf("something went wrong: %w", errors.Join(diagnostics.Errs()...))
717717
}
718718

719-
names = make([]string, len(buildValues))
720-
values = make([]string, len(buildValues))
719+
names = make([]string, 0, len(buildValues))
720+
values = make([]string, 0, len(buildValues))
721721
for k, v := range buildValues {
722722
names = append(names, k)
723723
values = append(values, v)

coderd/wsbuilder/wsbuilder_test.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func TestBuilder_NoOptions(t *testing.T) {
9898
asrt.Empty(params.Value)
9999
}),
100100
)
101-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
101+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
102102

103103
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
104104
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart)
@@ -138,7 +138,7 @@ func TestBuilder_Initiator(t *testing.T) {
138138
}),
139139
withBuild,
140140
)
141-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
141+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
142142

143143
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
144144
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).Initiator(otherUserID)
@@ -184,7 +184,7 @@ func TestBuilder_Baggage(t *testing.T) {
184184
}),
185185
withBuild,
186186
)
187-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
187+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
188188

189189
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
190190
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).Initiator(otherUserID)
@@ -223,7 +223,7 @@ func TestBuilder_Reason(t *testing.T) {
223223
}),
224224
withBuild,
225225
)
226-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
226+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
227227

228228
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
229229
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).Reason(database.BuildReasonAutostart)
@@ -267,7 +267,7 @@ func TestBuilder_ActiveVersion(t *testing.T) {
267267
}),
268268
withBuild,
269269
)
270-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
270+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
271271

272272
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
273273
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).ActiveVersion()
@@ -382,7 +382,7 @@ func TestWorkspaceBuildWithTags(t *testing.T) {
382382
}),
383383
withBuild,
384384
)
385-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
385+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
386386

387387
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
388388
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).RichParameterValues(buildParameters)
@@ -465,7 +465,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
465465
}),
466466
withBuild,
467467
)
468-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
468+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
469469

470470
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
471471
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).RichParameterValues(nextBuildParameters)
@@ -513,7 +513,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
513513
}),
514514
withBuild,
515515
)
516-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
516+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
517517

518518
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
519519
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).RichParameterValues(nextBuildParameters)
@@ -552,7 +552,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
552552
withParameterSchemas(inactiveJobID, schemas),
553553
withWorkspaceTags(inactiveVersionID, nil),
554554
)
555-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
555+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
556556

557557
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
558558
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart)
@@ -588,7 +588,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
588588
// Outputs
589589
// no transaction, since we failed fast while validation build parameters
590590
)
591-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
591+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
592592

593593
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
594594
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).RichParameterValues(nextBuildParameters)
@@ -653,7 +653,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
653653
}),
654654
withBuild,
655655
)
656-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
656+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
657657

658658
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
659659
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).
@@ -717,7 +717,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
717717
}),
718718
withBuild,
719719
)
720-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
720+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
721721

722722
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
723723
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).
@@ -779,7 +779,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
779779
}),
780780
withBuild,
781781
)
782-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
782+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
783783

784784
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
785785
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).
@@ -846,7 +846,7 @@ func TestWorkspaceBuildWithPreset(t *testing.T) {
846846
asrt.Empty(params.Value)
847847
}),
848848
)
849-
fc := files.NewFromStore(mDB, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
849+
fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
850850

851851
ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID}
852852
uut := wsbuilder.New(ws, database.WorkspaceTransitionStart).

enterprise/coderd/coderd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1164,7 +1164,7 @@ func (api *API) setupPrebuilds(featureEnabled bool) (agplprebuilds.Reconciliatio
11641164
return agplprebuilds.DefaultReconciler, agplprebuilds.DefaultClaimer
11651165
}
11661166

1167-
reconciler := prebuilds.NewStoreReconciler(api.Database, api.Pubsub, api.DeploymentValues.Prebuilds,
1167+
reconciler := prebuilds.NewStoreReconciler(api.Database, api.Pubsub, api.AGPL.FileCache, api.DeploymentValues.Prebuilds,
11681168
api.Logger.Named("prebuilds"), quartz.NewReal(), api.PrometheusRegistry, api.NotificationsEnqueuer)
11691169
return reconciler, prebuilds.NewEnterpriseClaimer(api.Database)
11701170
}

0 commit comments

Comments
 (0)