package config import ( "fmt" "strings" ) // SubstituteVars replaces ${var} and $var references in a string with values // from the vars map. This is the YAML equivalent of shorewall's params file. func SubstituteVars(s string, vars map[string]string) string { if len(vars) == 0 || !strings.Contains(s, "$") { return s } result := s for k, v := range vars { result = strings.ReplaceAll(result, "${"+k+"}", v) result = strings.ReplaceAll(result, "$"+k, v) } return result } func (c *Config) validateVars() error { for k := range c.Vars { if k == "" { return fmt.Errorf("vars: empty variable name") } if strings.ContainsAny(k, " \t${}") { return fmt.Errorf("vars: invalid variable name %q", k) } } return nil }