@@ -6,37 +6,51 @@ import (
6
6
"strings"
7
7
)
8
8
9
- type overlay struct {
10
- baseFS fs.FS
11
- overlayFS fs.FS
12
- overlayPath string
9
+ // withModulesFS allows you to "join" together the template files tar file fs.FS
10
+ // with the Terraform modules tar file fs.FS. We could potentially turn this
11
+ // into something more parameterized/configurable, but the requirements here are
12
+ // a _bit_ odd, because every file in the modulesFS includes the
13
+ // .terraform/modules/ folder at the beginning of it's path.
14
+ type overlayFS struct {
15
+ baseFS fs.FS
16
+ overlays []Overlay
13
17
}
14
18
15
- func NewOverlayFS (baseFS , overlayFS fs.FS , overlayPath string ) fs.FS {
16
- return overlay {
17
- baseFS : baseFS ,
18
- overlayFS : overlayFS ,
19
- overlayPath : path .Clean (overlayPath ),
19
+ type Overlay struct {
20
+ Path string
21
+ fs.FS
22
+ }
23
+
24
+ func NewOverlayFS (baseFS fs.FS , overlays []Overlay ) fs.FS {
25
+ return overlayFS {
26
+ baseFS : baseFS ,
27
+ overlays : overlays ,
20
28
}
21
29
}
22
30
23
- func (f overlay ) Open (p string ) (fs.File , error ) {
24
- if strings .HasPrefix (path .Clean (p ), f .overlayPath ) {
25
- return f .overlayFS .Open (p )
31
+ func (f overlayFS ) Open (p string ) (fs.File , error ) {
32
+ for _ , overlay := range f .overlays {
33
+ if strings .HasPrefix (path .Clean (p ), overlay .Path ) {
34
+ return overlay .FS .Open (p )
35
+ }
26
36
}
27
37
return f .baseFS .Open (p )
28
38
}
29
39
30
- func (f overlay ) ReadDir (p string ) ([]fs.DirEntry , error ) {
31
- if strings .HasPrefix (path .Clean (p ), f .overlayPath ) {
32
- return f .overlayFS .(fs.ReadDirFS ).ReadDir (p )
40
+ func (f overlayFS ) ReadDir (p string ) ([]fs.DirEntry , error ) {
41
+ for _ , overlay := range f .overlays {
42
+ if strings .HasPrefix (path .Clean (p ), overlay .Path ) {
43
+ return overlay .FS .(fs.ReadDirFS ).ReadDir (p )
44
+ }
33
45
}
34
46
return f .baseFS .(fs.ReadDirFS ).ReadDir (p )
35
47
}
36
48
37
- func (f overlay ) ReadFile (p string ) ([]byte , error ) {
38
- if strings .HasPrefix (path .Clean (p ), f .overlayPath ) {
39
- return f .overlayFS .(fs.ReadFileFS ).ReadFile (p )
49
+ func (f overlayFS ) ReadFile (p string ) ([]byte , error ) {
50
+ for _ , overlay := range f .overlays {
51
+ if strings .HasPrefix (path .Clean (p ), overlay .Path ) {
52
+ return overlay .FS .(fs.ReadFileFS ).ReadFile (p )
53
+ }
40
54
}
41
55
return f .baseFS .(fs.ReadFileFS ).ReadFile (p )
42
56
}
0 commit comments