virtigo/configfiles.go

128 lines
2.9 KiB
Go

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
}