Skip to content

Commit 82e016c

Browse files
committed
mark prebuilds as such and set their preset ids
1 parent 8faaa14 commit 82e016c

File tree

20 files changed

+345
-424
lines changed

20 files changed

+345
-424
lines changed

coderd/apidoc/docs.go

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/provisionerdserver/provisionerdserver.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import (
2727

2828
"cdr.dev/slog"
2929

30+
"github.com/coder/quartz"
31+
3032
"github.com/coder/coder/v2/coderd/apikey"
3133
"github.com/coder/coder/v2/coderd/audit"
3234
"github.com/coder/coder/v2/coderd/database"
@@ -46,7 +48,6 @@ import (
4648
"github.com/coder/coder/v2/provisionerd/proto"
4749
"github.com/coder/coder/v2/provisionersdk"
4850
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
49-
"github.com/coder/quartz"
5051
)
5152

5253
const (
@@ -635,6 +636,7 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
635636
WorkspaceBuildId: workspaceBuild.ID.String(),
636637
WorkspaceOwnerLoginType: string(owner.LoginType),
637638
WorkspaceOwnerRbacRoles: ownerRbacRoles,
639+
IsPrebuild: input.IsPrebuild,
638640
},
639641
LogLevel: input.LogLevel,
640642
},
@@ -2460,6 +2462,7 @@ type TemplateVersionImportJob struct {
24602462
type WorkspaceProvisionJob struct {
24612463
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`
24622464
DryRun bool `json:"dry_run"`
2465+
IsPrebuild bool `json:"is_prebuild,omitempty"`
24632466
LogLevel string `json:"log_level,omitempty"`
24642467
}
24652468

coderd/workspacebuilds.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
337337
Initiator(apiKey.UserID).
338338
RichParameterValues(createBuild.RichParameterValues).
339339
LogLevel(string(createBuild.LogLevel)).
340-
DeploymentValues(api.Options.DeploymentValues)
340+
DeploymentValues(api.Options.DeploymentValues).
341+
TemplateVersionPresetID(createBuild.TemplateVersionPresetID)
341342

342343
var (
343344
previousWorkspaceBuild database.WorkspaceBuild

coderd/workspaces.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,8 @@ func createWorkspace(
671671
Reason(database.BuildReasonInitiator).
672672
Initiator(initiatorID).
673673
ActiveVersion().
674-
RichParameterValues(req.RichParameterValues)
674+
RichParameterValues(req.RichParameterValues).
675+
TemplateVersionPresetID(req.TemplateVersionPresetID)
675676
if req.TemplateVersionID != uuid.Nil {
676677
builder = builder.VersionID(req.TemplateVersionID)
677678
}

coderd/wsbuilder/wsbuilder.go

+36-17
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,10 @@ type Builder struct {
5151
logLevel string
5252
deploymentValues *codersdk.DeploymentValues
5353

54-
richParameterValues []codersdk.WorkspaceBuildParameter
55-
initiator uuid.UUID
56-
reason database.BuildReason
54+
richParameterValues []codersdk.WorkspaceBuildParameter
55+
initiator uuid.UUID
56+
reason database.BuildReason
57+
templateVersionPresetID uuid.UUID
5758

5859
// used during build, makes function arguments less verbose
5960
ctx context.Context
@@ -73,6 +74,8 @@ type Builder struct {
7374
parameterNames *[]string
7475
parameterValues *[]string
7576

77+
prebuild bool
78+
7679
verifyNoLegacyParametersOnce bool
7780
}
7881

@@ -168,6 +171,12 @@ func (b Builder) RichParameterValues(p []codersdk.WorkspaceBuildParameter) Build
168171
return b
169172
}
170173

174+
func (b Builder) MarkPrebuild() Builder {
175+
// nolint: revive
176+
b.prebuild = true
177+
return b
178+
}
179+
171180
// SetLastWorkspaceBuildInTx prepopulates the Builder's cache with the last workspace build. This allows us
172181
// to avoid a repeated database query when the Builder's caller also needs the workspace build, e.g. auto-start &
173182
// auto-stop.
@@ -192,6 +201,12 @@ func (b Builder) SetLastWorkspaceBuildJobInTx(job *database.ProvisionerJob) Buil
192201
return b
193202
}
194203

204+
func (b Builder) TemplateVersionPresetID(id uuid.UUID) Builder {
205+
// nolint: revive
206+
b.templateVersionPresetID = id
207+
return b
208+
}
209+
195210
type BuildError struct {
196211
// Status is a suitable HTTP status code
197212
Status int
@@ -295,6 +310,7 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
295310
input, err := json.Marshal(provisionerdserver.WorkspaceProvisionJob{
296311
WorkspaceBuildID: workspaceBuildID,
297312
LogLevel: b.logLevel,
313+
IsPrebuild: b.prebuild,
298314
})
299315
if err != nil {
300316
return nil, nil, nil, BuildError{
@@ -363,20 +379,23 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
363379
var workspaceBuild database.WorkspaceBuild
364380
err = b.store.InTx(func(store database.Store) error {
365381
err = store.InsertWorkspaceBuild(b.ctx, database.InsertWorkspaceBuildParams{
366-
ID: workspaceBuildID,
367-
CreatedAt: now,
368-
UpdatedAt: now,
369-
WorkspaceID: b.workspace.ID,
370-
TemplateVersionID: templateVersionID,
371-
BuildNumber: buildNum,
372-
ProvisionerState: state,
373-
InitiatorID: b.initiator,
374-
Transition: b.trans,
375-
JobID: provisionerJob.ID,
376-
Reason: b.reason,
377-
Deadline: time.Time{}, // set by provisioner upon completion
378-
MaxDeadline: time.Time{}, // set by provisioner upon completion
379-
TemplateVersionPresetID: uuid.NullUUID{}, // TODO (sasswart): add this in from the caller
382+
ID: workspaceBuildID,
383+
CreatedAt: now,
384+
UpdatedAt: now,
385+
WorkspaceID: b.workspace.ID,
386+
TemplateVersionID: templateVersionID,
387+
BuildNumber: buildNum,
388+
ProvisionerState: state,
389+
InitiatorID: b.initiator,
390+
Transition: b.trans,
391+
JobID: provisionerJob.ID,
392+
Reason: b.reason,
393+
Deadline: time.Time{}, // set by provisioner upon completion
394+
MaxDeadline: time.Time{}, // set by provisioner upon completion
395+
TemplateVersionPresetID: uuid.NullUUID{
396+
UUID: b.templateVersionPresetID,
397+
Valid: b.templateVersionPresetID != uuid.Nil,
398+
},
380399
})
381400
if err != nil {
382401
code := http.StatusInternalServerError

codersdk/organizations.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,9 @@ type CreateWorkspaceRequest struct {
217217
TTLMillis *int64 `json:"ttl_ms,omitempty"`
218218
// RichParameterValues allows for additional parameters to be provided
219219
// during the initial provision.
220-
RichParameterValues []WorkspaceBuildParameter `json:"rich_parameter_values,omitempty"`
221-
AutomaticUpdates AutomaticUpdates `json:"automatic_updates,omitempty"`
220+
RichParameterValues []WorkspaceBuildParameter `json:"rich_parameter_values,omitempty"`
221+
AutomaticUpdates AutomaticUpdates `json:"automatic_updates,omitempty"`
222+
TemplateVersionPresetID uuid.UUID `json:"template_version_preset_id,omitempty" format:"uuid"`
222223
}
223224

224225
func (c *Client) OrganizationByName(ctx context.Context, name string) (Organization, error) {

codersdk/workspaces.go

+2
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ type CreateWorkspaceBuildRequest struct {
107107

108108
// Log level changes the default logging verbosity of a provider ("info" if empty).
109109
LogLevel ProvisionerLogLevel `json:"log_level,omitempty" validate:"omitempty,oneof=debug"`
110+
// TemplateVersionPresetID is the ID of the template version preset to use for the build.
111+
TemplateVersionPresetID uuid.UUID `json:"template_version_preset_id,omitempty" format:"uuid"`
110112
}
111113

112114
type WorkspaceOptions struct {

docs/reference/api/builds.md

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)