1
0
mirror of https://github.com/rancher/os.git synced 2025-07-08 04:18:38 +00:00

Merge pull request #512 from imikushin/cloud-config-panic

less panics and fatals
This commit is contained in:
Darren Shepherd 2015-08-20 08:46:24 -07:00
commit 974206235d
7 changed files with 43 additions and 33 deletions

View File

@ -14,7 +14,7 @@ func authorizeSSHKeys(user string, authorizedKeys []string, name string) {
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {
log.Fatal(err.Error()) log.WithFields(log.Fields{"err": err, "user": user, "auth_key": authorizedKey}).Error("Error updating SSH authorized_keys")
} }
} }
} }

View File

@ -100,7 +100,8 @@ func saveFiles(cloudConfigBytes, scriptBytes []byte, metadata datasource.Metadat
func currentDatasource() (datasource.Datasource, error) { func currentDatasource() (datasource.Datasource, error) {
cfg, err := rancherConfig.LoadConfig() cfg, err := rancherConfig.LoadConfig()
if err != nil { if err != nil {
log.Fatalf("Failed to read rancher config %v", err) log.WithFields(log.Fields{"err": err}).Error("Failed to read rancher config")
return nil, err
} }
dss := getDatasources(cfg) dss := getDatasources(cfg)
@ -208,15 +209,22 @@ func saveCloudConfig() error {
return err return err
} }
} else if config.IsCloudConfig(userData) { } else if config.IsCloudConfig(userData) {
// nothing to do if rancherConfig.ReadConfig(userDataBytes) == nil {
log.WithFields(log.Fields{"cloud-config": userData}).Warn("Failed to parse cloud-config, not saving.")
userDataBytes = []byte{}
}
} else { } else {
log.Errorf("Unrecognized cloud-init\n%s", userData) log.Errorf("Unrecognized cloud-init\n%s", userData)
userDataBytes = []byte{} userDataBytes = []byte{}
} }
if userDataBytes, scriptBytes, err = mergeBaseConfig(userDataBytes, scriptBytes); err != nil { userDataBytesMerged, scriptBytes, err := mergeBaseConfig(userDataBytes, scriptBytes)
if err != nil {
log.Errorf("Failed to merge base config: %v", err) log.Errorf("Failed to merge base config: %v", err)
return err } else if rancherConfig.ReadConfig(userDataBytesMerged) == nil {
log.WithFields(log.Fields{"cloud-config": userData}).Warn("Failed to parse merged cloud-config, not merging.")
} else {
userDataBytes = userDataBytesMerged
} }
return saveFiles(userDataBytes, scriptBytes, metadata) return saveFiles(userDataBytes, scriptBytes, metadata)
@ -268,7 +276,7 @@ func executeCloudConfig() error {
if cc.Hostname != "" { if cc.Hostname != "" {
//set hostname //set hostname
if err := hostname.SetHostname(cc.Hostname); err != nil { if err := hostname.SetHostname(cc.Hostname); err != nil {
log.Fatal(err) log.WithFields(log.Fields{"err": err, "hostname": cc.Hostname}).Error("Error setting hostname")
} }
} }
@ -290,7 +298,8 @@ func executeCloudConfig() error {
f := system.File{File: file} f := system.File{File: file}
fullPath, err := system.WriteFile(&f, "/") fullPath, err := system.WriteFile(&f, "/")
if err != nil { if err != nil {
log.Fatal(err) log.WithFields(log.Fields{"err": err, "path": fullPath}).Error("Error writing file")
continue
} }
log.Printf("Wrote file %s to filesystem", fullPath) log.Printf("Wrote file %s to filesystem", fullPath)
} }
@ -306,14 +315,14 @@ func Main() {
if save { if save {
err := saveCloudConfig() err := saveCloudConfig()
if err != nil { if err != nil {
log.Fatalf("Failed to save cloud config: %v", err) log.WithFields(log.Fields{"err": err}).Error("Failed to save cloud-config")
} }
} }
if execute { if execute {
err := executeCloudConfig() err := executeCloudConfig()
if err != nil { if err != nil {
log.Fatalf("Failed to save cloud config: %v", err) log.WithFields(log.Fields{"err": err}).Error("Failed to execute cloud-config")
} }
} }
} }

View File

@ -101,7 +101,7 @@ func imagesFromConfig(cfg *config.CloudConfig) []string {
func runImages(c *cli.Context) { func runImages(c *cli.Context) {
configFile := c.String("input") configFile := c.String("input")
cfg := config.ReadConfig(configFile) cfg := config.ReadConfig(nil, configFile)
if cfg == nil { if cfg == nil {
log.Fatalf("Could not read config from file %v", configFile) log.Fatalf("Could not read config from file %v", configFile)
} }
@ -165,12 +165,12 @@ func configGet(c *cli.Context) {
cfg, err := config.LoadConfig() cfg, err := config.LoadConfig()
if err != nil { if err != nil {
log.Panicln(err) log.WithFields(log.Fields{"err": err}).Fatal("config get: failed to load config")
} }
val, err := cfg.Get(arg) val, err := cfg.Get(arg)
if err != nil { if err != nil {
log.WithFields(log.Fields{"cfg": cfg, "arg": arg, "val": val}).Panicln(err) log.WithFields(log.Fields{"cfg": cfg, "key": arg, "val": val, "err": err}).Fatal("config get: failed to retrieve value")
} }
printYaml := false printYaml := false

View File

@ -49,7 +49,7 @@ func (c *CloudConfig) Merge(bytes []byte) error {
func LoadConfig() (*CloudConfig, error) { func LoadConfig() (*CloudConfig, error) {
cfg := NewConfig() cfg := NewConfig()
if err := cfg.Reload(); err != nil { if err := cfg.Reload(); err != nil {
log.WithFields(log.Fields{"cfg": cfg}).Panicln(err) log.WithFields(log.Fields{"cfg": cfg, "err": err}).Error("Failed to reload config")
return nil, err return nil, err
} }
@ -67,18 +67,22 @@ func LoadConfig() (*CloudConfig, error) {
} }
func (c *CloudConfig) merge(values map[interface{}]interface{}) error { func (c *CloudConfig) merge(values map[interface{}]interface{}) error {
t := &CloudConfig{}
if err := util.Convert(values, t); err != nil {
return err
}
return util.Convert(values, c) return util.Convert(values, c)
} }
func (c *CloudConfig) readFiles() error { func (c *CloudConfig) readFiles() error {
data, err := readConfig(nil, CloudConfigFile, LocalConfigFile, PrivateConfigFile) data, err := readConfig(nil, CloudConfigFile, LocalConfigFile, PrivateConfigFile)
if err != nil { if err != nil {
log.Panicln(err) log.WithFields(log.Fields{"err": err}).Error("Error reading config files")
return err return err
} }
if err := c.merge(data); err != nil { if err := c.merge(data); err != nil {
log.WithFields(log.Fields{"cfg": c, "data": data}).Panicln(err) log.WithFields(log.Fields{"cfg": c, "data": data, "err": err}).Error("Error merging config data")
return err return err
} }
@ -89,7 +93,7 @@ func (c *CloudConfig) readCmdline() error {
log.Debug("Reading config cmdline") log.Debug("Reading config cmdline")
cmdLine, err := ioutil.ReadFile("/proc/cmdline") cmdLine, err := ioutil.ReadFile("/proc/cmdline")
if err != nil { if err != nil {
log.Panicln(err) log.WithFields(log.Fields{"err": err}).Error("Failed to read kernel params")
return err return err
} }
@ -102,8 +106,7 @@ func (c *CloudConfig) readCmdline() error {
cmdLineObj := parseCmdline(strings.TrimSpace(string(cmdLine))) cmdLineObj := parseCmdline(strings.TrimSpace(string(cmdLine)))
if err := c.merge(cmdLineObj); err != nil { if err := c.merge(cmdLineObj); err != nil {
log.WithFields(log.Fields{"cfg": c, "cmdLine": cmdLine, "data": cmdLineObj}).Panicln(err) log.WithFields(log.Fields{"cfg": c, "cmdLine": cmdLine, "data": cmdLineObj, "err": err}).Warn("Error adding kernel params to config")
return err
} }
return nil return nil
} }
@ -129,7 +132,7 @@ func Dump(private, full bool) (string, error) {
return "", err return "", err
} }
if err := c.readGlobals(); err != nil { if err := c.readCmdline(); err != nil {
return "", err return "", err
} }
@ -158,16 +161,10 @@ func (c *CloudConfig) amendNils() error {
return nil return nil
} }
func (c *CloudConfig) readGlobals() error {
return util.ShortCircuit(
c.readCmdline,
)
}
func (c *CloudConfig) Reload() error { func (c *CloudConfig) Reload() error {
return util.ShortCircuit( return util.ShortCircuit(
c.readFiles, c.readFiles,
c.readGlobals, c.readCmdline,
c.amendNils, c.amendNils,
) )
} }

View File

@ -1,13 +1,15 @@
package config package config
func NewConfig() *CloudConfig { func NewConfig() *CloudConfig {
return ReadConfig(OsConfigFile) return ReadConfig(nil, OsConfigFile)
} }
func ReadConfig(file string) *CloudConfig { func ReadConfig(bytes []byte, files ...string) *CloudConfig {
if data, err := readConfig(nil, file); err == nil { if data, err := readConfig(bytes, files...); err == nil {
c := &CloudConfig{} c := &CloudConfig{}
c.merge(data) if err := c.merge(data); err != nil {
return nil
}
c.amendNils() c.amendNils()
return c return c
} else { } else {

View File

@ -168,8 +168,10 @@ func RunInit() error {
} }
if cfg.Rancher.Debug { if cfg.Rancher.Debug {
cfgString, _ := config.Dump(false, true) cfgString, err := config.Dump(false, true)
if cfgString != "" { if err != nil {
log.WithFields(log.Fields{"err": err}).Error("Error serializing config")
} else {
log.Debugf("Config: %s", cfgString) log.Debugf("Config: %s", cfgString)
} }
} }

View File

@ -155,7 +155,7 @@ func RandSeq(n int) string {
func Convert(from, to interface{}) error { func Convert(from, to interface{}) error {
bytes, err := yaml.Marshal(from) bytes, err := yaml.Marshal(from)
if err != nil { if err != nil {
log.WithFields(log.Fields{"from": from}).Panicln(err) log.WithFields(log.Fields{"from": from, "err": err}).Warn("Error serializing to YML")
return err return err
} }