Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit36a72a2

Browse files
aslilacEmyrk
andauthored
chore: loosen static validation when using dynamic parameters (#17516)
Co-authored-by: Steven Masley <stevenmasley@gmail.com>
1 parent3b4343d commit36a72a2

File tree

10 files changed

+64
-13
lines changed

10 files changed

+64
-13
lines changed

‎coderd/apidoc/docs.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/apidoc/swagger.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/workspaces.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,9 @@ func createWorkspace(
676676
ifreq.TemplateVersionID!=uuid.Nil {
677677
builder=builder.VersionID(req.TemplateVersionID)
678678
}
679+
ifreq.EnableDynamicParameters&&api.Experiments.Enabled(codersdk.ExperimentDynamicParameters) {
680+
builder=builder.UsingDynamicParameters()
681+
}
679682

680683
workspaceBuild,provisionerJob,provisionerDaemons,err=builder.Build(
681684
ctx,

‎coderd/wsbuilder/wsbuilder.go

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@ type Builder struct {
5151
logLevelstring
5252
deploymentValues*codersdk.DeploymentValues
5353

54-
richParameterValues []codersdk.WorkspaceBuildParameter
55-
initiator uuid.UUID
56-
reason database.BuildReason
57-
templateVersionPresetID uuid.UUID
54+
richParameterValues []codersdk.WorkspaceBuildParameter
55+
dynamicParametersEnabledbool
56+
initiator uuid.UUID
57+
reason database.BuildReason
58+
templateVersionPresetID uuid.UUID
5859

5960
// used during build, makes function arguments less verbose
6061
ctx context.Context
@@ -178,6 +179,11 @@ func (b Builder) MarkPrebuild() Builder {
178179
returnb
179180
}
180181

182+
func (bBuilder)UsingDynamicParameters()Builder {
183+
b.dynamicParametersEnabled=true
184+
returnb
185+
}
186+
181187
// SetLastWorkspaceBuildInTx prepopulates the Builder's cache with the last workspace build. This allows us
182188
// to avoid a repeated database query when the Builder's caller also needs the workspace build, e.g. auto-start &
183189
// auto-stop.
@@ -578,6 +584,7 @@ func (b *Builder) getParameters() (names, values []string, err error) {
578584
iferr!=nil {
579585
returnnil,nil,BuildError{http.StatusBadRequest,"Unable to build workspace with unsupported parameters",err}
580586
}
587+
581588
resolver:= codersdk.ParameterResolver{
582589
Rich:db2sdk.WorkspaceBuildParameters(lastBuildParameters),
583590
}
@@ -586,16 +593,24 @@ func (b *Builder) getParameters() (names, values []string, err error) {
586593
iferr!=nil {
587594
returnnil,nil,BuildError{http.StatusInternalServerError,"failed to convert template version parameter",err}
588595
}
589-
value,err:=resolver.ValidateResolve(
590-
tvp,
591-
b.findNewBuildParameterValue(templateVersionParameter.Name),
592-
)
593-
iferr!=nil {
594-
// At this point, we've queried all the data we need from the database,
595-
// so the only errors are problems with the request (missing data, failed
596-
// validation, immutable parameters, etc.)
597-
returnnil,nil,BuildError{http.StatusBadRequest,fmt.Sprintf("Unable to validate parameter %q",templateVersionParameter.Name),err}
596+
597+
varvaluestring
598+
if!b.dynamicParametersEnabled {
599+
varerrerror
600+
value,err=resolver.ValidateResolve(
601+
tvp,
602+
b.findNewBuildParameterValue(templateVersionParameter.Name),
603+
)
604+
iferr!=nil {
605+
// At this point, we've queried all the data we need from the database,
606+
// so the only errors are problems with the request (missing data, failed
607+
// validation, immutable parameters, etc.)
608+
returnnil,nil,BuildError{http.StatusBadRequest,fmt.Sprintf("Unable to validate parameter %q",templateVersionParameter.Name),err}
609+
}
610+
}else {
611+
value=resolver.Resolve(tvp,b.findNewBuildParameterValue(templateVersionParameter.Name))
598612
}
613+
599614
names=append(names,templateVersionParameter.Name)
600615
values=append(values,value)
601616
}

‎codersdk/organizations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ type CreateWorkspaceRequest struct {
227227
RichParameterValues []WorkspaceBuildParameter`json:"rich_parameter_values,omitempty"`
228228
AutomaticUpdatesAutomaticUpdates`json:"automatic_updates,omitempty"`
229229
TemplateVersionPresetID uuid.UUID`json:"template_version_preset_id,omitempty" format:"uuid"`
230+
EnableDynamicParametersbool`json:"enable_dynamic_parameters,omitempty"`
230231
}
231232

232233
func (c*Client)OrganizationByName(ctx context.Context,namestring) (Organization,error) {

‎codersdk/richparameters.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,26 @@ func (r *ParameterResolver) ValidateResolve(p TemplateVersionParameter, v *Works
190190
returnresolvedValue.Value,nil
191191
}
192192

193+
// Resolve returns the value of the parameter. It does not do any validation,
194+
// and is meant for use with the new dynamic parameters code path.
195+
func (r*ParameterResolver)Resolve(pTemplateVersionParameter,v*WorkspaceBuildParameter)string {
196+
prevV:=r.findLastValue(p)
197+
// First, the provided value
198+
resolvedValue:=v
199+
// Second, previous value if not ephemeral
200+
ifresolvedValue==nil&&!p.Ephemeral {
201+
resolvedValue=prevV
202+
}
203+
// Last, default value
204+
ifresolvedValue==nil {
205+
resolvedValue=&WorkspaceBuildParameter{
206+
Name:p.Name,
207+
Value:p.DefaultValue,
208+
}
209+
}
210+
returnresolvedValue.Value
211+
}
212+
193213
// findLastValue finds the value from the previous build and returns it, or nil if the parameter had no value in the
194214
// last build.
195215
func (r*ParameterResolver)findLastValue(pTemplateVersionParameter)*WorkspaceBuildParameter {

‎docs/reference/api/schemas.md

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎docs/reference/api/workspaces.md

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎site/src/api/typesGenerated.ts

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ const CreateWorkspacePageExperimental: FC = () => {
282282

283283
constworkspace=awaitcreateWorkspaceMutation.mutateAsync({
284284
...workspaceRequest,
285+
enable_dynamic_parameters:true,
285286
userId:owner.id,
286287
});
287288
onCreateWorkspace(workspace);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp