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:
commit
974206235d
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user