You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ro...@apache.org on 2018/05/17 22:41:37 UTC
[incubator-trafficcontrol] 18/19: change config error handling so
all are logged and add default ldap timeout
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 <Dy...@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
rob@apache.org.