things to add xml files

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-10-23 01:31:17 -05:00
parent ca98c0e3c0
commit 3f2cbcb57f
5 changed files with 34 additions and 9 deletions

View File

@ -16,6 +16,7 @@ type args struct {
Hosts []string `arg:"--hosts" help:"hosts to connect to"` Hosts []string `arg:"--hosts" help:"hosts to connect to"`
Uptime bool `arg:"--uptime" default:"true" help:"allow uptime checks for things like Kuma"` Uptime bool `arg:"--uptime" default:"true" help:"allow uptime checks for things like Kuma"`
Daemon bool `arg:"--daemon" help:"run in daemon mode"` Daemon bool `arg:"--daemon" help:"run in daemon mode"`
Xml []string `arg:"--add-xml" help:"add libvirt xml files"`
} }
func (a args) Description() string { func (a args) Description() string {

View File

@ -12,16 +12,17 @@ import (
) )
var ErrorNoFile error = errors.New("missing file") var ErrorNoFile error = errors.New("missing file")
var ErrorParse error = errors.New("invalid json") var ErrorParseJSON error = errors.New("invalid json")
var ErrorParseXML error = errors.New("invalid xml")
// something is wrong somewhere and sometimes the // something is wrong somewhere and sometimes the
// protobuf json files get written out with garbage // protobuf json files get written out with garbage
func cfgfile() { func cfgfile() {
err := readConfigFile("virtigo.json") err := readConfigFile("virtigo.json")
if err == nil { if err == nil {
return return
} }
if err == ErrorParse { if err == ErrorParseJSON {
os.Exit(-1) os.Exit(-1)
} }
err = readConfigFile("virtigo.json.last") err = readConfigFile("virtigo.json.last")
@ -47,7 +48,7 @@ func readConfigFile(filename string) error {
if err != nil { if err != nil {
log.Info("read json failed", err) log.Info("read json failed", err)
os.Exit(-1) os.Exit(-1)
return ErrorParse return ErrorParseJSON
} }
// initialize each hypervisor // initialize each hypervisor

View File

@ -37,6 +37,10 @@ func main() {
cfgfile() cfgfile()
for _, filename := range argv.Xml {
log.Info("add xml file", filename)
}
// initialize the grid as unstable // initialize the grid as unstable
me.unstable = time.Now() me.unstable = time.Now()

View File

@ -4,6 +4,7 @@ import (
"time" "time"
pb "go.wit.com/lib/protobuf/virtbuf" pb "go.wit.com/lib/protobuf/virtbuf"
"libvirt.org/go/libvirtxml"
) )
var me virtigoT var me virtigoT
@ -39,9 +40,10 @@ type HyperT struct {
// the stuff that is needed for a hypervisor // the stuff that is needed for a hypervisor
type DropletT struct { type DropletT struct {
pb *pb.Droplet // the Droplet protobuf pb *pb.Droplet // the Droplet protobuf
CurrentState string // what the state of the droplet is ACTUALLY IS xml *libvirtxml.Domain // a xml representation from libvirt
h *HyperT // the hypervisor it's currently running on h *HyperT // the hypervisor it's currently running on
lastpoll time.Time // the last time the droplet was seen running CurrentState string // what the state of the droplet is ACTUALLY IS
starts int // how many times a start event has been attempted lastpoll time.Time // the last time the droplet was seen running
starts int // how many times a start event has been attempted
} }

17
xml.go
View File

@ -71,6 +71,23 @@ func addDefaults(d *libvirtxml.Domain, filename string) {
} }
} }
func (d *DropletT) readXml(filename string) error {
log.Info("parse xml file:", filename)
pfile, err := os.ReadFile(filename)
if err != nil {
log.Println("ERROR:", err)
return ErrorNoFile
}
err = d.xml.Unmarshal(string(pfile))
if err != nil {
log.Info("Marshal failed on file", filename)
return ErrorParseXML
}
return nil
}
func setSimpleDisk(domcfg *libvirtxml.Domain, filename string) { func setSimpleDisk(domcfg *libvirtxml.Domain, filename string) {
// Clear out the existing disks (if any) // Clear out the existing disks (if any)
domcfg.Devices.Disks = nil domcfg.Devices.Disks = nil