From 79f798f67b18b5bd711e792eacedd597dd6725b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Thu, 12 Feb 2015 13:31:41 +0100 Subject: [PATCH] Configuration file options can now be overriden using environment variables using GF__ syntax, if Section name contains dots in config they are replaced with underscores, and the section name and keyname needs to be all upper case, #1473 --- pkg/services/sqlstore/migrator/migrator.go | 10 +++++----- pkg/setting/setting.go | 13 +++++++++++++ pkg/setting/setting_test.go | 10 ++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/pkg/services/sqlstore/migrator/migrator.go b/pkg/services/sqlstore/migrator/migrator.go index 53e61f3d1c9..273709d7d17 100644 --- a/pkg/services/sqlstore/migrator/migrator.go +++ b/pkg/services/sqlstore/migrator/migrator.go @@ -5,9 +5,9 @@ import ( _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" + "github.com/grafana/grafana/pkg/log" _ "github.com/lib/pq" _ "github.com/mattn/go-sqlite3" - "github.com/grafana/grafana/pkg/log" ) type Migrator struct { @@ -70,7 +70,7 @@ func (mg *Migrator) GetMigrationLog() (map[string]MigrationLog, error) { func (mg *Migrator) Start() error { if mg.LogLevel <= log.INFO { - log.Info("Migrator:: Starting DB migration") + log.Info("Migrator: Starting DB migration") } logMap, err := mg.GetMigrationLog() @@ -82,7 +82,7 @@ func (mg *Migrator) Start() error { _, exists := logMap[m.Id()] if exists { if mg.LogLevel <= log.DEBUG { - log.Debug("Migrator:: Skipping migration: %v, Already executed", m.Id()) + log.Debug("Migrator: Skipping migration: %v, Already executed", m.Id()) } continue } @@ -114,13 +114,13 @@ func (mg *Migrator) Start() error { func (mg *Migrator) exec(m Migration) error { if mg.LogLevel <= log.INFO { - log.Info("Migrator::exec migration id: %v", m.Id()) + log.Info("Migrator: exec migration id: %v", m.Id()) } err := mg.inTransaction(func(sess *xorm.Session) error { _, err := sess.Exec(m.Sql(mg.dialect)) if err != nil { - log.Error(3, "Migrator::exec FAILED migration id: %v, err: %v", m.Id(), err) + log.Error(3, "Migrator: exec FAILED migration id: %v, err: %v", m.Id(), err) return err } return nil diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 9cb571c479d..4d3ef9161c3 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -4,6 +4,7 @@ package setting import ( + "fmt" "net/url" "os" "path" @@ -148,7 +149,19 @@ func ToAbsUrl(relativeUrl string) string { } func loadEnvVariableOverrides() { + for _, section := range Cfg.Sections() { + for _, key := range section.Keys() { + sectionName := strings.ToUpper(strings.Replace(section.Name(), ".", "_", -1)) + keyName := strings.ToUpper(strings.Replace(key.Name(), ".", "_", -1)) + envKey := fmt.Sprintf("GF_%s_%s", sectionName, keyName) + envValue := os.Getenv(envKey) + if len(envValue) > 0 { + log.Info("Setting: ENV override found: %s", envKey) + key.SetValue(envValue) + } + } + } } func NewConfigContext() { diff --git a/pkg/setting/setting_test.go b/pkg/setting/setting_test.go index 22ffbc17edb..be031e3f4cc 100644 --- a/pkg/setting/setting_test.go +++ b/pkg/setting/setting_test.go @@ -1,6 +1,7 @@ package setting import ( + "os" "path/filepath" "testing" @@ -17,6 +18,15 @@ func TestLoadingSettings(t *testing.T) { NewConfigContext() So(AppName, ShouldEqual, "Grafana") + So(AdminUser, ShouldEqual, "admin") }) + + Convey("Should be able to override via environment variables", func() { + os.Setenv("GF_SECURITY_ADMIN_USER", "superduper") + NewConfigContext() + + So(AdminUser, ShouldEqual, "superduper") + }) + }) }