Bläddra i källkod

allow environment variable in configuration file (#601)

AlteredCoder 4 år sedan
förälder
incheckning
359a9cb8ce
2 ändrade filer med 28 tillägg och 1 borttagningar
  1. 25 0
      docs/v1.X/docs/references/crowdsec-config.md
  2. 3 1
      pkg/csconfig/config.go

+ 25 - 0
docs/v1.X/docs/references/crowdsec-config.md

@@ -4,6 +4,7 @@
 
 
 ## Configuration example
 ## Configuration example
 
 
+
 <details>
 <details>
   <summary>Default configuration</summary>
   <summary>Default configuration</summary>
 
 
@@ -63,6 +64,30 @@ prometheus:
 
 
 </details>
 </details>
 
 
+## Environment variable
+
+It is possible to set a configuration value based on an enrivonement variables.
+
+For example, if you don't want to store your database password in the configuration file, you can do this:
+
+```yaml
+db_config:
+  type:     mysql
+  user:     database_user
+  password: ${DB_PASSWORD}  
+  db_name:  db_name
+  host:     192.168.0.2   
+  port:     3306 
+```
+
+And export the environment variable such as:
+
+```bash
+export DB_PASSWORD="<db_password>"
+```
+
+!!! warning 
+    **Note**: you need to be `root` or put the environment variable in `/etc/environement`
 
 
 ## Configuration format
 ## Configuration format
 
 

+ 3 - 1
pkg/csconfig/config.go

@@ -3,6 +3,7 @@ package csconfig
 import (
 import (
 	"fmt"
 	"fmt"
 	"io/ioutil"
 	"io/ioutil"
+	"os"
 	"path/filepath"
 	"path/filepath"
 	"strings"
 	"strings"
 
 
@@ -40,7 +41,8 @@ func (c *GlobalConfig) LoadConfigurationFile(path string) error {
 	if err != nil {
 	if err != nil {
 		return errors.Wrap(err, "failed to read config file")
 		return errors.Wrap(err, "failed to read config file")
 	}
 	}
-	err = yaml.UnmarshalStrict(fcontent, c)
+	configData := os.ExpandEnv(string(fcontent))
+	err = yaml.UnmarshalStrict([]byte(configData), c)
 	if err != nil {
 	if err != nil {
 		return errors.Wrap(err, "failed unmarshaling config")
 		return errors.Wrap(err, "failed unmarshaling config")
 	}
 	}