@@ -68,25 +68,32 @@ func getModules(workdir string) ([]*proto.Module, error) {
68
68
}
69
69
70
70
func getModulesArchive (workdir string ) ([]byte , error ) {
71
- modulesFile := getModulesFilePath (workdir )
72
- modulesFileBytes , err := os .ReadFile (modulesFile )
71
+ modulesFile , err := os .ReadFile (getModulesFilePath (workdir ))
73
72
if err != nil {
74
73
if os .IsNotExist (err ) {
75
74
return []byte {}, nil
76
75
}
77
76
return nil , xerrors .Errorf ("failed to read modules.json: %w" , err )
78
77
}
79
- var modules []* proto.Module
80
- err = json .Unmarshal (modulesFileBytes , & modules )
78
+ var m struct { Modules []* proto.Module }
79
+ err = json .Unmarshal (modulesFile , & m )
81
80
if err != nil {
82
81
return nil , xerrors .Errorf ("failed to parse modules.json: %w" , err )
83
82
}
84
83
85
84
empty := true
86
85
var b bytes.Buffer
87
86
w := tar .NewWriter (& b )
88
- for _ , module := range modules {
89
- err := filepath .WalkDir (module .Dir , func (filePath string , info fs.DirEntry , err error ) error {
87
+
88
+ for _ , module := range m .Modules {
89
+ // Check to make sure that the module is a remote module fetched by
90
+ // Terraform. Any module that doesn't start with this path is already local,
91
+ // and should be part of the template files already.
92
+ if ! strings .HasPrefix (module .Dir , ".terraform/modules/" ) {
93
+ continue
94
+ }
95
+
96
+ err := filepath .WalkDir (filepath .Join (workdir , module .Dir ), func (filePath string , info fs.DirEntry , err error ) error {
90
97
if err != nil {
91
98
return xerrors .Errorf ("failed to create modules archive: %w" , err )
92
99
}
@@ -122,6 +129,22 @@ func getModulesArchive(workdir string) ([]byte, error) {
122
129
return nil , err
123
130
}
124
131
}
132
+
133
+ err = w .WriteHeader (& tar.Header {
134
+ Name : ".terraform/modules/modules.json" ,
135
+ Size : int64 (len (modulesFile )),
136
+ Mode : 0o644 ,
137
+ Uid : 1000 ,
138
+ Gid : 1000 ,
139
+ })
140
+ if err != nil {
141
+ return nil , xerrors .Errorf ("failed to write modules.json to archive: %w" , err )
142
+ }
143
+ _ , err = w .Write (modulesFile )
144
+ if err != nil {
145
+ return nil , xerrors .Errorf ("failed to write modules.json to archive: %w" , err )
146
+ }
147
+
125
148
err = w .Close ()
126
149
if err != nil {
127
150
return nil , xerrors .Errorf ("failed to close module files archive: %w" , err )
0 commit comments