...
1
2
3 package filesys
4
5 import (
6 "embed"
7 "fmt"
8 "io/fs"
9 "path/filepath"
10
11 "sigs.k8s.io/kustomize/kyaml/filesys"
12 )
13
14
15
16
17 func ConvertEmbeddedFSToKustomizeFS(efs embed.FS) (filesys.FileSystem, error) {
18 return ConvertEmbeddedFSToKustomizeFSDir(efs, "")
19 }
20
21 func ConvertEmbeddedFSToKustomizeFSDir(efs embed.FS, dir string) (filesys.FileSystem, error) {
22 fsys := filesys.MakeFsInMemory()
23 return ConvertEmbeddedFSToKustomizeFSExisting(efs, fsys, dir)
24 }
25
26 func ConvertEmbeddedFSToKustomizeFSExisting(efs embed.FS, fsys filesys.FileSystem, dir string) (filesys.FileSystem, error) {
27 err := fs.WalkDir(efs, ".", func(path string, d fs.DirEntry, walkErr error) error {
28
29
30 if walkErr != nil {
31 return fmt.Errorf("encountered a walk error: %w", walkErr)
32 }
33
34 if d.IsDir() {
35 return fsys.Mkdir(filepath.Join(dir, path))
36 }
37
38 return writeEmbeddedFileToKustomizeFS(efs, fsys, path, dir)
39 })
40 if err != nil {
41 return nil, fmt.Errorf("failed to convert embedded file system to in-memory kustomize file system: %w", err)
42 }
43
44 return fsys, nil
45 }
46
47 func writeEmbeddedFileToKustomizeFS(efs embed.FS, kfs filesys.FileSystem, path, dir string) error {
48 data, err := efs.ReadFile(path)
49 if err != nil {
50 return fmt.Errorf("failed to read path %s from embedded file system: %w", path, err)
51 }
52
53 if err := kfs.WriteFile(filepath.Join(dir, path), data); err != nil {
54 return fmt.Errorf("failed to write path %s to in-memory kustomize file system: %w", path, err)
55 }
56 return nil
57 }
58
View as plain text