config files in 4 pieces for human ease of use

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-10-26 07:28:33 -05:00
parent 32b0be6149
commit e176a9b536
1 changed files with 71 additions and 7 deletions

View File

@ -4,6 +4,7 @@ package virtbuf
// data to and from config files // data to and from config files
import ( import (
"errors"
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
@ -43,11 +44,11 @@ func (c *Cluster) ConfigSave() error {
var e *Events var e *Events
e = new(Events) e = new(Events)
e.Events = c.Events e.Events = c.Events
if err := ConfigWriteJSON(h, "newEvents.json"); err != nil { if err := ConfigWriteJSON(e, "newEvents.json"); err != nil {
fmt.Println("newEvents.json write failed") fmt.Println("newEvents.json write failed")
return err return err
} }
if err := ConfigWriteTEXT(h, "newEvents.text"); err != nil { if err := ConfigWriteTEXT(e, "newEvents.text"); err != nil {
fmt.Println("newEvents.json write failed") fmt.Println("newEvents.json write failed")
return err return err
} }
@ -72,15 +73,79 @@ func (c *Cluster) ConfigSave() error {
func (c *Cluster) ConfigLoad() error { func (c *Cluster) ConfigLoad() error {
if c == nil { if c == nil {
c = new(Cluster) return errors.New("It's not safe to run ConfigLoad() on a nil cluster")
} }
fullname := filepath.Join(os.Getenv("VIRTIGO_HOME"), "newCluster.json")
// load the cluster config file
if data, err := loadFile("cluster.text"); err == nil {
if err = prototext.Unmarshal(data, c); err != nil {
fmt.Println("broken cluster.text config file")
fmt.Println(err)
return errors.New("cluster.text file is broken")
}
} else {
return err
}
var d *Droplets
d = new(Droplets)
// load the droplet config file
if data, err := loadFile("droplets.json"); err == nil {
if err = protojson.Unmarshal(data, d); err != nil {
fmt.Println("broken droplets.json config file")
return err
}
} else {
return err
}
// copy them over. is this needed? does the memory free otherwise?
for _, drop := range d.Droplets {
c.Droplets = append(c.Droplets, drop)
}
var h *Hypervisors
h = new(Hypervisors)
// load the hypervisors config file
if data, err := loadFile("hypervisors.json"); err == nil {
if err = protojson.Unmarshal(data, h); err != nil {
fmt.Println("broken hypervisors.json config file")
return err
}
} else {
fmt.Println("ERROR HERE IN Hypervisors")
return err
}
// copy them over. is this needed? does the memory free otherwise?
for _, a := range h.Hypervisors {
c.Hypervisors = append(c.Hypervisors, a)
}
var e *Events
e = new(Events)
// load the events config file
if data, err := loadFile("events.json"); err == nil {
if err = protojson.Unmarshal(data, e); err != nil {
fmt.Println("broken events.json config file")
return err
}
} else {
return err
}
// copy them over. is this needed? does the memory free otherwise?
for _, a := range e.Events {
c.Events = append(c.Events, a)
}
return nil
}
func loadFile(filename string) ([]byte, error) {
fullname := filepath.Join(os.Getenv("VIRTIGO_HOME"), filename)
data, err := os.ReadFile(fullname) data, err := os.ReadFile(fullname)
if err != nil { if err != nil {
// log.Info("open config file :", err) // log.Info("open config file :", err)
return err return nil, err
} }
return c.UnmarshalJSON(data) return data, nil
} }
// reads in from the prototext file // reads in from the prototext file
@ -137,7 +202,6 @@ func WriteConfig(d *Droplets, h *Hypervisors, e *Events) bool {
return true return true
} }
// read in events.json // read in events.json
func ReadEventsConfig() (*Events, error) { func ReadEventsConfig() (*Events, error) {
e := new(Events) e := new(Events)