@@ -141,6 +141,10 @@ next:
141
141
continue // immutables should not be passed to consecutive builds
142
142
}
143
143
144
+ if len (tvp .Options ) > 0 && ! isValidTemplateParameterOption (buildParameter , tvp .Options ) {
145
+ continue // do not propagate invalid options
146
+ }
147
+
144
148
for i , r := range resolved {
145
149
if r .Name == buildParameter .Name {
146
150
resolved [i ].Value = buildParameter .Value
@@ -180,10 +184,11 @@ func (pr *ParameterResolver) resolveWithInput(resolved []codersdk.WorkspaceBuild
180
184
// Parameter has not been resolved yet, so CLI needs to determine if user should input it.
181
185
182
186
firstTimeUse := pr .isFirstTimeUse (tvp .Name )
183
-
187
+ promptParameterOption := pr . isLastBuildParameterInvalidOption ( tvp )
184
188
if (tvp .Ephemeral && pr .promptBuildOptions ) ||
185
189
(action == WorkspaceCreate && tvp .Required ) ||
186
190
(action == WorkspaceCreate && ! tvp .Ephemeral ) ||
191
+ (action == WorkspaceUpdate && promptParameterOption ) ||
187
192
(action == WorkspaceUpdate && ! tvp .Mutable && firstTimeUse ) ||
188
193
(action == WorkspaceUpdate && tvp .Mutable && ! tvp .Ephemeral && pr .promptRichParameters ) {
189
194
parameterValue , err := cliui .RichParameter (inv , tvp )
@@ -206,6 +211,19 @@ func (pr *ParameterResolver) isFirstTimeUse(parameterName string) bool {
206
211
return findWorkspaceBuildParameter (parameterName , pr .lastBuildParameters ) == nil
207
212
}
208
213
214
+ func (pr * ParameterResolver ) isLastBuildParameterInvalidOption (templateVersionParameter codersdk.TemplateVersionParameter ) bool {
215
+ if len (templateVersionParameter .Options ) == 0 {
216
+ return false
217
+ }
218
+
219
+ for _ , buildParameter := range pr .lastBuildParameters {
220
+ if buildParameter .Name == templateVersionParameter .Name {
221
+ return ! isValidTemplateParameterOption (buildParameter , templateVersionParameter .Options )
222
+ }
223
+ }
224
+ return false
225
+ }
226
+
209
227
func findTemplateVersionParameter (workspaceBuildParameter codersdk.WorkspaceBuildParameter , templateVersionParameters []codersdk.TemplateVersionParameter ) * codersdk.TemplateVersionParameter {
210
228
for _ , tvp := range templateVersionParameters {
211
229
if tvp .Name == workspaceBuildParameter .Name {
@@ -223,3 +241,12 @@ func findWorkspaceBuildParameter(parameterName string, params []codersdk.Workspa
223
241
}
224
242
return nil
225
243
}
244
+
245
+ func isValidTemplateParameterOption (buildParameter codersdk.WorkspaceBuildParameter , options []codersdk.TemplateVersionParameterOption ) bool {
246
+ for _ , opt := range options {
247
+ if opt .Value == buildParameter .Value {
248
+ return true
249
+ }
250
+ }
251
+ return false
252
+ }
0 commit comments