@@ -283,6 +283,10 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
283
283
284
284
// Check that the job has completed successfully
285
285
job , err := api .Database .GetProvisionerJobByID (ctx , templateVersion .JobID )
286
+ if httpapi .Is404Error (err ) {
287
+ httpapi .ResourceNotFound (rw )
288
+ return
289
+ }
286
290
if err != nil {
287
291
httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
288
292
Message : "Internal error fetching provisioner job." ,
@@ -292,7 +296,7 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
292
296
}
293
297
if ! job .CompletedAt .Valid {
294
298
httpapi .Write (ctx , rw , http .StatusTooEarly , codersdk.Response {
295
- Message : "Job hasn't completed! " ,
299
+ Message : "Template version job has not finished " ,
296
300
})
297
301
return
298
302
}
@@ -309,7 +313,8 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
309
313
input := preview.Input {
310
314
PlanJSON : plan ,
311
315
ParameterValues : map [string ]string {},
312
- // TODO: fill this out
316
+ // TODO: write a db query that fetches all of the data needed to fill out
317
+ // this owner value
313
318
Owner : previewtypes.WorkspaceOwner {
314
319
Groups : []string {"Everyone" },
315
320
},
@@ -357,7 +362,11 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
357
362
if result != nil {
358
363
response .Parameters = result .Parameters
359
364
}
360
- _ = stream .Send (response )
365
+ err = stream .Send (response )
366
+ if err != nil {
367
+ stream .Drop ()
368
+ return
369
+ }
361
370
362
371
// As the user types into the form, reprocess the state using their input,
363
372
// and respond with updates.
@@ -367,7 +376,11 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
367
376
case <- ctx .Done ():
368
377
stream .Close (websocket .StatusGoingAway )
369
378
return
370
- case update := <- updates :
379
+ case update , ok := <- updates :
380
+ if ! ok {
381
+ // The connection has been closed, so there is no one to write to
382
+ return
383
+ }
371
384
input .ParameterValues = update .Inputs
372
385
result , diagnostics := preview .Preview (ctx , input , fs )
373
386
response := codersdk.DynamicParametersResponse {
@@ -377,7 +390,11 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
377
390
if result != nil {
378
391
response .Parameters = result .Parameters
379
392
}
380
- _ = stream .Send (response )
393
+ err = stream .Send (response )
394
+ if err != nil {
395
+ stream .Drop ()
396
+ return
397
+ }
381
398
}
382
399
}
383
400
}
@@ -404,7 +421,7 @@ func (api *API) templateVersionRichParameters(rw http.ResponseWriter, r *http.Re
404
421
}
405
422
if ! job .CompletedAt .Valid {
406
423
httpapi .Write (ctx , rw , http .StatusTooEarly , codersdk.Response {
407
- Message : "Job hasn't completed! " ,
424
+ Message : "Template version job has not finished " ,
408
425
})
409
426
return
410
427
}
@@ -544,7 +561,7 @@ func (api *API) templateVersionVariables(rw http.ResponseWriter, r *http.Request
544
561
}
545
562
if ! job .CompletedAt .Valid {
546
563
httpapi .Write (ctx , rw , http .StatusForbidden , codersdk.Response {
547
- Message : "Job hasn't completed! " ,
564
+ Message : "Template version job has not finished " ,
548
565
})
549
566
return
550
567
}
0 commit comments