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

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