@Summary Get template version by ID @ID get-template-version-by-id @Security CoderSessionToken @Produce json @Tags Templates @Param templateversion path string true "Template version ID" format(uuid) @Success 200 {object} codersdk.TemplateVersion @Router /api/v2/templateversions/{templateversion} [g
(rw http.ResponseWriter, r *http.Request)
| 55 | // @Success 200 {object} codersdk.TemplateVersion |
| 56 | // @Router /api/v2/templateversions/{templateversion} [get] |
| 57 | func (api *API) templateVersion(rw http.ResponseWriter, r *http.Request) { |
| 58 | ctx := r.Context() |
| 59 | templateVersion := httpmw.TemplateVersionParam(r) |
| 60 | |
| 61 | jobs, err := api.Database.GetProvisionerJobsByIDsWithQueuePosition(ctx, database.GetProvisionerJobsByIDsWithQueuePositionParams{ |
| 62 | IDs: []uuid.UUID{templateVersion.JobID}, |
| 63 | StaleIntervalMS: provisionerdserver.StaleInterval.Milliseconds(), |
| 64 | }) |
| 65 | if err != nil || len(jobs) == 0 { |
| 66 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 67 | Message: "Internal error fetching provisioner job.", |
| 68 | Detail: err.Error(), |
| 69 | }) |
| 70 | return |
| 71 | } |
| 72 | |
| 73 | var matchedProvisioners *codersdk.MatchedProvisioners |
| 74 | if jobs[0].ProvisionerJob.JobStatus == database.ProvisionerJobStatusPending { |
| 75 | // nolint: gocritic // The user hitting this endpoint may not have |
| 76 | // permission to read provisioner daemons, but we want to show them |
| 77 | // information about the provisioner daemons that are available. |
| 78 | provisioners, err := api.Database.GetProvisionerDaemonsByOrganization(dbauthz.AsSystemReadProvisionerDaemons(ctx), database.GetProvisionerDaemonsByOrganizationParams{ |
| 79 | OrganizationID: jobs[0].ProvisionerJob.OrganizationID, |
| 80 | WantTags: jobs[0].ProvisionerJob.Tags, |
| 81 | }) |
| 82 | if err != nil { |
| 83 | api.Logger.Error(ctx, "failed to fetch provisioners for job id", slog.F("job_id", jobs[0].ProvisionerJob.ID), slog.Error(err)) |
| 84 | } else { |
| 85 | matchedProvisioners = ptr.Ref(db2sdk.MatchedProvisioners(provisioners, dbtime.Now(), provisionerdserver.StaleInterval)) |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | schemas, err := api.Database.GetParameterSchemasByJobID(ctx, jobs[0].ProvisionerJob.ID) |
| 90 | if errors.Is(err, sql.ErrNoRows) { |
| 91 | err = nil |
| 92 | } |
| 93 | if err != nil { |
| 94 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 95 | Message: "Internal error listing parameter schemas.", |
| 96 | Detail: err.Error(), |
| 97 | }) |
| 98 | return |
| 99 | } |
| 100 | |
| 101 | var warnings []codersdk.TemplateVersionWarning |
| 102 | if len(schemas) > 0 { |
| 103 | warnings = append(warnings, codersdk.TemplateVersionWarningUnsupportedWorkspaces) |
| 104 | } |
| 105 | |
| 106 | httpapi.Write(ctx, rw, http.StatusOK, convertTemplateVersion(templateVersion, convertProvisionerJob(jobs[0]), matchedProvisioners, warnings)) |
| 107 | } |
| 108 | |
| 109 | // @Summary Patch template version by ID |
| 110 | // @ID patch-template-version-by-id |
nothing calls this directly
no test coverage detected