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)
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