MCPcopy Index your code
hub / github.com/coder/coder / prepWorkspaceBuild

Function prepWorkspaceBuild

cli/create.go:564–708  ·  view source on GitHub ↗

prepWorkspaceBuild will ensure a workspace build will succeed on the latest template version. Any missing params will be prompted to the user. It supports rich parameters.

(inv *serpent.Invocation, client *codersdk.Client, args prepWorkspaceBuildArgs)

Source from the content-addressed store, hash-verified

562// prepWorkspaceBuild will ensure a workspace build will succeed on the latest template version.
563// Any missing params will be prompted to the user. It supports rich parameters.
564func prepWorkspaceBuild(inv *serpent.Invocation, client *codersdk.Client, args prepWorkspaceBuildArgs) ([]codersdk.WorkspaceBuildParameter, error) {
565 ctx := inv.Context()
566
567 templateVersion, err := client.TemplateVersion(ctx, args.TemplateVersionID)
568 if err != nil {
569 return nil, xerrors.Errorf("get template version: %w", err)
570 }
571
572 dynamicParameters := true
573 if templateVersion.TemplateID != nil {
574 // TODO: This fetch is often redundant, as the caller often has the template already.
575 template, err := client.Template(ctx, *templateVersion.TemplateID)
576 if err != nil {
577 return nil, xerrors.Errorf("get template: %w", err)
578 }
579 dynamicParameters = !template.UseClassicParameterFlow
580 }
581
582 parameterFile := map[string]string{}
583 if args.RichParameterFile != "" {
584 parameterFile, err = parseParameterMapFile(args.RichParameterFile)
585 if err != nil {
586 return nil, xerrors.Errorf("can't parse parameter map file: %w", err)
587 }
588 }
589
590 resolver := new(ParameterResolver).
591 WithLastBuildParameters(args.LastBuildParameters).
592 WithSourceWorkspaceParameters(args.SourceWorkspaceParameters).
593 WithPromptEphemeralParameters(args.PromptEphemeralParameters).
594 WithEphemeralParameters(args.EphemeralParameters).
595 WithPresetParameters(args.PresetParameters).
596 WithPromptRichParameters(args.PromptRichParameters).
597 WithRichParameters(args.RichParameters).
598 WithRichParametersFile(parameterFile).
599 WithRichParametersDefaults(args.RichParameterDefaults).
600 WithUseParameterDefaults(args.UseParameterDefaults)
601
602 var templateVersionParameters []codersdk.TemplateVersionParameter
603 if !dynamicParameters {
604 templateVersionParameters, err = client.TemplateVersionRichParameters(inv.Context(), templateVersion.ID)
605 if err != nil {
606 return nil, xerrors.Errorf("get template version rich parameters: %w", err)
607 }
608 } else {
609 var ownerID uuid.UUID
610 { // Putting in its own block to limit scope of owningMember, as it might be nil
611 owningMember, err := client.OrganizationMember(ctx, templateVersion.OrganizationID.String(), args.Owner)
612 if err != nil {
613 // This is unfortunate, but if we are an org owner, then we can create workspaces
614 // for users that are not part of the organization.
615 owningUser, uerr := client.User(ctx, args.Owner)
616 if uerr != nil {
617 return nil, xerrors.Errorf("get owning member: %w", err)
618 }
619 ownerID = owningUser.ID
620 } else {
621 ownerID = owningMember.UserID

Callers 5

CreateMethod · 0.85
scaletestAutostartMethod · 0.85

Calls 15

ExternalAuthFunction · 0.92
WarnMatchedProvisionersFunction · 0.92
ProvisionerJobFunction · 0.92
WorkspaceResourcesFunction · 0.92
parseParameterMapFileFunction · 0.85
TemplateMethod · 0.80
WithRichParametersMethod · 0.80
WithPresetParametersMethod · 0.80

Tested by

no test coverage detected