diff options
| author | Jeff Carr <[email protected]> | 2024-11-19 05:44:42 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-11-19 05:44:42 -0600 |
| commit | 11e105ec931e2a190df33fac5de81636097a97f6 (patch) | |
| tree | 1e2ae91fef6b85778b3038a406cd6ea9029e9f8f | |
| parent | 24a4b65f268d8a4086cb2f906b1da2efce2799d8 (diff) | |
save config file worksv0.0.6
Signed-off-by: Jeff Carr <[email protected]>
| -rw-r--r-- | config.go | 72 | ||||
| -rw-r--r-- | helpers.go | 10 |
2 files changed, 82 insertions, 0 deletions
diff --git a/config.go b/config.go new file mode 100644 index 0000000..affe013 --- /dev/null +++ b/config.go @@ -0,0 +1,72 @@ +package zoopb + +// functions to import and export the protobuf +// data to and from config files + +import ( + "errors" + "os" + "path/filepath" + + "go.wit.com/log" + "google.golang.org/protobuf/proto" +) + +// writes out the cluster information it seperate files +// to make it humanly possible to hand edit things as needed +func (m *Machines) ConfigSave() error { + data, err := m.Marshal() + if err != nil { + log.Info("proto.Marshal() failed len", len(data), err) + return err + } + log.Info("proto.Marshal() worked len", len(data)) + configWrite(data) + return nil +} +func ConfigSaveRaw(data []byte) error { + configWrite(data) + return nil +} + +func (m *Machines) ConfigLoad() error { + if m == nil { + return errors.New("It's not safe to run ConfigLoad() on a nil ?") + } + + if data, err := loadFile("zookeeper.pb"); err == nil { + if err = proto.Unmarshal(data, m); err != nil { + log.Warn("broken zookeeper.pb config file") + return err + } + } else { + return err + } + return nil +} + +func loadFile(filename string) ([]byte, error) { + homeDir, err := os.UserHomeDir() + p := filepath.Join(homeDir, ".config/zookeeper") + fullname := filepath.Join(p, filename) + 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") + fname := filepath.Join(p, "zookeeper.pb") + cfgfile, err := os.OpenFile(fname, 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 +} @@ -51,3 +51,13 @@ func (m *Machine) Marshal() ([]byte, error) { func (m *Machine) Unmarshal(data []byte) error { return proto.Unmarshal(data, m) } + +// marshal to wire +func (m *Machines) Marshal() ([]byte, error) { + return proto.Marshal(m) +} + +// unmarshal from wire +func (m *Machines) Unmarshal(data []byte) error { + return proto.Unmarshal(data, m) +} |
