github.com/hairyhenderson/gomplate/v4@v4.0.0-pre-2.0.20240520121557-362f058f0c93/internal/datafs/getenv.go (about) 1 package datafs 2 3 import ( 4 "io/fs" 5 "os" 6 "strings" 7 ) 8 9 // ExpandEnvFsys - a convenience function intended for internal use only! 10 func ExpandEnvFsys(fsys fs.FS, s string) string { 11 return os.Expand(s, func(s string) string { 12 return GetenvFsys(fsys, s) 13 }) 14 } 15 16 // GetenvFsys - a convenience function intended for internal use only! 17 func GetenvFsys(fsys fs.FS, key string, def ...string) string { 18 val := getenvFile(fsys, key) 19 if val == "" && len(def) > 0 { 20 return def[0] 21 } 22 23 return val 24 } 25 26 func getenvFile(fsys fs.FS, key string) string { 27 val := os.Getenv(key) 28 if val != "" { 29 return val 30 } 31 32 p := os.Getenv(key + "_FILE") 33 if p != "" { 34 val, err := readFile(fsys, p) 35 if err != nil { 36 return "" 37 } 38 return strings.TrimSpace(val) 39 } 40 41 return "" 42 } 43 44 func readFile(fsys fs.FS, p string) (string, error) { 45 b, err := fs.ReadFile(fsys, p) 46 if err != nil { 47 return "", err 48 } 49 50 return string(b), nil 51 }