Use go module as dependency tool instead of glide
[src/xds/xds-agent.git] / lib / xdsconfig / configfile.go
index 6eaaf6a..7ddb010 100644 (file)
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2017-2018 "IoT.bzh"
+ * Author Sebastien Douheret <sebastien@iot.bzh>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package xdsconfig
 
 import (
@@ -5,7 +22,7 @@ import (
        "os"
        "path"
 
-       common "github.com/iotbzh/xds-common/golib"
+       common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git"
 )
 
 type SyncThingConf struct {
@@ -21,10 +38,20 @@ type XDSServerConf struct {
 
        // private/not exported fields
        ID            string `json:"-"`
+       URLIndex      string `json:"-"`
        APIBaseURL    string `json:"-"`
        APIPartialURL string `json:"-"`
 }
 
+type XDSBinderConf struct {
+       URL       string `json:"url"`
+       ConnRetry int    `json:"connRetry"`
+}
+
+type ProfileConfT struct {
+       XDSBinder XDSBinderConf `json:"xdsBinder"`
+}
+
 type FileConfig struct {
        HTTPPort    string          `json:"httpPort"`
        WebAppDir   string          `json:"webAppDir"`
@@ -32,17 +59,20 @@ type FileConfig struct {
        XDSAPIKey   string          `json:"xds-apikey"`
        ServersConf []XDSServerConf `json:"xdsServers"`
        SThgConf    *SyncThingConf  `json:"syncthing"`
+       ProfileConf ProfileConfT    `json:"profileConf"`
 }
 
 // readGlobalConfig 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/agent-config.json file
-//  3/ <current_dir>/agent-config.json file
-//  4/ <executable dir>/agent-config.json file
+//  3/ /etc/xds/agent/agent-config.json file
 
 func readGlobalConfig(c *Config, confFile string) error {
 
+       var fd *os.File
+       var fCfg = FileConfig{}
+
        searchIn := make([]string, 0, 3)
        if confFile != "" {
                searchIn = append(searchIn, confFile)
@@ -51,9 +81,7 @@ func readGlobalConfig(c *Config, confFile string) error {
                searchIn = append(searchIn, path.Join(homeDir, ".xds", "agent", "agent-config.json"))
        }
 
-       searchIn = append(searchIn, "/etc/xds-agent/agent-config.json")
-
-       searchIn = append(searchIn, path.Join(common.GetExePath(), "agent-config.json"))
+       searchIn = append(searchIn, "/etc/xds/agent/agent-config.json")
 
        var cFile *string
        for _, p := range searchIn {
@@ -64,7 +92,8 @@ func readGlobalConfig(c *Config, confFile string) error {
        }
        if cFile == nil {
                c.Log.Infof("No config file found")
-               return nil
+               // always resolved env vars even if no config file found!
+               goto resVars
        }
 
        c.Log.Infof("Use config file: %s", *cFile)
@@ -73,11 +102,14 @@ func readGlobalConfig(c *Config, confFile string) error {
        // bind with flags (command line options)
        // see https://github.com/spf13/viper#working-with-flags
 
-       fd, _ := os.Open(*cFile)
-       defer fd.Close()
+       fd, _ = os.Open(*cFile)
+       defer func() {
+               if fd != nil {
+                       fd.Close()
+               }
+       }()
 
        // Decode config file content and save it in a first variable
-       fCfg := FileConfig{}
        if err := json.NewDecoder(fd).Decode(&fCfg); err != nil {
                return err
        }
@@ -92,6 +124,7 @@ func readGlobalConfig(c *Config, confFile string) error {
        }
 
        // Support environment variables (IOW ${MY_ENV_VAR} syntax) in agent-config.json
+resVars:
        vars := []*string{
                &c.FileConf.LogsDir,
                &c.FileConf.WebAppDir,