mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: set preset parameters in the API rather than the frontend (#17403)
Follow-up from a [previous Pull Request](https://github.com/coder/coder/pull/16965) required some additional testing of Presets from the API perspective. In the process of adding the new tests, I updated the API to enforce preset parameter values based on the selected preset instead of trusting whichever frontend makes the request. This avoids errors scenarios in prebuilds where a prebuild might expect a certain preset but find a different set of actual parameter values.
This commit is contained in:
@@ -61,18 +61,19 @@ type Builder struct {
|
||||
store database.Store
|
||||
|
||||
// cache of objects, so we only fetch once
|
||||
template *database.Template
|
||||
templateVersion *database.TemplateVersion
|
||||
templateVersionJob *database.ProvisionerJob
|
||||
templateVersionParameters *[]database.TemplateVersionParameter
|
||||
templateVersionVariables *[]database.TemplateVersionVariable
|
||||
templateVersionWorkspaceTags *[]database.TemplateVersionWorkspaceTag
|
||||
lastBuild *database.WorkspaceBuild
|
||||
lastBuildErr *error
|
||||
lastBuildParameters *[]database.WorkspaceBuildParameter
|
||||
lastBuildJob *database.ProvisionerJob
|
||||
parameterNames *[]string
|
||||
parameterValues *[]string
|
||||
template *database.Template
|
||||
templateVersion *database.TemplateVersion
|
||||
templateVersionJob *database.ProvisionerJob
|
||||
templateVersionParameters *[]database.TemplateVersionParameter
|
||||
templateVersionVariables *[]database.TemplateVersionVariable
|
||||
templateVersionWorkspaceTags *[]database.TemplateVersionWorkspaceTag
|
||||
lastBuild *database.WorkspaceBuild
|
||||
lastBuildErr *error
|
||||
lastBuildParameters *[]database.WorkspaceBuildParameter
|
||||
lastBuildJob *database.ProvisionerJob
|
||||
parameterNames *[]string
|
||||
parameterValues *[]string
|
||||
templateVersionPresetParameterValues []database.TemplateVersionPresetParameter
|
||||
|
||||
prebuild bool
|
||||
|
||||
@@ -565,6 +566,14 @@ func (b *Builder) getParameters() (names, values []string, err error) {
|
||||
if err != nil {
|
||||
return nil, nil, BuildError{http.StatusInternalServerError, "failed to fetch last build parameters", err}
|
||||
}
|
||||
if b.templateVersionPresetID != uuid.Nil {
|
||||
// Fetch and cache these, since we'll need them to override requested values if a preset was chosen
|
||||
presetParameters, err := b.store.GetPresetParametersByPresetID(b.ctx, b.templateVersionPresetID)
|
||||
if err != nil {
|
||||
return nil, nil, BuildError{http.StatusInternalServerError, "failed to get preset parameters", err}
|
||||
}
|
||||
b.templateVersionPresetParameterValues = presetParameters
|
||||
}
|
||||
err = b.verifyNoLegacyParameters()
|
||||
if err != nil {
|
||||
return nil, nil, BuildError{http.StatusBadRequest, "Unable to build workspace with unsupported parameters", err}
|
||||
@@ -597,6 +606,15 @@ func (b *Builder) getParameters() (names, values []string, err error) {
|
||||
}
|
||||
|
||||
func (b *Builder) findNewBuildParameterValue(name string) *codersdk.WorkspaceBuildParameter {
|
||||
for _, v := range b.templateVersionPresetParameterValues {
|
||||
if v.Name == name {
|
||||
return &codersdk.WorkspaceBuildParameter{
|
||||
Name: v.Name,
|
||||
Value: v.Value,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, v := range b.richParameterValues {
|
||||
if v.Name == name {
|
||||
return &v
|
||||
|
||||
Reference in New Issue
Block a user