mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Updated to config file finding, and added homepath command line option
This commit is contained in:
parent
cc427b1307
commit
6de584aafc
10
conf/dev.ini
10
conf/dev.ini
@ -1,10 +0,0 @@
|
|||||||
app_mode = development
|
|
||||||
|
|
||||||
[server]
|
|
||||||
router_logging = false
|
|
||||||
|
|
||||||
[log]
|
|
||||||
level = Trace
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
main.go
2
main.go
@ -25,6 +25,7 @@ var commit = "NA"
|
|||||||
var buildstamp string
|
var buildstamp string
|
||||||
|
|
||||||
var configFile = flag.String("config", "", "path to config file")
|
var configFile = flag.String("config", "", "path to config file")
|
||||||
|
var homePath = flag.String("homepath", "", "path to grafana install/home path, defaults to working directory")
|
||||||
var pidFile = flag.String("pidfile", "", "path to pid file")
|
var pidFile = flag.String("pidfile", "", "path to pid file")
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -66,6 +67,7 @@ func main() {
|
|||||||
func initRuntime() {
|
func initRuntime() {
|
||||||
setting.NewConfigContext(&setting.CommandLineArgs{
|
setting.NewConfigContext(&setting.CommandLineArgs{
|
||||||
Config: *configFile,
|
Config: *configFile,
|
||||||
|
HomePath: *homePath,
|
||||||
Args: flag.Args(),
|
Args: flag.Args(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -107,13 +107,13 @@ var (
|
|||||||
|
|
||||||
type CommandLineArgs struct {
|
type CommandLineArgs struct {
|
||||||
Config string
|
Config string
|
||||||
|
HomePath string
|
||||||
Args []string
|
Args []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
IsWindows = runtime.GOOS == "windows"
|
IsWindows = runtime.GOOS == "windows"
|
||||||
log.NewLogger(0, "console", `{"level": 0}`)
|
log.NewLogger(0, "console", `{"level": 0}`)
|
||||||
HomePath, _ = filepath.Abs(".")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseAppUrlAndSubUrl(section *ini.Section) (string, string) {
|
func parseAppUrlAndSubUrl(section *ini.Section) (string, string) {
|
||||||
@ -226,6 +226,14 @@ func evalConfigValues() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func loadSpecifedConfigFile(configFile string) {
|
func loadSpecifedConfigFile(configFile string) {
|
||||||
|
if configFile == "" {
|
||||||
|
configFile = filepath.Join(HomePath, "conf/custom.ini")
|
||||||
|
// return without error if custom file does not exist
|
||||||
|
if !pathExists(configFile) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
userConfig, err := ini.Load(configFile)
|
userConfig, err := ini.Load(configFile)
|
||||||
userConfig.BlockMode = false
|
userConfig.BlockMode = false
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -256,8 +264,6 @@ func loadSpecifedConfigFile(configFile string) {
|
|||||||
func loadConfiguration(args *CommandLineArgs) {
|
func loadConfiguration(args *CommandLineArgs) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
args.Config = evalEnvVarExpression(args.Config)
|
|
||||||
|
|
||||||
// load config defaults
|
// load config defaults
|
||||||
defaultConfigFile := path.Join(HomePath, "conf/defaults.ini")
|
defaultConfigFile := path.Join(HomePath, "conf/defaults.ini")
|
||||||
configFiles = append(configFiles, defaultConfigFile)
|
configFiles = append(configFiles, defaultConfigFile)
|
||||||
@ -276,9 +282,7 @@ func loadConfiguration(args *CommandLineArgs) {
|
|||||||
applyCommandLineDefaultProperties(commandLineProps)
|
applyCommandLineDefaultProperties(commandLineProps)
|
||||||
|
|
||||||
// load specified config file
|
// load specified config file
|
||||||
if args.Config != "" {
|
|
||||||
loadSpecifedConfigFile(args.Config)
|
loadSpecifedConfigFile(args.Config)
|
||||||
}
|
|
||||||
|
|
||||||
// apply environment overrides
|
// apply environment overrides
|
||||||
applyEnvVariableOverrides()
|
applyEnvVariableOverrides()
|
||||||
@ -290,11 +294,40 @@ func loadConfiguration(args *CommandLineArgs) {
|
|||||||
evalConfigValues()
|
evalConfigValues()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func pathExists(path string) bool {
|
||||||
|
_, err := os.Stat(path)
|
||||||
|
if err == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func setHomePath(args *CommandLineArgs) {
|
||||||
|
if args.HomePath != "" {
|
||||||
|
HomePath = args.HomePath
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
HomePath, _ = filepath.Abs(".")
|
||||||
|
// check if homepath is correct
|
||||||
|
if pathExists(filepath.Join(HomePath, "conf/defaults.ini")) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// try down one path
|
||||||
|
if pathExists(filepath.Join(HomePath, "../conf/defaults.ini")) {
|
||||||
|
HomePath = filepath.Join(HomePath, "../")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func NewConfigContext(args *CommandLineArgs) {
|
func NewConfigContext(args *CommandLineArgs) {
|
||||||
|
setHomePath(args)
|
||||||
loadConfiguration(args)
|
loadConfiguration(args)
|
||||||
|
|
||||||
DataPath = makeAbsolute(Cfg.Section("paths").Key("data").String(), HomePath)
|
DataPath = makeAbsolute(Cfg.Section("paths").Key("data").String(), HomePath)
|
||||||
|
|
||||||
initLogging(args)
|
initLogging(args)
|
||||||
|
|
||||||
AppName = Cfg.Section("").Key("app_name").MustString("Grafana")
|
AppName = Cfg.Section("").Key("app_name").MustString("Grafana")
|
||||||
@ -314,7 +347,7 @@ func NewConfigContext(args *CommandLineArgs) {
|
|||||||
HttpAddr = server.Key("http_addr").MustString("0.0.0.0")
|
HttpAddr = server.Key("http_addr").MustString("0.0.0.0")
|
||||||
HttpPort = server.Key("http_port").MustString("3000")
|
HttpPort = server.Key("http_port").MustString("3000")
|
||||||
|
|
||||||
StaticRootPath = server.Key("static_root_path").MustString(path.Join(HomePath, "public"))
|
StaticRootPath = makeAbsolute(server.Key("static_root_path").String(), HomePath)
|
||||||
RouterLogging = server.Key("router_logging").MustBool(false)
|
RouterLogging = server.Key("router_logging").MustBool(false)
|
||||||
EnableGzip = server.Key("enable_gzip").MustBool(false)
|
EnableGzip = server.Key("enable_gzip").MustBool(false)
|
||||||
|
|
||||||
|
@ -10,12 +10,10 @@ import (
|
|||||||
|
|
||||||
func TestLoadingSettings(t *testing.T) {
|
func TestLoadingSettings(t *testing.T) {
|
||||||
|
|
||||||
HomePath, _ = filepath.Abs("../../")
|
|
||||||
|
|
||||||
Convey("Testing loading settings from ini file", t, func() {
|
Convey("Testing loading settings from ini file", t, func() {
|
||||||
|
|
||||||
Convey("Given the default ini files", func() {
|
Convey("Given the default ini files", func() {
|
||||||
NewConfigContext(&CommandLineArgs{})
|
NewConfigContext(&CommandLineArgs{HomePath: "../../"})
|
||||||
|
|
||||||
So(AppName, ShouldEqual, "Grafana")
|
So(AppName, ShouldEqual, "Grafana")
|
||||||
So(AdminUser, ShouldEqual, "admin")
|
So(AdminUser, ShouldEqual, "admin")
|
||||||
@ -23,7 +21,7 @@ func TestLoadingSettings(t *testing.T) {
|
|||||||
|
|
||||||
Convey("Should be able to override via environment variables", func() {
|
Convey("Should be able to override via environment variables", func() {
|
||||||
os.Setenv("GF_SECURITY_ADMIN_USER", "superduper")
|
os.Setenv("GF_SECURITY_ADMIN_USER", "superduper")
|
||||||
NewConfigContext(&CommandLineArgs{})
|
NewConfigContext(&CommandLineArgs{HomePath: "../../"})
|
||||||
|
|
||||||
So(AdminUser, ShouldEqual, "superduper")
|
So(AdminUser, ShouldEqual, "superduper")
|
||||||
So(DataPath, ShouldEqual, filepath.Join(HomePath, "data"))
|
So(DataPath, ShouldEqual, filepath.Join(HomePath, "data"))
|
||||||
@ -40,6 +38,7 @@ func TestLoadingSettings(t *testing.T) {
|
|||||||
|
|
||||||
Convey("Should be able to override via command line", func() {
|
Convey("Should be able to override via command line", func() {
|
||||||
NewConfigContext(&CommandLineArgs{
|
NewConfigContext(&CommandLineArgs{
|
||||||
|
HomePath: "../../",
|
||||||
Args: []string{"cfg:paths.data=/tmp/data", "cfg:paths.logs=/tmp/logs"},
|
Args: []string{"cfg:paths.data=/tmp/data", "cfg:paths.logs=/tmp/logs"},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -49,6 +48,7 @@ func TestLoadingSettings(t *testing.T) {
|
|||||||
|
|
||||||
Convey("Should be able to override defaults via command line", func() {
|
Convey("Should be able to override defaults via command line", func() {
|
||||||
NewConfigContext(&CommandLineArgs{
|
NewConfigContext(&CommandLineArgs{
|
||||||
|
HomePath: "../../",
|
||||||
Args: []string{
|
Args: []string{
|
||||||
"cfg:default.server.domain=test2",
|
"cfg:default.server.domain=test2",
|
||||||
},
|
},
|
||||||
@ -60,8 +60,9 @@ func TestLoadingSettings(t *testing.T) {
|
|||||||
|
|
||||||
Convey("Defaults can be overriden in specified config file", func() {
|
Convey("Defaults can be overriden in specified config file", func() {
|
||||||
NewConfigContext(&CommandLineArgs{
|
NewConfigContext(&CommandLineArgs{
|
||||||
Args: []string{"cfg:default.paths.data=/tmp/data"},
|
HomePath: "../../",
|
||||||
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
||||||
|
Args: []string{"cfg:default.paths.data=/tmp/data"},
|
||||||
})
|
})
|
||||||
|
|
||||||
So(DataPath, ShouldEqual, "/tmp/override")
|
So(DataPath, ShouldEqual, "/tmp/override")
|
||||||
@ -69,8 +70,9 @@ func TestLoadingSettings(t *testing.T) {
|
|||||||
|
|
||||||
Convey("Command line overrides specified config file", func() {
|
Convey("Command line overrides specified config file", func() {
|
||||||
NewConfigContext(&CommandLineArgs{
|
NewConfigContext(&CommandLineArgs{
|
||||||
Args: []string{"cfg:paths.data=/tmp/data"},
|
HomePath: "../../",
|
||||||
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
||||||
|
Args: []string{"cfg:paths.data=/tmp/data"},
|
||||||
})
|
})
|
||||||
|
|
||||||
So(DataPath, ShouldEqual, "/tmp/data")
|
So(DataPath, ShouldEqual, "/tmp/data")
|
||||||
@ -79,6 +81,7 @@ func TestLoadingSettings(t *testing.T) {
|
|||||||
Convey("Can use environment variables in config values", func() {
|
Convey("Can use environment variables in config values", func() {
|
||||||
os.Setenv("GF_DATA_PATH", "/tmp/env_override")
|
os.Setenv("GF_DATA_PATH", "/tmp/env_override")
|
||||||
NewConfigContext(&CommandLineArgs{
|
NewConfigContext(&CommandLineArgs{
|
||||||
|
HomePath: "../../",
|
||||||
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
|
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user