Skip to content

Commit 16ce36c

Browse files
committed
mark prebuilds as such and set their preset ids
1 parent 07e9613 commit 16ce36c

File tree

20 files changed

+295
-214
lines changed

20 files changed

+295
-214
lines changed

coderd/apidoc/docs.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 4 additions & 1 deletion
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
},
@@ -2383,6 +2385,7 @@ type TemplateVersionImportJob struct {
23832385
type WorkspaceProvisionJob struct {
23842386
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`
23852387
DryRun bool `json:"dry_run"`
2388+
IsPrebuild bool `json:"is_prebuild,omitempty"`
23862389
LogLevel string `json:"log_level,omitempty"`
23872390
}
23882391

coderd/workspacebuilds.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,8 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
332332
Initiator(apiKey.UserID).
333333
RichParameterValues(createBuild.RichParameterValues).
334334
LogLevel(string(createBuild.LogLevel)).
335-
DeploymentValues(api.Options.DeploymentValues)
335+
DeploymentValues(api.Options.DeploymentValues).
336+
TemplateVersionPresetID(createBuild.TemplateVersionPresetID)
336337

337338
var (
338339
previousWorkspaceBuild database.WorkspaceBuild

coderd/workspaces.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,8 @@ func createWorkspace(
662662
Reason(database.BuildReasonInitiator).
663663
Initiator(initiatorID).
664664
ActiveVersion().
665-
RichParameterValues(req.RichParameterValues)
665+
RichParameterValues(req.RichParameterValues).
666+
TemplateVersionPresetID(req.TemplateVersionPresetID)
666667
if req.TemplateVersionID != uuid.Nil {
667668
builder = builder.VersionID(req.TemplateVersionID)
668669
}

coderd/wsbuilder/wsbuilder.go

Lines changed: 36 additions & 17 deletions
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

Lines changed: 3 additions & 2 deletions
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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ type CreateWorkspaceBuildRequest struct {
106106

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

111113
type WorkspaceOptions struct {

docs/reference/api/builds.md

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy