Skip to content

Commit e8d8b98

Browse files
committed
feat: handle uploading data files in runner
1 parent 99d4d54 commit e8d8b98

File tree

2 files changed

+134
-1
lines changed

2 files changed

+134
-1
lines changed

provisionerd/runner/runner.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -717,11 +717,13 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(
717717
}
718718
}()
719719

720+
var moduleFilesUpload *sdkproto.DataBuilder
720721
for {
721722
msg, err := r.session.Recv()
722723
if err != nil {
723724
return nil, xerrors.Errorf("recv import provision: %w", err)
724725
}
726+
725727
switch msgType := msg.Type.(type) {
726728
case *sdkproto.Response_Log:
727729
r.logProvisionerJobLog(context.Background(), msgType.Log.Level, "template import provision job logged",
@@ -735,6 +737,30 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(
735737
Output: msgType.Log.Output,
736738
Stage: stage,
737739
})
740+
case *sdkproto.Response_DataUpload:
741+
c := msgType.DataUpload
742+
if c.UploadType != sdkproto.DataUploadType_UPLOAD_TYPE_MODULE_FILES {
743+
return nil, xerrors.Errorf("invalid data upload type: %q", c.UploadType)
744+
}
745+
746+
if moduleFilesUpload != nil {
747+
return nil, xerrors.New("multiple module data uploads received, only expect 1")
748+
}
749+
750+
moduleFilesUpload, err = sdkproto.NewDataBuilder(c)
751+
if err != nil {
752+
return nil, xerrors.Errorf("create data builder: %w", err)
753+
}
754+
case *sdkproto.Response_ChunkPiece:
755+
c := msgType.ChunkPiece
756+
if moduleFilesUpload == nil {
757+
return nil, xerrors.New("received chunk piece before module files data upload")
758+
}
759+
760+
_, err := moduleFilesUpload.Add(c)
761+
if err != nil {
762+
return nil, xerrors.Errorf("module files, add chunk piece: %w", err)
763+
}
738764
case *sdkproto.Response_Plan:
739765
c := msgType.Plan
740766
if c.Error != "" {
@@ -745,19 +771,32 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(
745771
return nil, xerrors.New(c.Error)
746772
}
747773

774+
if moduleFilesUpload != nil && len(c.ModuleFiles) > 0 {
775+
return nil, xerrors.New("module files were uploaded and module files were returned in the plan response. Only one of these should be set")
776+
}
777+
748778
r.logger.Info(context.Background(), "parse dry-run provision successful",
749779
slog.F("resource_count", len(c.Resources)),
750780
slog.F("resources", resourceNames(c.Resources)),
751781
)
752782

783+
moduleFilesData := c.ModuleFiles
784+
if moduleFilesUpload != nil {
785+
uploadData, err := moduleFilesUpload.Complete()
786+
if err != nil {
787+
return nil, xerrors.Errorf("module files, complete upload: %w", err)
788+
}
789+
moduleFilesData = uploadData
790+
}
791+
753792
return &templateImportProvision{
754793
Resources: c.Resources,
755794
Parameters: c.Parameters,
756795
ExternalAuthProviders: c.ExternalAuthProviders,
757796
Modules: c.Modules,
758797
Presets: c.Presets,
759798
Plan: c.Plan,
760-
ModuleFiles: c.ModuleFiles,
799+
ModuleFiles: moduleFilesData,
761800
}, nil
762801
default:
763802
return nil, xerrors.Errorf("invalid message type %q received from provisioner",

provisionersdk/proto/dataupload.go

Lines changed: 94 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)