Bump to v0.2.0
[src/xds/xds-agent.git] / lib / xdsconfig / fileconfig.go
index 3c834fc..efe94bf 100644 (file)
@@ -7,7 +7,7 @@ import (
        "path"
        "path/filepath"
 
-       "github.com/iotbzh/xds-agent/lib/common"
+       common "github.com/iotbzh/xds-common/golib"
 )
 
 type SyncThingConf struct {
@@ -27,7 +27,7 @@ type FileConfig struct {
 // getConfigFromFile reads configuration from a config file.
 // Order to determine which config file is used:
 //  1/ from command line option: "--config myConfig.json"
-//  2/ $HOME/.xds/agent-config.json file
+//  2/ $HOME/.xds/agent/agent-config.json file
 //  3/ <current_dir>/agent-config.json file
 //  4/ <executable dir>/agent-config.json file
 
@@ -38,16 +38,23 @@ func updateConfigFromFile(c *Config, confFile string) (*FileConfig, error) {
                searchIn = append(searchIn, confFile)
        }
        if usr, err := user.Current(); err == nil {
-               searchIn = append(searchIn, path.Join(usr.HomeDir, ".xds", "agent-config.json"))
+               searchIn = append(searchIn, path.Join(usr.HomeDir, ".xds", "agent", "agent-config.json"))
        }
-       cwd, err := os.Getwd()
-       if err == nil {
-               searchIn = append(searchIn, path.Join(cwd, "agent-config.json"))
-       }
-       exePath, err := filepath.Abs(filepath.Dir(os.Args[0]))
+
+       searchIn = append(searchIn, "/etc/xds-agent/agent-config.json")
+
+       exePath := os.Args[0]
+       ee, _ := os.Executable()
+       exeAbsPath, err := filepath.Abs(ee)
        if err == nil {
-               searchIn = append(searchIn, path.Join(exePath, "agent-config.json"))
+               exePath, err = filepath.EvalSymlinks(exeAbsPath)
+               if err == nil {
+                       exePath = filepath.Dir(ee)
+               } else {
+                       exePath = filepath.Dir(exeAbsPath)
+               }
        }
+       searchIn = append(searchIn, path.Join(exePath, "agent-config.json"))
 
        var cFile *string
        for _, p := range searchIn {
@@ -56,30 +63,32 @@ func updateConfigFromFile(c *Config, confFile string) (*FileConfig, error) {
                        break
                }
        }
-       fCfg := FileConfig{}
-       if cFile == nil {
-               // No config file found
-               return &fCfg, nil
-       }
+       // Use default settings
+       fCfg := *c.FileConf
 
-       c.Log.Infof("Use config file: %s", *cFile)
+       // Read config file when existing
+       if cFile != nil {
+               c.Log.Infof("Use config file: %s", *cFile)
 
-       // TODO move on viper package to support comments in JSON and also
-       // bind with flags (command line options)
-       // see https://github.com/spf13/viper#working-with-flags
+               // TODO move on viper package to support comments in JSON and also
+               // bind with flags (command line options)
+               // see https://github.com/spf13/viper#working-with-flags
 
-       fd, _ := os.Open(*cFile)
-       defer fd.Close()
-       if err := json.NewDecoder(fd).Decode(&fCfg); err != nil {
-               return nil, err
+               fd, _ := os.Open(*cFile)
+               defer fd.Close()
+               if err := json.NewDecoder(fd).Decode(&fCfg); err != nil {
+                       return nil, err
+               }
        }
 
        // Support environment variables (IOW ${MY_ENV_VAR} syntax) in agent-config.json
-       for _, field := range []*string{
+       vars := []*string{
                &fCfg.LogsDir,
-               &fCfg.SThgConf.Home,
-               &fCfg.SThgConf.BinDir} {
-
+       }
+       if fCfg.SThgConf != nil {
+               vars = append(vars, &fCfg.SThgConf.Home, &fCfg.SThgConf.BinDir)
+       }
+       for _, field := range vars {
                var err error
                *field, err = common.ResolveEnvVar(*field)
                if err != nil {
@@ -92,5 +101,11 @@ func updateConfigFromFile(c *Config, confFile string) (*FileConfig, error) {
                c.HTTPPort = fCfg.HTTPPort
        }
 
+       // Set default apikey
+       // FIXME - rework with dynamic key
+       if fCfg.XDSAPIKey == "" {
+               fCfg.XDSAPIKey = "1234abcezam"
+       }
+
        return &fCfg, nil
 }