This is an automated email from the ASF dual-hosted git repository. rob pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git
commit 7e4d4ec2bb4268ff3609be1bb2f9d99399f8aeca Author: Dylan Volz <dylan_v...@comcast.com> AuthorDate: Tue May 15 09:16:14 2018 -0600 change config error handling so all are logged and add default ldap timeout --- traffic_ops/traffic_ops_golang/config/config.go | 44 +++++++++++++++------- .../traffic_ops_golang/traffic_ops_golang.go | 26 +++++++------ 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/traffic_ops/traffic_ops_golang/config/config.go b/traffic_ops/traffic_ops_golang/config/config.go index 64d7a34..d85d20c 100644 --- a/traffic_ops/traffic_ops_golang/config/config.go +++ b/traffic_ops/traffic_ops_golang/config/config.go @@ -28,6 +28,8 @@ import ( "github.com/apache/incubator-trafficcontrol/lib/go-log" "github.com/apache/incubator-trafficcontrol/traffic_ops/traffic_ops_golang/riaksvc" "github.com/basho/riak-go-client" + "path/filepath" + "os" ) // Config reflects the structure of the cdn.conf file @@ -97,6 +99,8 @@ type ConfigLDAP struct { LDAPTimeoutSecs int `json:"ldap_timeout_secs"` } +const DefaultLDAPTimeoutSecs = 60 + // ErrorLog - critical messages func (c Config) ErrorLog() log.LogLocation { return log.LogLocation(c.LogLocationError) @@ -120,53 +124,66 @@ func (c Config) EventLog() log.LogLocation { return log.LogLocation(c.LogLocationEvent) } +const BlockStartup = true +const AllowStartup = false // LoadConfig - reads the config file into the Config struct -func LoadConfig(cdnConfPath string, dbConfPath string, riakConfPath string, appVersion string) (Config, error) { +func LoadConfig(cdnConfPath string, dbConfPath string, riakConfPath string, appVersion string) (Config, []error, bool) { // load json from cdn.conf confBytes, err := ioutil.ReadFile(cdnConfPath) if err != nil { - return Config{}, fmt.Errorf("reading CDN conf '%s': %v", cdnConfPath, err) + return Config{}, []error{fmt.Errorf("reading CDN conf '%s': %v", cdnConfPath, err)}, BlockStartup } cfg := Config{Version: appVersion} err = json.Unmarshal(confBytes, &cfg) if err != nil { - return Config{}, fmt.Errorf("unmarshalling '%s': %v", cdnConfPath, err) + return Config{}, []error{fmt.Errorf("unmarshalling '%s': %v", cdnConfPath, err)}, BlockStartup } // load json from database.conf dbConfBytes, err := ioutil.ReadFile(dbConfPath) if err != nil { - return Config{}, fmt.Errorf("reading db conf '%s': %v", dbConfPath, err) + return Config{}, []error{fmt.Errorf("reading db conf '%s': %v", dbConfPath, err)}, BlockStartup } err = json.Unmarshal(dbConfBytes, &cfg.DB) if err != nil { - return Config{}, fmt.Errorf("unmarshalling '%s': %v", dbConfPath, err) + return Config{}, []error{fmt.Errorf("unmarshalling '%s': %v", dbConfPath, err)}, BlockStartup } cfg, err = ParseConfig(cfg) if err != nil { - return Config{}, fmt.Errorf("parsing config '%s': %v", dbConfPath, err) + return Config{}, []error{fmt.Errorf("parsing config '%s': %v", dbConfPath, err)}, BlockStartup } if riakConfPath != "" { cfg.RiakEnabled, cfg.RiakAuthOptions, err = riaksvc.GetRiakConfig(riakConfPath) if err != nil { - return Config{}, fmt.Errorf("parsing config '%s': %v", riakConfPath, err) + return Config{}, []error{fmt.Errorf("parsing config '%s': %v", riakConfPath, err)}, BlockStartup } } - + // check for and load ldap.conf if cfg.LDAPConfPath != "" { cfg.LDAPEnabled, cfg.ConfigLDAP, err = GetLDAPConfig(cfg.LDAPConfPath) if err != nil { cfg.LDAPEnabled = false - return cfg, fmt.Errorf("parsing ldap config '%s': %v", cfg.LDAPConfPath, err) + return cfg, []error{fmt.Errorf("parsing ldap config '%s': %v", cfg.LDAPConfPath, err)}, BlockStartup + } + } else { // ldap config location not specified in cdn.conf, check in directory with cdn.conf for backwards compatibility with perl. + confDir := filepath.Dir(cdnConfPath) + genericLDAPConfPath := filepath.Join(confDir,"cdn.conf") + if _, err := os.Stat(genericLDAPConfPath); !os.IsNotExist(err) { // ldap.conf exists and we should error if it is not readable/parseable. + cfg.LDAPEnabled, cfg.ConfigLDAP, err = GetLDAPConfig(genericLDAPConfPath) + if err != nil { // no config or unparseable, do not enable LDAP + cfg.LDAPEnabled = false + return cfg, []error{err}, BlockStartup + } + } else { + cfg.LDAPEnabled = false + return cfg, []error{}, AllowStartup // no ldap.conf, disable and allow startup } - } else { - cfg.LDAPEnabled = false } - return cfg, err + return cfg, []error{}, AllowStartup } // GetCertPath - extracts path to cert .cert file @@ -254,7 +271,6 @@ func ParseConfig(cfg Config) (Config, error) { func GetLDAPConfig(LDAPConfPath string) (bool, *ConfigLDAP, error) { LDAPConfBytes, err := ioutil.ReadFile(LDAPConfPath) if err != nil { - return false, nil, fmt.Errorf("reading LDAP conf '%v': %v", LDAPConfPath, err) } LDAPconf, err := getLDAPConf(string(LDAPConfBytes)) @@ -265,7 +281,7 @@ func GetLDAPConfig(LDAPConfPath string) (bool, *ConfigLDAP, error) { } func getLDAPConf(s string) (*ConfigLDAP, error) { - ldapConf := ConfigLDAP{} + ldapConf := ConfigLDAP{LDAPTimeoutSecs: DefaultLDAPTimeoutSecs} //if the field is not set in the config we use the default instead of 0 err := json.Unmarshal([]byte(s), &ldapConf) return &ldapConf, err } diff --git a/traffic_ops/traffic_ops_golang/traffic_ops_golang.go b/traffic_ops/traffic_ops_golang/traffic_ops_golang.go index 9de1055..782e991 100644 --- a/traffic_ops/traffic_ops_golang/traffic_ops_golang.go +++ b/traffic_ops/traffic_ops_golang/traffic_ops_golang.go @@ -25,7 +25,6 @@ import ( "fmt" "net/http" "os" - "strings" "time" "github.com/apache/incubator-trafficcontrol/lib/go-log" @@ -59,23 +58,25 @@ func main() { os.Exit(1) } - var cfg config.Config - var err error - var errorToLog error - - if cfg, err = config.LoadConfig(*configFileName, *dbConfigFileName, *riakConfigFileName, version); err != nil { - if !strings.Contains(err.Error(), "riak conf") { - fmt.Println("Error loading config: " + err.Error()) - return + cfg, errsToLog, blockStart := config.LoadConfig(*configFileName, *dbConfigFileName, *riakConfigFileName, version) + if blockStart { + for _, err := range errsToLog { + fmt.Println(err) } - errorToLog = err + os.Exit(1) } + if err := log.InitCfg(cfg); err != nil { fmt.Printf("Error initializing loggers: %v\n", err) + for _, err := range errsToLog { + fmt.Println(err) + } return } - log.Warnln(errorToLog) + for _, err := range errsToLog { + log.Warnln(err) + } log.Infof(`Using Config values: Port: %s @@ -100,7 +101,8 @@ func main() { Warn Log: %s Info Log: %s Debug Log: %s - Event Log: %s`, cfg.Port, cfg.DB.Hostname, cfg.DB.User, cfg.DB.DBName, cfg.DB.SSL, cfg.MaxDBConnections, cfg.Listen[0], cfg.Insecure, cfg.CertPath, cfg.KeyPath, time.Duration(cfg.ProxyTimeout)*time.Second, time.Duration(cfg.ProxyKeepAlive)*time.Second, time.Duration(cfg.ProxyTLSTimeout)*time.Second, time.Duration(cfg.ProxyReadHeaderTimeout)*time.Second, time.Duration(cfg.ReadTimeout)*time.Second, time.Duration(cfg.ReadHeaderTimeout)*time.Second, time.Duration(cfg.WriteTimeou [...] + Event Log: %s + LDAP Enabled: %v`, cfg.Port, cfg.DB.Hostname, cfg.DB.User, cfg.DB.DBName, cfg.DB.SSL, cfg.MaxDBConnections, cfg.Listen[0], cfg.Insecure, cfg.CertPath, cfg.KeyPath, time.Duration(cfg.ProxyTimeout)*time.Second, time.Duration(cfg.ProxyKeepAlive)*time.Second, time.Duration(cfg.ProxyTLSTimeout)*time.Second, time.Duration(cfg.ProxyReadHeaderTimeout)*time.Second, time.Duration(cfg.ReadTimeout)*time.Second, time.Duration(cfg.ReadHeaderTimeout)*time.Second, time.Duration(cfg.WriteTimeou [...] sslStr := "require" if !cfg.DB.SSL { -- To stop receiving notification emails like this one, please contact r...@apache.org.