@@ -243,6 +243,56 @@ func (api *API) templateVersionRichParameters(rw http.ResponseWriter, r *http.Re
243
243
httpapi .Write (ctx , rw , http .StatusOK , templateVersionParameters )
244
244
}
245
245
246
+ // @Summary Get template variables by template version
247
+ // @ID get-template-variables-by-template-version
248
+ // @Security CoderSessionToken
249
+ // @Produce json
250
+ // @Tags Templates
251
+ // @Param templateversion path string true "Template version ID" format(uuid)
252
+ // @Success 200 {array} codersdk.TemplateVersionVariable
253
+ // @Router /templateversions/{templateversion}/variables [get]
254
+ func (api * API ) templateVersionVariables (rw http.ResponseWriter , r * http.Request ) {
255
+ ctx := r .Context ()
256
+ templateVersion := httpmw .TemplateVersionParam (r )
257
+ template := httpmw .TemplateParam (r )
258
+ if ! api .Authorize (r , rbac .ActionRead , templateVersion .RBACObject (template )) {
259
+ httpapi .ResourceNotFound (rw )
260
+ return
261
+ }
262
+ job , err := api .Database .GetProvisionerJobByID (ctx , templateVersion .JobID )
263
+ if err != nil {
264
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
265
+ Message : "Internal error fetching provisioner job." ,
266
+ Detail : err .Error (),
267
+ })
268
+ return
269
+ }
270
+ if ! job .CompletedAt .Valid {
271
+ httpapi .Write (ctx , rw , http .StatusPreconditionFailed , codersdk.Response {
272
+ Message : "Job hasn't completed!" ,
273
+ })
274
+ return
275
+ }
276
+ dbTemplateVersionVariables , err := api .Database .GetTemplateVersionVariables (ctx , templateVersion .ID )
277
+ if err != nil {
278
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
279
+ Message : "Internal error fetching template version variables." ,
280
+ Detail : err .Error (),
281
+ })
282
+ return
283
+ }
284
+
285
+ templateVersionVariables , err := convertTemplateVersionParameters (dbTemplateVersionVariables )
286
+ if err != nil {
287
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
288
+ Message : "Internal error converting template version parameter." ,
289
+ Detail : err .Error (),
290
+ })
291
+ return
292
+ }
293
+ httpapi .Write (ctx , rw , http .StatusOK , templateVersionVariables )
294
+ }
295
+
246
296
// @Summary Get parameters by template version
247
297
// @ID get-parameters-by-template-version
248
298
// @Security CoderSessionToken
@@ -1480,6 +1530,30 @@ func convertTemplateVersionParameter(param database.TemplateVersionParameter) (c
1480
1530
}, nil
1481
1531
}
1482
1532
1533
+ func convertTemplateVersionVariables (dbVariables []database.TemplateVersionVariable ) ([]codersdk.TemplateVersionVariable , error ) {
1534
+ variables := make ([]codersdk.TemplateVersionVariable , 0 )
1535
+ for _ , dbVariable := range dbVariables {
1536
+ param , err := convertTemplateVersionVariable (dbVariable )
1537
+ if err != nil {
1538
+ return nil , err
1539
+ }
1540
+ variables = append (variables , param )
1541
+ }
1542
+ return variables , nil
1543
+ }
1544
+
1545
+ func convertTemplateVersionVariable (variable database.TemplateVersionVariable ) (codersdk.TemplateVersionVariable , error ) {
1546
+ return codersdk.TemplateVersionVariable {
1547
+ Name : variable .Name ,
1548
+ Description : variable .Description ,
1549
+ Type : variable .Type ,
1550
+ Value : variable .Value ,
1551
+ DefaultValue : variable .DefaultValue ,
1552
+ Required : variable .Required ,
1553
+ Sensitive : variable .Sensitive ,
1554
+ }, nil
1555
+ }
1556
+
1483
1557
func watchTemplateChannel (id uuid.UUID ) string {
1484
1558
return fmt .Sprintf ("template:%s" , id )
1485
1559
}
0 commit comments