mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: loosen static validation when using dynamic parameters (#17516)
Co-authored-by: Steven Masley <stevenmasley@gmail.com>
This commit is contained in:
Generated
+3
@@ -11453,6 +11453,9 @@ const docTemplate = `{
|
||||
"autostart_schedule": {
|
||||
"type": "string"
|
||||
},
|
||||
"enable_dynamic_parameters": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
|
||||
Generated
+3
@@ -10211,6 +10211,9 @@
|
||||
"autostart_schedule": {
|
||||
"type": "string"
|
||||
},
|
||||
"enable_dynamic_parameters": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
|
||||
@@ -676,6 +676,9 @@ func createWorkspace(
|
||||
if req.TemplateVersionID != uuid.Nil {
|
||||
builder = builder.VersionID(req.TemplateVersionID)
|
||||
}
|
||||
if req.EnableDynamicParameters && api.Experiments.Enabled(codersdk.ExperimentDynamicParameters) {
|
||||
builder = builder.UsingDynamicParameters()
|
||||
}
|
||||
|
||||
workspaceBuild, provisionerJob, provisionerDaemons, err = builder.Build(
|
||||
ctx,
|
||||
|
||||
@@ -51,10 +51,11 @@ type Builder struct {
|
||||
logLevel string
|
||||
deploymentValues *codersdk.DeploymentValues
|
||||
|
||||
richParameterValues []codersdk.WorkspaceBuildParameter
|
||||
initiator uuid.UUID
|
||||
reason database.BuildReason
|
||||
templateVersionPresetID uuid.UUID
|
||||
richParameterValues []codersdk.WorkspaceBuildParameter
|
||||
dynamicParametersEnabled bool
|
||||
initiator uuid.UUID
|
||||
reason database.BuildReason
|
||||
templateVersionPresetID uuid.UUID
|
||||
|
||||
// used during build, makes function arguments less verbose
|
||||
ctx context.Context
|
||||
@@ -178,6 +179,11 @@ func (b Builder) MarkPrebuild() Builder {
|
||||
return b
|
||||
}
|
||||
|
||||
func (b Builder) UsingDynamicParameters() Builder {
|
||||
b.dynamicParametersEnabled = true
|
||||
return b
|
||||
}
|
||||
|
||||
// SetLastWorkspaceBuildInTx prepopulates the Builder's cache with the last workspace build. This allows us
|
||||
// to avoid a repeated database query when the Builder's caller also needs the workspace build, e.g. auto-start &
|
||||
// auto-stop.
|
||||
@@ -578,6 +584,7 @@ func (b *Builder) getParameters() (names, values []string, err error) {
|
||||
if err != nil {
|
||||
return nil, nil, BuildError{http.StatusBadRequest, "Unable to build workspace with unsupported parameters", err}
|
||||
}
|
||||
|
||||
resolver := codersdk.ParameterResolver{
|
||||
Rich: db2sdk.WorkspaceBuildParameters(lastBuildParameters),
|
||||
}
|
||||
@@ -586,16 +593,24 @@ func (b *Builder) getParameters() (names, values []string, err error) {
|
||||
if err != nil {
|
||||
return nil, nil, BuildError{http.StatusInternalServerError, "failed to convert template version parameter", err}
|
||||
}
|
||||
value, err := resolver.ValidateResolve(
|
||||
tvp,
|
||||
b.findNewBuildParameterValue(templateVersionParameter.Name),
|
||||
)
|
||||
if err != nil {
|
||||
// At this point, we've queried all the data we need from the database,
|
||||
// so the only errors are problems with the request (missing data, failed
|
||||
// validation, immutable parameters, etc.)
|
||||
return nil, nil, BuildError{http.StatusBadRequest, fmt.Sprintf("Unable to validate parameter %q", templateVersionParameter.Name), err}
|
||||
|
||||
var value string
|
||||
if !b.dynamicParametersEnabled {
|
||||
var err error
|
||||
value, err = resolver.ValidateResolve(
|
||||
tvp,
|
||||
b.findNewBuildParameterValue(templateVersionParameter.Name),
|
||||
)
|
||||
if err != nil {
|
||||
// At this point, we've queried all the data we need from the database,
|
||||
// so the only errors are problems with the request (missing data, failed
|
||||
// validation, immutable parameters, etc.)
|
||||
return nil, nil, BuildError{http.StatusBadRequest, fmt.Sprintf("Unable to validate parameter %q", templateVersionParameter.Name), err}
|
||||
}
|
||||
} else {
|
||||
value = resolver.Resolve(tvp, b.findNewBuildParameterValue(templateVersionParameter.Name))
|
||||
}
|
||||
|
||||
names = append(names, templateVersionParameter.Name)
|
||||
values = append(values, value)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user