Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd53092

Browse files
committed
fix: reduce size of terraform modules archive
specifically, only persist the directories specified by terraform'smodules.json
1 parentae3d90b commitbd53092

File tree

4 files changed

+304
-286
lines changed

4 files changed

+304
-286
lines changed

‎provisioner/terraform/modules.go‎

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,8 @@ type modulesFile struct {
2424
Modules []*module`json:"Modules"`
2525
}
2626

27-
funcgetModulesDirectory(workdirstring)string {
28-
returnfilepath.Join(workdir,".terraform","modules")
29-
}
30-
3127
funcgetModulesFilePath(workdirstring)string {
32-
returnfilepath.Join(getModulesDirectory(workdir),"modules.json")
28+
returnfilepath.Join(workdir,".terraform","modules","modules.json")
3329
}
3430

3531
funcparseModulesFile(filePathstring) ([]*proto.Module,error) {
@@ -72,51 +68,59 @@ func getModules(workdir string) ([]*proto.Module, error) {
7268
}
7369

7470
funcgetModulesArchive(workdirstring) ([]byte,error) {
75-
modulesDir:=getModulesDirectory(workdir)
76-
if_,err:=os.ReadDir(modulesDir);err!=nil {
71+
modulesFile:=getModulesFilePath(workdir)
72+
modulesFileBytes,err:=os.ReadFile(modulesFile)
73+
iferr!=nil {
7774
ifos.IsNotExist(err) {
7875
return []byte{},nil
7976
}
80-
81-
returnnil,err
77+
returnnil,xerrors.Errorf("failed to read modules.json: %w",err)
8278
}
79+
varmodules []*proto.Module
80+
err=json.Unmarshal(modulesFileBytes,&modules)
81+
iferr!=nil {
82+
returnnil,xerrors.Errorf("failed to parse modules.json: %w",err)
83+
}
84+
8385
empty:=true
8486
varb bytes.Buffer
8587
w:=tar.NewWriter(&b)
86-
err:=filepath.WalkDir(modulesDir,func(filePathstring,info fs.DirEntry,errerror)error {
87-
iferr!=nil {
88-
returnxerrors.Errorf("failed to create modules archive: %w",err)
89-
}
90-
ifinfo.IsDir() {
91-
returnnil
92-
}
93-
archivePath,found:=strings.CutPrefix(filePath,workdir+string(os.PathSeparator))
94-
if!found {
95-
returnxerrors.Errorf("walked invalid file path: %q",filePath)
96-
}
88+
for_,module:=rangemodules {
89+
err:=filepath.WalkDir(module.Dir,func(filePathstring,info fs.DirEntry,errerror)error {
90+
iferr!=nil {
91+
returnxerrors.Errorf("failed to create modules archive: %w",err)
92+
}
93+
ifinfo.IsDir() {
94+
returnnil
95+
}
96+
archivePath,found:=strings.CutPrefix(filePath,workdir+string(os.PathSeparator))
97+
if!found {
98+
returnxerrors.Errorf("walked invalid file path: %q",filePath)
99+
}
97100

98-
content,err:=os.ReadFile(filePath)
99-
iferr!=nil {
100-
returnxerrors.Errorf("failed to read module file while archiving: %w",err)
101-
}
102-
empty=false
103-
err=w.WriteHeader(&tar.Header{
104-
Name:archivePath,
105-
Size:int64(len(content)),
106-
Mode:0o644,
107-
Uid:1000,
108-
Gid:1000,
101+
content,err:=os.ReadFile(filePath)
102+
iferr!=nil {
103+
returnxerrors.Errorf("failed to read module file while archiving: %w",err)
104+
}
105+
empty=false
106+
err=w.WriteHeader(&tar.Header{
107+
Name:archivePath,
108+
Size:int64(len(content)),
109+
Mode:0o644,
110+
Uid:1000,
111+
Gid:1000,
112+
})
113+
iferr!=nil {
114+
returnxerrors.Errorf("failed to add module file to archive: %w",err)
115+
}
116+
if_,err=w.Write(content);err!=nil {
117+
returnxerrors.Errorf("failed to write module file to archive: %w",err)
118+
}
119+
returnnil
109120
})
110121
iferr!=nil {
111-
returnxerrors.Errorf("failed to add module file to archive: %w",err)
122+
returnnil,err
112123
}
113-
if_,err=w.Write(content);err!=nil {
114-
returnxerrors.Errorf("failed to write module file to archive: %w",err)
115-
}
116-
returnnil
117-
})
118-
iferr!=nil {
119-
returnnil,err
120124
}
121125
err=w.Close()
122126
iferr!=nil {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp