+/*
+ * 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 (
"os"
"path"
- common "github.com/iotbzh/xds-common/golib"
+ common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
)
type SyncThingConf struct {
}
type FileConfig struct {
- HTTPPort string `json:"httpPort"`
- WebAppDir string `json:"webAppDir"`
- LogsDir string `json:"logsDir"`
- // SEB A SUP ? XDSAPIKey string `json:"xds-apikey"`
+ HTTPPort string `json:"httpPort"`
+ WebAppDir string `json:"webAppDir"`
+ LogsDir string `json:"logsDir"`
+ XDSAPIKey string `json:"xds-apikey"`
ServersConf []XDSServerConf `json:"xdsServers"`
SThgConf *SyncThingConf `json:"syncthing"`
}
// 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)
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 {
}
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)
// 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
}
}
// Support environment variables (IOW ${MY_ENV_VAR} syntax) in agent-config.json
+resVars:
vars := []*string{
&c.FileConf.LogsDir,
&c.FileConf.WebAppDir,