X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=lib%2Fxdsconfig%2Fconfigfile.go;h=7ddb0106b5fbc2160335aba89c44035639dbf85a;hb=247bb7c2db5f0d48178398599348249bf886ebbc;hp=e3737f420f3467e8300a454825504a153a218467;hpb=2d90eac319979dba64371258b30e61e77a15db7d;p=src%2Fxds%2Fxds-agent.git diff --git a/lib/xdsconfig/configfile.go b/lib/xdsconfig/configfile.go index e3737f4..7ddb010 100644 --- a/lib/xdsconfig/configfile.go +++ b/lib/xdsconfig/configfile.go @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2017-2018 "IoT.bzh" + * Author Sebastien Douheret + * + * 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,16 +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/ /etc/xds-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) @@ -50,7 +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, "/etc/xds/agent/agent-config.json") var cFile *string for _, p := range searchIn { @@ -61,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) @@ -70,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 } @@ -89,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,