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  }