virtigo/configfiles.go

132 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"
)
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
}