diff options
Diffstat (limited to 'config.go')
| -rw-r--r-- | config.go | 71 |
1 files changed, 71 insertions, 0 deletions
@@ -24,6 +24,29 @@ func (m *Machines) ConfigSave() error { configWrite(data) return nil } + +// when running on a single machine, save the file in forge/ +// as <hostname>.pb +// write to ~/.config/forge/ unless ENV{FORGE_HOME} is set +func (m *Machine) ConfigSave() error { + if os.Getenv("FORGE_HOME") == "" { + homeDir, _ := os.UserHomeDir() + fullpath := filepath.Join(homeDir, ".config/forge") + os.Setenv("FORGE_HOME", fullpath) + } + data, err := m.Marshal() + if err != nil { + log.Info("proto.Marshal() failed len", len(data), err) + return err + } + + log.Info("ConfigSave() proto.Marshal() worked len", len(data)) + + hostname, _ := os.Hostname() + fname := hostname + ".pb" + return m.configWrite(fname, data) +} + func ConfigSaveRaw(data []byte) error { configWrite(data) return nil @@ -45,6 +68,30 @@ func (m *Machines) ConfigLoad() error { return nil } +func (m *Machine) ConfigLoad() error { + if m == nil { + return errors.New("It's not safe to run ConfigLoad() on a nil ?") + } + if os.Getenv("FORGE_HOME") == "" { + homeDir, _ := os.UserHomeDir() + fullpath := filepath.Join(homeDir, ".config/forge") + os.Setenv("FORGE_HOME", fullpath) + } + + hostname, _ := os.Hostname() + fname := hostname + ".pb" + + if data, err := m.loadFile(fname); err == nil { + if err = proto.Unmarshal(data, m); err != nil { + log.Warn("broken zookeeper.pb config file", fname) + return err + } + } else { + return err + } + return nil +} + func loadFile(filename string) ([]byte, error) { homeDir, err := os.UserHomeDir() p := filepath.Join(homeDir, ".config/zookeeper") @@ -57,6 +104,17 @@ func loadFile(filename string) ([]byte, error) { return data, nil } +func (m *Machine) loadFile(fname string) ([]byte, error) { + fullname := filepath.Join(os.Getenv("FORGE_HOME"), fname) + + data, err := os.ReadFile(fullname) + if err != nil { + // log.Info("open config file :", err) + return nil, err + } + return data, nil +} + func configWrite(data []byte) error { homeDir, err := os.UserHomeDir() p := filepath.Join(homeDir, ".config/zookeeper") @@ -70,3 +128,16 @@ func configWrite(data []byte) error { cfgfile.Write(data) return nil } + +func (m *Machine) configWrite(fname string, data []byte) error { + fullname := filepath.Join(os.Getenv("FORGE_HOME"), fname) + + cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, 0666) + defer cfgfile.Close() + if err != nil { + log.Warn("open config file :", err) + return err + } + cfgfile.Write(data) + return nil +} |
