Skip to content

Commit a59a03d

Browse files
committed
Add provision job metadata to identify prebuilds
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent b7c43f6 commit a59a03d

File tree

7 files changed

+23
-1
lines changed

7 files changed

+23
-1
lines changed

coderd/prebuilds/controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@ func (c Controller) provision(ctx context.Context, db database.Store, prebuildID
323323
Reason(database.BuildReasonInitiator).
324324
Initiator(PrebuildOwnerUUID).
325325
ActiveVersion().
326-
VersionID(template.ActiveVersionID)
326+
VersionID(template.ActiveVersionID).
327+
MarkPrebuild()
327328
// RichParameterValues(req.RichParameterValues) // TODO: fetch preset's params
328329

329330
_, provisionerJob, _, err := builder.Build(

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,7 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
621621
WorkspaceOwnerSshPrivateKey: ownerSSHPrivateKey,
622622
WorkspaceBuildId: workspaceBuild.ID.String(),
623623
WorkspaceOwnerLoginType: string(owner.LoginType),
624+
IsPrebuild: input.IsPrebuild,
624625
},
625626
LogLevel: input.LogLevel,
626627
},
@@ -2345,6 +2346,7 @@ type TemplateVersionImportJob struct {
23452346
type WorkspaceProvisionJob struct {
23462347
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`
23472348
DryRun bool `json:"dry_run"`
2349+
IsPrebuild bool `json:"is_prebuild,omitempty"`
23482350
LogLevel string `json:"log_level,omitempty"`
23492351
}
23502352

coderd/wsbuilder/wsbuilder.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ type Builder struct {
7272
lastBuildJob *database.ProvisionerJob
7373
parameterNames *[]string
7474
parameterValues *[]string
75+
prebuild bool
7576

7677
verifyNoLegacyParametersOnce bool
7778
}
@@ -168,6 +169,12 @@ func (b Builder) RichParameterValues(p []codersdk.WorkspaceBuildParameter) Build
168169
return b
169170
}
170171

172+
func (b Builder) MarkPrebuild() Builder {
173+
// nolint: revive
174+
b.prebuild = true
175+
return b
176+
}
177+
171178
// SetLastWorkspaceBuildInTx prepopulates the Builder's cache with the last workspace build. This allows us
172179
// to avoid a repeated database query when the Builder's caller also needs the workspace build, e.g. auto-start &
173180
// auto-stop.
@@ -295,6 +302,7 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
295302
input, err := json.Marshal(provisionerdserver.WorkspaceProvisionJob{
296303
WorkspaceBuildID: workspaceBuildID,
297304
LogLevel: b.logLevel,
305+
IsPrebuild: b.prebuild,
298306
})
299307
if err != nil {
300308
return nil, nil, nil, BuildError{

provisioner/terraform/provision.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,9 @@ func provisionEnv(
262262
"CODER_WORKSPACE_TEMPLATE_VERSION="+metadata.GetTemplateVersion(),
263263
"CODER_WORKSPACE_BUILD_ID="+metadata.GetWorkspaceBuildId(),
264264
)
265+
if metadata.GetIsPrebuild() {
266+
env = append(env, "CODER_WORKSPACE_IS_PREBUILD=true")
267+
}
265268
for key, value := range provisionersdk.AgentScriptEnv() {
266269
env = append(env, key+"="+value)
267270
}
@@ -278,6 +281,7 @@ func provisionEnv(
278281
// The idea behind using TF_LOG=JSON instead of TF_LOG=debug is ensuring the proper log format.
279282
env = append(env, "TF_LOG=JSON")
280283
}
284+
281285
return env, nil
282286
}
283287

provisionerd/provisionerd.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ func (p *Server) acquireAndRunOne(client proto.DRPCProvisionerDaemonClient) {
355355
slog.F("workspace_build_id", build.WorkspaceBuildId),
356356
slog.F("workspace_id", build.Metadata.WorkspaceId),
357357
slog.F("workspace_name", build.WorkspaceName),
358+
slog.F("is_prebuild", build.Metadata.IsPrebuild),
358359
)
359360

360361
span.SetAttributes(
@@ -364,6 +365,7 @@ func (p *Server) acquireAndRunOne(client proto.DRPCProvisionerDaemonClient) {
364365
attribute.String("workspace_owner_id", build.Metadata.WorkspaceOwnerId),
365366
attribute.String("workspace_owner", build.Metadata.WorkspaceOwner),
366367
attribute.String("workspace_transition", build.Metadata.WorkspaceTransition.String()),
368+
attribute.Bool("is_prebuild", build.Metadata.IsPrebuild),
367369
)
368370
}
369371

provisionersdk/proto/provisioner.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ message Metadata {
275275
string workspace_owner_ssh_private_key = 16;
276276
string workspace_build_id = 17;
277277
string workspace_owner_login_type = 18;
278+
bool is_prebuild = 19;
278279
}
279280

280281
// Config represents execution configuration shared by all subsequent requests in the Session

site/e2e/provisionerGenerated.ts

Lines changed: 4 additions & 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)