Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 33e75d9

Browse files
committed
API
1 parent f84fbf6 commit 33e75d9

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ func New(options *Options) *API {
461461
r.Get("/schema", api.templateVersionSchema)
462462
r.Get("/parameters", api.templateVersionParameters)
463463
r.Get("/rich-parameters", api.templateVersionRichParameters)
464+
r.Get("/variables", api.templateVersionVariables)
464465
r.Get("/resources", api.templateVersionResources)
465466
r.Get("/logs", api.templateVersionLogs)
466467
r.Route("/dry-run", func(r chi.Router) {

coderd/templateversions.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,56 @@ func (api *API) templateVersionRichParameters(rw http.ResponseWriter, r *http.Re
243243
httpapi.Write(ctx, rw, http.StatusOK, templateVersionParameters)
244244
}
245245

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+
246296
// @Summary Get parameters by template version
247297
// @ID get-parameters-by-template-version
248298
// @Security CoderSessionToken
@@ -1480,6 +1530,30 @@ func convertTemplateVersionParameter(param database.TemplateVersionParameter) (c
14801530
}, nil
14811531
}
14821532

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+
14831557
func watchTemplateChannel(id uuid.UUID) string {
14841558
return fmt.Sprintf("template:%s", id)
14851559
}

codersdk/templateversions.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ type TemplateVersionParameterOption struct {
5656
Icon string `json:"icon"`
5757
}
5858

59+
// TemplateVersionVariable represents a managed template variable.
60+
type TemplateVersionVariable struct {
61+
Name string `json:"name"`
62+
Description string `json:"description"`
63+
Type string `json:"type" enums:"string,number,bool"`
64+
Value string `json:"value"`
65+
DefaultValue string `json:"default_value"`
66+
Required bool `json:"required"`
67+
Sensitive bool `json:"sensitive"`
68+
}
69+
5970
// TemplateVersion returns a template version by ID.
6071
func (c *Client) TemplateVersion(ctx context.Context, id uuid.UUID) (TemplateVersion, error) {
6172
res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/templateversions/%s", id), nil)

0 commit comments

Comments
 (0)