Skip to content

Commit b0405ad

Browse files
committed
Initial, inefficient attempt at preset parameter matching
1 parent a2e8aa9 commit b0405ad

File tree

1 file changed

+51
-6
lines changed

1 file changed

+51
-6
lines changed

coderd/wsbuilder/wsbuilder.go

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,57 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
442442

443443
var workspaceBuild database.WorkspaceBuild
444444
err = b.store.InTx(func(store database.Store) error {
445+
names, values, err := b.getParameters()
446+
if err != nil {
447+
// getParameters already wraps errors in BuildError
448+
return err
449+
}
450+
451+
if b.templateVersionPresetID == uuid.Nil {
452+
parameterMap := make(map[string]string)
453+
for i, name := range names {
454+
parameterMap[name] = values[i]
455+
}
456+
457+
presetParameters, err := b.store.GetPresetParametersByTemplateVersionID(b.ctx, templateVersionID)
458+
if err != nil {
459+
return BuildError{http.StatusInternalServerError, "get preset parameters", err}
460+
}
461+
462+
presetMap := make(map[uuid.UUID]map[string]string)
463+
for _, presetParameter := range presetParameters {
464+
if _, ok := presetMap[presetParameter.TemplateVersionPresetID]; !ok {
465+
presetMap[presetParameter.TemplateVersionPresetID] = make(map[string]string)
466+
}
467+
presetMap[presetParameter.TemplateVersionPresetID][presetParameter.Name] = presetParameter.Value
468+
}
469+
470+
// Compare each preset's parameters to the provided parameters to find any matches
471+
for presetID, presetParams := range presetMap {
472+
isMatch := true
473+
// Check that all preset parameters match the provided parameters
474+
for paramName, presetValue := range presetParams {
475+
if providedValue, exists := parameterMap[paramName]; !exists || providedValue != presetValue {
476+
isMatch = false
477+
break
478+
}
479+
}
480+
// Check that all provided parameters match the preset parameters
481+
if isMatch {
482+
for paramName, providedValue := range parameterMap {
483+
if presetValue, exists := presetParams[paramName]; !exists || providedValue != presetValue {
484+
isMatch = false
485+
break
486+
}
487+
}
488+
}
489+
if isMatch {
490+
b.templateVersionPresetID = presetID
491+
break
492+
}
493+
}
494+
}
495+
445496
err = store.InsertWorkspaceBuild(b.ctx, database.InsertWorkspaceBuildParams{
446497
ID: workspaceBuildID,
447498
CreatedAt: now,
@@ -473,12 +524,6 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
473524
return BuildError{code, "insert workspace build", err}
474525
}
475526

476-
names, values, err := b.getParameters()
477-
if err != nil {
478-
// getParameters already wraps errors in BuildError
479-
return err
480-
}
481-
482527
err = store.InsertWorkspaceBuildParameters(b.ctx, database.InsertWorkspaceBuildParametersParams{
483528
WorkspaceBuildID: workspaceBuildID,
484529
Name: names,

0 commit comments

Comments
 (0)