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
|
||||
|
||||
|
||||
|
6
main.go
6
main.go
@ -25,6 +25,7 @@ var commit = "NA"
|
||||
var buildstamp string
|
||||
|
||||
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")
|
||||
|
||||
func init() {
|
||||
@ -65,8 +66,9 @@ func main() {
|
||||
|
||||
func initRuntime() {
|
||||
setting.NewConfigContext(&setting.CommandLineArgs{
|
||||
Config: *configFile,
|
||||
Args: flag.Args(),
|
||||
Config: *configFile,
|
||||
HomePath: *homePath,
|
||||
Args: flag.Args(),
|
||||
})
|
||||
|
||||
log.Info("Starting Grafana")
|
||||
|
@ -106,14 +106,14 @@ var (
|
||||
)
|
||||
|
||||
type CommandLineArgs struct {
|
||||
Config string
|
||||
Args []string
|
||||
Config string
|
||||
HomePath string
|
||||
Args []string
|
||||
}
|
||||
|
||||
func init() {
|
||||
IsWindows = runtime.GOOS == "windows"
|
||||
log.NewLogger(0, "console", `{"level": 0}`)
|
||||
HomePath, _ = filepath.Abs(".")
|
||||
}
|
||||
|
||||
func parseAppUrlAndSubUrl(section *ini.Section) (string, string) {
|
||||
@ -226,6 +226,14 @@ func evalConfigValues() {
|
||||
}
|
||||
|
||||
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.BlockMode = false
|
||||
if err != nil {
|
||||
@ -256,8 +264,6 @@ func loadSpecifedConfigFile(configFile string) {
|
||||
func loadConfiguration(args *CommandLineArgs) {
|
||||
var err error
|
||||
|
||||
args.Config = evalEnvVarExpression(args.Config)
|
||||
|
||||
// load config defaults
|
||||
defaultConfigFile := path.Join(HomePath, "conf/defaults.ini")
|
||||
configFiles = append(configFiles, defaultConfigFile)
|
||||
@ -276,9 +282,7 @@ func loadConfiguration(args *CommandLineArgs) {
|
||||
applyCommandLineDefaultProperties(commandLineProps)
|
||||
|
||||
// load specified config file
|
||||
if args.Config != "" {
|
||||
loadSpecifedConfigFile(args.Config)
|
||||
}
|
||||
loadSpecifedConfigFile(args.Config)
|
||||
|
||||
// apply environment overrides
|
||||
applyEnvVariableOverrides()
|
||||
@ -290,11 +294,40 @@ func loadConfiguration(args *CommandLineArgs) {
|
||||
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) {
|
||||
setHomePath(args)
|
||||
loadConfiguration(args)
|
||||
|
||||
DataPath = makeAbsolute(Cfg.Section("paths").Key("data").String(), HomePath)
|
||||
|
||||
initLogging(args)
|
||||
|
||||
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")
|
||||
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)
|
||||
EnableGzip = server.Key("enable_gzip").MustBool(false)
|
||||
|
||||
|
@ -10,12 +10,10 @@ import (
|
||||
|
||||
func TestLoadingSettings(t *testing.T) {
|
||||
|
||||
HomePath, _ = filepath.Abs("../../")
|
||||
|
||||
Convey("Testing loading settings from ini file", t, func() {
|
||||
|
||||
Convey("Given the default ini files", func() {
|
||||
NewConfigContext(&CommandLineArgs{})
|
||||
NewConfigContext(&CommandLineArgs{HomePath: "../../"})
|
||||
|
||||
So(AppName, ShouldEqual, "Grafana")
|
||||
So(AdminUser, ShouldEqual, "admin")
|
||||
@ -23,7 +21,7 @@ func TestLoadingSettings(t *testing.T) {
|
||||
|
||||
Convey("Should be able to override via environment variables", func() {
|
||||
os.Setenv("GF_SECURITY_ADMIN_USER", "superduper")
|
||||
NewConfigContext(&CommandLineArgs{})
|
||||
NewConfigContext(&CommandLineArgs{HomePath: "../../"})
|
||||
|
||||
So(AdminUser, ShouldEqual, "superduper")
|
||||
So(DataPath, ShouldEqual, filepath.Join(HomePath, "data"))
|
||||
@ -40,7 +38,8 @@ func TestLoadingSettings(t *testing.T) {
|
||||
|
||||
Convey("Should be able to override via command line", func() {
|
||||
NewConfigContext(&CommandLineArgs{
|
||||
Args: []string{"cfg:paths.data=/tmp/data", "cfg:paths.logs=/tmp/logs"},
|
||||
HomePath: "../../",
|
||||
Args: []string{"cfg:paths.data=/tmp/data", "cfg:paths.logs=/tmp/logs"},
|
||||
})
|
||||
|
||||
So(DataPath, ShouldEqual, "/tmp/data")
|
||||
@ -49,6 +48,7 @@ func TestLoadingSettings(t *testing.T) {
|
||||
|
||||
Convey("Should be able to override defaults via command line", func() {
|
||||
NewConfigContext(&CommandLineArgs{
|
||||
HomePath: "../../",
|
||||
Args: []string{
|
||||
"cfg:default.server.domain=test2",
|
||||
},
|
||||
@ -60,8 +60,9 @@ func TestLoadingSettings(t *testing.T) {
|
||||
|
||||
Convey("Defaults can be overriden in specified config file", func() {
|
||||
NewConfigContext(&CommandLineArgs{
|
||||
Args: []string{"cfg:default.paths.data=/tmp/data"},
|
||||
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
||||
HomePath: "../../",
|
||||
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
||||
Args: []string{"cfg:default.paths.data=/tmp/data"},
|
||||
})
|
||||
|
||||
So(DataPath, ShouldEqual, "/tmp/override")
|
||||
@ -69,8 +70,9 @@ func TestLoadingSettings(t *testing.T) {
|
||||
|
||||
Convey("Command line overrides specified config file", func() {
|
||||
NewConfigContext(&CommandLineArgs{
|
||||
Args: []string{"cfg:paths.data=/tmp/data"},
|
||||
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
||||
HomePath: "../../",
|
||||
Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
|
||||
Args: []string{"cfg:paths.data=/tmp/data"},
|
||||
})
|
||||
|
||||
So(DataPath, ShouldEqual, "/tmp/data")
|
||||
@ -79,7 +81,8 @@ func TestLoadingSettings(t *testing.T) {
|
||||
Convey("Can use environment variables in config values", func() {
|
||||
os.Setenv("GF_DATA_PATH", "/tmp/env_override")
|
||||
NewConfigContext(&CommandLineArgs{
|
||||
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
|
||||
HomePath: "../../",
|
||||
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
|
||||
})
|
||||
|
||||
So(DataPath, ShouldEqual, "/tmp/env_override")
|
||||
|
Loading…
Reference in New Issue
Block a user