@@ -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" ,