package main import ( "fmt" "os" "path/filepath" "strings" "time" pb "go.wit.com/lib/protobuf/virtbuf" "go.wit.com/log" ) var cluster *pb.Cluster func readConfigFile() { cluster = new(pb.Cluster) homeDir, _ := os.UserHomeDir() fullname := filepath.Join(homeDir, ".config/virtigo.json") pfile, err := os.ReadFile(fullname) if err != nil { log.Info("open config file :", err) return } err = cluster.UnmarshalJSON(pfile) if err != nil { log.Info("create json failed", err) return } } func writeConfigFile() { homeDir, _ := os.UserHomeDir() fullname := filepath.Join(homeDir, ".config/virtigo.json") cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, 0666) if err != nil { log.Info("open config file :", err) return } json := cluster.FormatJSON() fmt.Fprintln(cfgfile, json) } func readDropletFile(filename string) { // fmt.Fprintln(w, "GOT TEST?") homeDir, _ := os.UserHomeDir() fullname := filepath.Join(homeDir, ".config/virtigo/", filename) pfile, err := os.ReadFile(fullname) if err != nil { log.Info("No config file :", err) // w.Write(pfile) return } f := string(pfile) for _, line := range strings.Split(f, "\n") { fields := strings.Fields(line) if len(fields) < 1 { continue } name := fields[0] d := findDroplet(name) if d == nil { // this is a new unknown droplet (not in the config file) d = new(DropletT) d.Hostname = name if len(fields) > 1 && fields[1] != "ON" { d.ConfigState = "OFF" } else { d.ConfigState = "ON" } if len(fields) >= 3 { d.hyperPreferred = fields[2] } me.droplets = append(me.droplets, d) log.Log(EVENT, "config new droplet", d.Hostname, d.ConfigState, d.hyperPreferred) cluster.AddDroplet(d.Hostname, 16, 256) } else { log.Info("not sure what to do here. duplicate droplet", name, "in config file") } } } func readHypervisorFile(filename string) { // fmt.Fprintln(w, "GOT TEST?") homeDir, _ := os.UserHomeDir() fullname := filepath.Join(homeDir, ".config/virtigo/", filename) pfile, err := os.ReadFile(fullname) if err != nil { log.Info("No config file :", err) // w.Write(pfile) return } f := string(pfile) for _, line := range strings.Split(f, "\n") { fields := strings.Fields(line) if len(fields) < 1 { continue } name := fields[0] h := addHypervisor(name) if len(fields) < 2 || fields[1] != "active" { h.Active = false } else { h.Active = true } } } func addHypervisor(name string) *HyperT { var h *HyperT h = findHypervisor(name) if h != nil { log.Info("not sure what to do here. duplicate hypervisor", name, "in config file") return h } log.Log(EVENT, "config new hypervisor", name) h = new(HyperT) h.Hostname = name h.Autoscan = true h.Delay = 5 * time.Second h.lastpoll = time.Now() h.Scan = func() { h.pollHypervisor() } me.hypers = append(me.hypers, h) cluster.AddHypervisor(name, 16, 256) return h }