@@ -717,11 +717,13 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(
717
717
}
718
718
}()
719
719
720
+ var moduleFilesUpload * sdkproto.DataBuilder
720
721
for {
721
722
msg , err := r .session .Recv ()
722
723
if err != nil {
723
724
return nil , xerrors .Errorf ("recv import provision: %w" , err )
724
725
}
726
+
725
727
switch msgType := msg .Type .(type ) {
726
728
case * sdkproto.Response_Log :
727
729
r .logProvisionerJobLog (context .Background (), msgType .Log .Level , "template import provision job logged" ,
@@ -735,6 +737,30 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(
735
737
Output : msgType .Log .Output ,
736
738
Stage : stage ,
737
739
})
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
+ }
738
764
case * sdkproto.Response_Plan :
739
765
c := msgType .Plan
740
766
if c .Error != "" {
@@ -745,19 +771,32 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(
745
771
return nil , xerrors .New (c .Error )
746
772
}
747
773
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
+
748
778
r .logger .Info (context .Background (), "parse dry-run provision successful" ,
749
779
slog .F ("resource_count" , len (c .Resources )),
750
780
slog .F ("resources" , resourceNames (c .Resources )),
751
781
)
752
782
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
+
753
792
return & templateImportProvision {
754
793
Resources : c .Resources ,
755
794
Parameters : c .Parameters ,
756
795
ExternalAuthProviders : c .ExternalAuthProviders ,
757
796
Modules : c .Modules ,
758
797
Presets : c .Presets ,
759
798
Plan : c .Plan ,
760
- ModuleFiles : c . ModuleFiles ,
799
+ ModuleFiles : moduleFilesData ,
761
800
}, nil
762
801
default :
763
802
return nil , xerrors .Errorf ("invalid message type %q received from provisioner" ,
0 commit comments