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)
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