config.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //Environment file for getting variables
  2. //Currently the only thing it does is set the master password
  3. //Should probably have it take over functions from OS such as port and mongodb connection details
  4. //Reads from the config/environments/dev.yaml file by default
  5. //TODO: Add vars for mongo and remove from OS vars in mongoconn
  6. package config
  7. import (
  8. "os"
  9. "fmt"
  10. "log"
  11. "gopkg.in/yaml.v3"
  12. )
  13. //setting dev by default
  14. func getEnv() string {
  15. env := os.Getenv("NETMAKER_ENV")
  16. if len(env) == 0 {
  17. return "dev"
  18. }
  19. return env
  20. }
  21. // Config : application config stored as global variable
  22. var Config *EnvironmentConfig
  23. // EnvironmentConfig :
  24. type EnvironmentConfig struct {
  25. Server ServerConfig `yaml:"server"`
  26. MongoConn MongoConnConfig `yaml:"mongoconn"`
  27. }
  28. // ServerConfig :
  29. type ServerConfig struct {
  30. APIHost string `yaml:"apihost"`
  31. APIPort string `yaml:"apiport"`
  32. GRPCHost string `yaml:"grpchost"`
  33. GRPCPort string `yaml:"grpcport"`
  34. MasterKey string `yaml:"masterkey"`
  35. AllowedOrigin string `yaml:"allowedorigin"`
  36. RestBackend string `yaml:"restbackend"`
  37. AgentBackend string `yaml:"agentbackend"`
  38. ClientMode string `yaml:"clientmode"`
  39. DNSMode string `yaml:"dnsmode"`
  40. DisableRemoteIPCheck string `yaml:"disableremoteipcheck"`
  41. }
  42. type MongoConnConfig struct {
  43. User string `yaml:"user"`
  44. Pass string `yaml:"pass"`
  45. Host string `yaml:"host"`
  46. Port string `yaml:"port"`
  47. Opts string `yaml:"opts"`
  48. }
  49. //reading in the env file
  50. func readConfig() *EnvironmentConfig {
  51. file := fmt.Sprintf("config/environments/%s.yaml", getEnv())
  52. f, err := os.Open(file)
  53. var cfg EnvironmentConfig
  54. if err != nil {
  55. //log.Fatal(err)
  56. //os.Exit(2)
  57. log.Println("Unable to open config file at config/environments/" + getEnv())
  58. log.Println("Will proceed with defaults or enironment variables (no config file).")
  59. return &cfg
  60. }
  61. defer f.Close()
  62. decoder := yaml.NewDecoder(f)
  63. err = decoder.Decode(&cfg)
  64. if err != nil {
  65. log.Fatal(err)
  66. os.Exit(2)
  67. }
  68. return &cfg
  69. }
  70. func init() {
  71. Config = readConfig()
  72. }