Skip to content

Commit 68fb748

Browse files
committed
chore: keep previous workspace build parameters for dynamic params
1 parent 513a468 commit 68fb748

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

coderd/wsbuilder/wsbuilder.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,11 @@ func (b *Builder) getParameters() (names, values []string, err error) {
623623
return nil, nil, BuildError{http.StatusBadRequest, "Unable to build workspace with unsupported parameters", err}
624624
}
625625

626+
lastBuildParameterValues := db2sdk.WorkspaceBuildParameters(lastBuildParameters)
627+
resolver := codersdk.ParameterResolver{
628+
Rich: lastBuildParameterValues,
629+
}
630+
626631
// Dynamic parameters skip all parameter validation.
627632
// Deleting a workspace also should skip parameter validation.
628633
// Pass the user's input as is.
@@ -632,19 +637,33 @@ func (b *Builder) getParameters() (names, values []string, err error) {
632637
// conditional parameter existence, the static frame of reference
633638
// is not sufficient. So assume the user is correct, or pull in the
634639
// dynamic param code to find the actual parameters.
640+
latestValues := make(map[string]string)
641+
for _, latest := range b.richParameterValues {
642+
latestValues[latest.Name] = latest.Value
643+
}
644+
645+
// Merge the inputs with values from the previous build.
646+
for _, last := range lastBuildParameterValues {
647+
// TODO: Ideally we use the resolver here and look at parameter
648+
// fields such as 'ephemeral'. This requires loading the terraform
649+
// files. For now, just send the previous inputs as is.
650+
if _, exists := latestValues[last.Name]; exists {
651+
continue
652+
}
653+
names = append(names, last.Name)
654+
values = append(values, last.Value)
655+
}
656+
635657
for _, value := range b.richParameterValues {
636658
names = append(names, value.Name)
637659
values = append(values, value.Value)
638660
}
661+
639662
b.parameterNames = &names
640663
b.parameterValues = &values
641664
return names, values, nil
642665
}
643666

644-
resolver := codersdk.ParameterResolver{
645-
Rich: db2sdk.WorkspaceBuildParameters(lastBuildParameters),
646-
}
647-
648667
for _, templateVersionParameter := range templateVersionParameters {
649668
tvp, err := db2sdk.TemplateVersionParameter(templateVersionParameter)
650669
if err != nil {

0 commit comments

Comments
 (0)