1
0
mirror of https://github.com/rancher/os.git synced 2025-07-07 11:58: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
err := cmd.Run()
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) {
cfg, err := rancherConfig.LoadConfig()
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)
@ -208,15 +209,22 @@ func saveCloudConfig() error {
return err
}
} 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 {
log.Errorf("Unrecognized cloud-init\n%s", userData)
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)
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)
@ -268,7 +276,7 @@ func executeCloudConfig() error {
if cc.Hostname != "" {
//set hostname
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}
fullPath, err := system.WriteFile(&f, "/")
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)
}
@ -306,14 +315,14 @@ func Main() {
if save {
err := saveCloudConfig()
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 {
err := executeCloudConfig()
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) {
configFile := c.String("input")
cfg := config.ReadConfig(configFile)
cfg := config.ReadConfig(nil, configFile)
if cfg == nil {
log.Fatalf("Could not read config from file %v", configFile)
}
@ -165,12 +165,12 @@ func configGet(c *cli.Context) {
cfg, err := config.LoadConfig()
if err != nil {
log.Panicln(err)
log.WithFields(log.Fields{"err": err}).Fatal("config get: failed to load config")
}
val, err := cfg.Get(arg)
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

View File

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

View File

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

View File

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

View File

@ -155,7 +155,7 @@ func RandSeq(n int) string {
func Convert(from, to interface{}) error {
bytes, err := yaml.Marshal(from)
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
}