Skip to content

Commit 6dcb851

Browse files
committed
chore: send modules archive over the proto messages
Serializing modules to disk prevents an external download
1 parent e740872 commit 6dcb851

File tree

15 files changed

+1498
-3006
lines changed

15 files changed

+1498
-3006
lines changed

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,20 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
510510
if err != nil {
511511
return nil, failJob(fmt.Sprintf("get owner: %s", err))
512512
}
513+
tfvals, err := s.Database.GetTemplateVersionTerraformValues(ctx, templateVersion.ID)
514+
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
515+
// Allow ErrNoRows here as terraform values are not present on older template versions.
516+
return nil, failJob(fmt.Sprintf("get template version terraform values: %s", err))
517+
}
518+
var cachedModulesData []byte
519+
if tfvals.CachedModuleFiles.Valid && tfvals.CachedModuleFiles.UUID != uuid.Nil {
520+
cachedModules, err := s.Database.GetFileByID(ctx, tfvals.CachedModuleFiles.UUID)
521+
if err != nil {
522+
return nil, failJob(fmt.Sprintf("get cached module files: %s", err))
523+
}
524+
cachedModulesData = cachedModules.Data
525+
}
526+
513527
var ownerSSHPublicKey, ownerSSHPrivateKey string
514528
if ownerSSHKey, err := s.Database.GetGitSSHKey(ctx, owner.ID); err != nil {
515529
if !xerrors.Is(err, sql.ErrNoRows) {
@@ -702,6 +716,7 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
702716
activeVersion := template.ActiveVersionID == templateVersion.ID
703717
protoJob.Type = &proto.AcquiredJob_WorkspaceBuild_{
704718
WorkspaceBuild: &proto.AcquiredJob_WorkspaceBuild{
719+
InitialModulesTar: cachedModulesData, // TODO: This might exceed the max message size
705720
WorkspaceBuildId: workspaceBuild.ID.String(),
706721
WorkspaceName: workspace.Name,
707722
State: workspaceBuild.ProvisionerState,

provisioner/echo/serve.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func (*echo) Parse(sess *provisionersdk.Session, _ *proto.ParseRequest, _ <-chan
207207
}
208208

209209
func (*echo) Init(sess *provisionersdk.Session, req *proto.InitRequest, canceledOrComplete <-chan struct{}) *proto.InitComplete {
210-
err := sess.Files.ExtractArchive(sess.Context(), sess.Logger, afero.NewOsFs(), req.TemplateSourceArchive)
210+
err := sess.Files.ExtractArchive(sess.Context(), sess.Logger, afero.NewOsFs(), req.TemplateSourceArchive, req.GetInitialModuleTar())
211211
if err != nil {
212212
return provisionersdk.InitErrorf("extract archive: %s", err.Error())
213213
}

provisioner/terraform/provision.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (s *server) Init(
8484
logTerraformEnvVars(sess)
8585

8686
// TODO: These logs should probably be streamed back to the provisioner runner.
87-
err := sess.Files.ExtractArchive(ctx, s.logger, afero.NewOsFs(), request.GetTemplateSourceArchive())
87+
err := sess.Files.ExtractArchive(ctx, s.logger, afero.NewOsFs(), request.GetTemplateSourceArchive(), request.GetInitialModuleTar())
8888
if err != nil {
8989
return provisionersdk.InitErrorf("extract template archive: %s", err)
9090
}

0 commit comments

Comments
 (0)