MCPcopy Create free account
hub / github.com/coder/coder / createTemplateVersion

Method createTemplateVersion

scaletest/prebuilds/run.go:330–379  ·  view source on GitHub ↗
(ctx context.Context, templateID uuid.UUID, numPresets, numPresetPrebuilds int)

Source from the content-addressed store, hash-verified

328}
329
330func (r *Runner) createTemplateVersion(ctx context.Context, templateID uuid.UUID, numPresets, numPresetPrebuilds int) (codersdk.TemplateVersion, error) {
331 tarData, err := TemplateTarData(numPresets, numPresetPrebuilds)
332 if err != nil {
333 return codersdk.TemplateVersion{}, xerrors.Errorf("create prebuilds template tar: %w", err)
334 }
335 uploadResp, err := r.client.Upload(ctx, codersdk.ContentTypeTar, bytes.NewReader(tarData))
336 if err != nil {
337 return codersdk.TemplateVersion{}, xerrors.Errorf("upload prebuilds template tar: %w", err)
338 }
339
340 versionReq := codersdk.CreateTemplateVersionRequest{
341 TemplateID: templateID,
342 FileID: uploadResp.ID,
343 Message: "Template version for scaletest prebuilds",
344 StorageMethod: codersdk.ProvisionerStorageMethodFile,
345 Provisioner: codersdk.ProvisionerTypeTerraform,
346 ProvisionerTags: r.cfg.ProvisionerTags,
347 }
348 version, err := r.client.CreateTemplateVersion(ctx, r.cfg.OrganizationID, versionReq)
349 if err != nil {
350 return codersdk.TemplateVersion{}, xerrors.Errorf("create template version: %w", err)
351 }
352 if version.MatchedProvisioners != nil && version.MatchedProvisioners.Count == 0 {
353 return codersdk.TemplateVersion{}, xerrors.Errorf("no provisioners matched for template version")
354 }
355
356 const pollInterval = 2 * time.Second
357 versionCtx, cancel := context.WithTimeout(ctx, r.cfg.TemplateVersionJobTimeout)
358 defer cancel()
359
360 tkr := r.cfg.Clock.TickerFunc(versionCtx, pollInterval, func() error {
361 version, err := r.client.TemplateVersion(versionCtx, version.ID)
362 if err != nil {
363 return xerrors.Errorf("get template version: %w", err)
364 }
365 switch version.Job.Status {
366 case codersdk.ProvisionerJobSucceeded:
367 return errTickerDone
368 case codersdk.ProvisionerJobPending, codersdk.ProvisionerJobRunning:
369 return nil
370 default:
371 return xerrors.Errorf("template version provisioning failed: status %s", version.Job.Status)
372 }
373 })
374 err = tkr.Wait()
375 if !xerrors.Is(err, errTickerDone) {
376 return codersdk.TemplateVersion{}, xerrors.Errorf("wait for template version provisioning: %w", err)
377 }
378 return version, nil
379}
380
381var errTickerDone = xerrors.New("done")
382

Callers 6

RunMethod · 0.95
createTemplateVersionFunction · 0.45
createTemplateFnFunction · 0.45

Calls 7

TemplateTarDataFunction · 0.70
UploadMethod · 0.65
CreateTemplateVersionMethod · 0.65
TemplateVersionMethod · 0.65
WaitMethod · 0.65
ErrorfMethod · 0.45
IsMethod · 0.45

Tested by

no test coverage detected