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

Skip to content

Commit 95aacbf

Browse files
committed
plumb to executor
1 parent 898bdf3 commit 95aacbf

File tree

12 files changed

+123
-57
lines changed

12 files changed

+123
-57
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.NewFromStore(options.Database, 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)

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
}

enterprise/coderd/prebuilds/claim_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/stretchr/testify/require"
1616
"golang.org/x/xerrors"
1717

18+
"github.com/coder/coder/v2/coderd/files"
1819
"github.com/coder/quartz"
1920

2021
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -164,7 +165,8 @@ func TestClaimPrebuild(t *testing.T) {
164165
})
165166
defer provisionerCloser.Close()
166167

167-
reconciler := prebuilds.NewStoreReconciler(spy, pubsub, codersdk.PrebuildsConfig{}, logger, quartz.NewMock(t), prometheus.NewRegistry(), newNoopEnqueuer())
168+
cache := files.NewFromStore(spy, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
169+
reconciler := prebuilds.NewStoreReconciler(spy, pubsub, cache, codersdk.PrebuildsConfig{}, logger, quartz.NewMock(t), prometheus.NewRegistry(), newNoopEnqueuer())
168170
var claimer agplprebuilds.Claimer = prebuilds.NewEnterpriseClaimer(spy)
169171
api.AGPL.PrebuildsClaimer.Store(&claimer)
170172

enterprise/coderd/prebuilds/metricscollector_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
prometheus_client "github.com/prometheus/client_model/go"
1414

1515
"cdr.dev/slog/sloggers/slogtest"
16+
"github.com/coder/coder/v2/coderd/coderdtest"
17+
"github.com/coder/coder/v2/coderd/files"
1618
"github.com/coder/quartz"
1719

1820
"github.com/coder/coder/v2/coderd/database"
@@ -198,7 +200,8 @@ func TestMetricsCollector(t *testing.T) {
198200
})
199201
clock := quartz.NewMock(t)
200202
db, pubsub := dbtestutil.NewDB(t)
201-
reconciler := prebuilds.NewStoreReconciler(db, pubsub, codersdk.PrebuildsConfig{}, logger, quartz.NewMock(t), prometheus.NewRegistry(), newNoopEnqueuer())
203+
cache := files.NewFromStore(db, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
204+
reconciler := prebuilds.NewStoreReconciler(db, pubsub, cache, codersdk.PrebuildsConfig{}, logger, quartz.NewMock(t), prometheus.NewRegistry(), newNoopEnqueuer())
202205
ctx := testutil.Context(t, testutil.WaitLong)
203206

204207
createdUsers := []uuid.UUID{database.PrebuildsSystemUserID}
@@ -334,7 +337,8 @@ func TestMetricsCollector_DuplicateTemplateNames(t *testing.T) {
334337
logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
335338
clock := quartz.NewMock(t)
336339
db, pubsub := dbtestutil.NewDB(t)
337-
reconciler := prebuilds.NewStoreReconciler(db, pubsub, codersdk.PrebuildsConfig{}, logger, quartz.NewMock(t), prometheus.NewRegistry(), newNoopEnqueuer())
340+
cache := files.NewFromStore(db, prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{})
341+
reconciler := prebuilds.NewStoreReconciler(db, pubsub, cache, codersdk.PrebuildsConfig{}, logger, quartz.NewMock(t), prometheus.NewRegistry(), newNoopEnqueuer())
338342
ctx := testutil.Context(t, testutil.WaitLong)
339343

340344
collector := prebuilds.NewMetricsCollector(db, logger, reconciler)

0 commit comments

Comments
 (0)