VictoriaMetrics/lib/envtemplate/envtemplate.go
Aliaksandr Valialkin c402265e88 all: support %{ENV_VAR} placeholders in yaml configs in all the vm* components
Such placeholders are substituted by the corresponding environment variable values.

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/583
2020-08-13 17:15:25 +03:00

25 lines
523 B
Go

package envtemplate
import (
"bytes"
"io"
"os"
"github.com/valyala/fasttemplate"
)
// Replace replaces `%{ENV_VAR}` placeholders in b with the corresponding ENV_VAR values.
func Replace(b []byte) []byte {
if !bytes.Contains(b, []byte("%{")) {
// Fast path - nothing to replace.
return b
}
s := fasttemplate.ExecuteFuncString(string(b), "%{", "}", func(w io.Writer, tag string) (int, error) {
v := os.Getenv(tag)
if v == "" {
v = "%{" + tag + "}"
}
return w.Write([]byte(v))
})
return []byte(s)
}