fix: multiple environment variables interpolation in configuration file
Cadoles/bouncer/pipeline/head This commit looks good
Details
Cadoles/bouncer/pipeline/head This commit looks good
Details
This commit is contained in:
parent
f3aa8b9be6
commit
d5669a4eb5
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
- [(FR) - Layers](./fr/references/layers/README.md)
|
- [(FR) - Layers](./fr/references/layers/README.md)
|
||||||
- [(FR) - Métriques](./fr/references/metrics.md)
|
- [(FR) - Métriques](./fr/references/metrics.md)
|
||||||
- [(FR) - Fichier de configuration](../misc/packaging/common/config.yml)
|
- [(FR) - Fichier de configuration](./fr/references/configuration.md)
|
||||||
- [(FR) - API d'administration](./fr/references/admin_api.md)
|
- [(FR) - API d'administration](./fr/references/admin_api.md)
|
||||||
|
|
||||||
## Tutoriels
|
## Tutoriels
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
## Référence
|
||||||
|
|
||||||
|
Vous trouverez ici un fichier de configuration de référence, complet et commenté:
|
||||||
|
|
||||||
|
[`misc/packaging/common/config.yml`](../../../misc/packaging/common/config.yml)
|
||||||
|
|
||||||
|
## Interpolation de variables
|
||||||
|
|
||||||
|
Il est possible d'utiliser de l'interpolation de variables d'environnement dans le fichier de configuration via la syntaxe `${var}`.
|
||||||
|
|
||||||
|
Les fonctions d'interpolation suivantes sont également disponibles:
|
||||||
|
|
||||||
|
- `${var^}`
|
||||||
|
- `${var^^}`
|
||||||
|
- `${var,}`
|
||||||
|
- `${var,,}`
|
||||||
|
- `${var:position}`
|
||||||
|
- `${var:position:length}`
|
||||||
|
- `${var#substring}`
|
||||||
|
- `${var##substring}`
|
||||||
|
- `${var%substring}`
|
||||||
|
- `${var%%substring}`
|
||||||
|
- `${var/substring/replacement}`
|
||||||
|
- `${var//substring/replacement}`
|
||||||
|
- `${var/#substring/replacement}`
|
||||||
|
- `${var/%substring/replacement}`
|
||||||
|
- `${#var}`
|
||||||
|
- `${var=default}`
|
||||||
|
- `${var:=default}`
|
||||||
|
- `${var:-default}`
|
||||||
|
|
||||||
|
_Voir le package [`github.com/drone/envsubst`](https://pkg.go.dev/github.com/drone/envsubst) pour plus de détails._
|
|
@ -23,12 +23,13 @@ func (is *InterpolatedString) UnmarshalYAML(value *yaml.Node) error {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if match := reVar.FindStringSubmatch(str); len(match) > 0 {
|
str, err := envsubst.EvalEnv(str)
|
||||||
*is = InterpolatedString(os.Getenv(match[1]))
|
if err != nil {
|
||||||
} else {
|
return errors.WithStack(err)
|
||||||
*is = InterpolatedString(str)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*is = InterpolatedString(str)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,8 +42,9 @@ func (ii *InterpolatedInt) UnmarshalYAML(value *yaml.Node) error {
|
||||||
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
||||||
}
|
}
|
||||||
|
|
||||||
if match := reVar.FindStringSubmatch(str); len(match) > 0 {
|
str, err := envsubst.EvalEnv(str)
|
||||||
str = os.Getenv(match[1])
|
if err != nil {
|
||||||
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
intVal, err := strconv.ParseInt(str, 10, 32)
|
intVal, err := strconv.ParseInt(str, 10, 32)
|
||||||
|
@ -64,8 +66,9 @@ func (ifl *InterpolatedFloat) UnmarshalYAML(value *yaml.Node) error {
|
||||||
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
||||||
}
|
}
|
||||||
|
|
||||||
if match := reVar.FindStringSubmatch(str); len(match) > 0 {
|
str, err := envsubst.EvalEnv(str)
|
||||||
str = os.Getenv(match[1])
|
if err != nil {
|
||||||
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
floatVal, err := strconv.ParseFloat(str, 10)
|
floatVal, err := strconv.ParseFloat(str, 10)
|
||||||
|
@ -87,8 +90,9 @@ func (ib *InterpolatedBool) UnmarshalYAML(value *yaml.Node) error {
|
||||||
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
||||||
}
|
}
|
||||||
|
|
||||||
if match := reVar.FindStringSubmatch(str); len(match) > 0 {
|
str, err := envsubst.EvalEnv(str)
|
||||||
str = os.Getenv(match[1])
|
if err != nil {
|
||||||
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
boolVal, err := strconv.ParseBool(str)
|
boolVal, err := strconv.ParseBool(str)
|
||||||
|
@ -165,22 +169,15 @@ type InterpolatedStringSlice []string
|
||||||
|
|
||||||
func (iss *InterpolatedStringSlice) UnmarshalYAML(value *yaml.Node) error {
|
func (iss *InterpolatedStringSlice) UnmarshalYAML(value *yaml.Node) error {
|
||||||
var data []string
|
var data []string
|
||||||
var evErr error
|
|
||||||
|
|
||||||
if err := value.Decode(&data); err != nil {
|
if err := value.Decode(&data); err != nil {
|
||||||
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into map", value.Value, value.Line)
|
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into map", value.Value, value.Line)
|
||||||
}
|
}
|
||||||
|
|
||||||
for index, value := range data {
|
for index, value := range data {
|
||||||
//match := reVar.FindStringSubmatch(value)
|
value, err := envsubst.EvalEnv(value)
|
||||||
re := regexp.MustCompile(`\${(.*?)}`)
|
if err != nil {
|
||||||
|
return errors.WithStack(err)
|
||||||
res := re.FindAllStringSubmatch(value, 10)
|
|
||||||
if len(res) > 0 {
|
|
||||||
value, evErr = envsubst.EvalEnv(value)
|
|
||||||
if evErr != nil {
|
|
||||||
return evErr
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data[index] = value
|
data[index] = value
|
||||||
|
@ -200,8 +197,9 @@ func (id *InterpolatedDuration) UnmarshalYAML(value *yaml.Node) error {
|
||||||
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
return errors.Wrapf(err, "could not decode value '%v' (line '%d') into string", value.Value, value.Line)
|
||||||
}
|
}
|
||||||
|
|
||||||
if match := reVar.FindStringSubmatch(str); len(match) > 0 {
|
str, err := envsubst.EvalEnv(str)
|
||||||
str = os.Getenv(match[1])
|
if err != nil {
|
||||||
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
duration, err := time.ParseDuration(str)
|
duration, err := time.ParseDuration(str)
|
||||||
|
|
Loading…
Reference in New Issue