package main import ( "fmt" "os" "path/filepath" "strings" "time" pb "go.wit.com/lib/protobuf/virtbuf" "go.wit.com/log" ) func readConfigFile() { me.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 = me.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 := me.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.pb = me.cluster.AddDroplet(name, 16, 256) if len(fields) > 1 && fields[1] != "ON" { d.pb.StartState = "OFF" } else { d.pb.StartState = "ON" } if len(fields) >= 3 { d.pb.PreferredHypervisor = fields[2] } me.droplets = append(me.droplets, d) log.Log(EVENT, "config new droplet", d.pb.Hostname, d.pb.StartState, d.pb.PreferredHypervisor) } 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.pb.Active = false } else { h.pb.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.Delay = 5 * time.Second h.lastpoll = time.Now() h.Scan = func() { h.pollHypervisor() } h.pb = me.cluster.AddHypervisor(name, 16, 256) h.pb.Autoscan = true me.hypers = append(me.hypers, h) return h }