compiles and runs. logic wrong
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
3f2cbcb57f
commit
09b635219a
4
Makefile
4
Makefile
|
@ -9,6 +9,10 @@ all:
|
||||||
./virtigo --version
|
./virtigo --version
|
||||||
./virtigo
|
./virtigo
|
||||||
|
|
||||||
|
xml-add:
|
||||||
|
./virtigo --add-xml /home/nfs3/xml/*.xml
|
||||||
|
# ./virtigo --add-xml /etc/libvirt/qemu/*xml
|
||||||
|
|
||||||
start-all-droplets:
|
start-all-droplets:
|
||||||
curl --silent http://localhost:8080/start?start=git.wit.org
|
curl --silent http://localhost:8080/start?start=git.wit.org
|
||||||
curl --silent http://localhost:8080/start?start=go.wit.com
|
curl --silent http://localhost:8080/start?start=go.wit.com
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright 2024 WIT.COM Inc Licensed GPL 3.0
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"libvirt.org/go/libvirtxml"
|
||||||
|
)
|
||||||
|
|
||||||
|
func addDroplet(domcfg *libvirtxml.Domain) (*DropletT, error) {
|
||||||
|
var found *DropletT
|
||||||
|
if domcfg == nil {
|
||||||
|
return nil, errors.New("domcfg == nil")
|
||||||
|
}
|
||||||
|
// fmt.Printf("Virt type %s\n", domcfg.Type)
|
||||||
|
// fmt.Printf("Virt name %s\n", domcfg.Name)
|
||||||
|
// fmt.Printf("Virt UUID %s\n", domcfg.UUID)
|
||||||
|
// fmt.Printf("Virt Memory %d %s\n", domcfg.Memory.Value, domcfg.Memory.Unit)
|
||||||
|
|
||||||
|
for _, d := range me.droplets {
|
||||||
|
if d.pb.Hostname == domcfg.Name {
|
||||||
|
if d.pb.Uuid == domcfg.UUID {
|
||||||
|
fmt.Println("FOUND NAME", domcfg.Name, domcfg.UUID)
|
||||||
|
fmt.Println("CHANGED UUID", d.pb.Uuid, domcfg.UUID)
|
||||||
|
} else {
|
||||||
|
d.pb.Uuid = domcfg.UUID
|
||||||
|
me.changed = true
|
||||||
|
}
|
||||||
|
if found == nil {
|
||||||
|
found = d
|
||||||
|
} else {
|
||||||
|
fmt.Println("FOUND TWICE", d.pb.Uuid, domcfg.Name, domcfg.UUID)
|
||||||
|
return d, errors.New("Found Twice")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if d.pb.Uuid == domcfg.UUID {
|
||||||
|
if d.pb.Hostname == domcfg.Name {
|
||||||
|
fmt.Println("FOUND UUID WITH MATCHING NAME", domcfg.Name, domcfg.UUID)
|
||||||
|
} else {
|
||||||
|
fmt.Println("FOUND UUID WITH MIS-MATCHED NAME", domcfg.Name, domcfg.UUID)
|
||||||
|
return d, errors.New("UUID with mis-matched names")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// test add some ethernet devices
|
||||||
|
macs := getMacs(domcfg)
|
||||||
|
fmt.Printf("Virt mac addr:%s\n", macs)
|
||||||
|
return nil, errors.New("not found")
|
||||||
|
}
|
|
@ -42,13 +42,13 @@ func readConfigFile(filename string) error {
|
||||||
pfile, err := os.ReadFile(fullname)
|
pfile, err := os.ReadFile(fullname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Info("open config file :", err)
|
log.Info("open config file :", err)
|
||||||
return ErrorNoFile
|
return err
|
||||||
}
|
}
|
||||||
err = me.cluster.UnmarshalJSON(pfile)
|
err = me.cluster.UnmarshalJSON(pfile)
|
||||||
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 ErrorParseJSON
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize each hypervisor
|
// initialize each hypervisor
|
||||||
|
|
35
main.go
35
main.go
|
@ -35,17 +35,40 @@ func main() {
|
||||||
log.DaemonMode(true)
|
log.DaemonMode(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set defaults
|
||||||
|
me.unstable = time.Now() // initialize the grid as unstable
|
||||||
|
me.delay = 5 * time.Second // how often to poll the hypervisors
|
||||||
|
me.changed = false
|
||||||
|
|
||||||
cfgfile()
|
cfgfile()
|
||||||
|
|
||||||
|
var ok bool = true
|
||||||
for _, filename := range argv.Xml {
|
for _, filename := range argv.Xml {
|
||||||
log.Info("add xml file", filename)
|
log.Info("add xml file", filename)
|
||||||
|
domcfg, err := readXml(filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Info("error:", filename, err)
|
||||||
|
ok = false
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
d, err := addDroplet(domcfg)
|
||||||
|
if err != nil {
|
||||||
|
ok = false
|
||||||
|
}
|
||||||
|
if d == nil {
|
||||||
|
log.Info("addDroplet() returned nil")
|
||||||
|
ok = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if me.changed {
|
||||||
|
writeConfigFile()
|
||||||
|
writeConfigFileDroplets()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
if !ok {
|
||||||
|
log.Info("adding xml files failed")
|
||||||
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize the grid as unstable
|
|
||||||
me.unstable = time.Now()
|
|
||||||
|
|
||||||
// how often to poll the hypervisors
|
|
||||||
me.delay = 5 * time.Second
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
log.Info("command line hypervisors:", argv.Hosts)
|
log.Info("command line hypervisors:", argv.Hosts)
|
||||||
|
|
|
@ -28,6 +28,7 @@ type virtigoT struct {
|
||||||
delay time.Duration // how often to poll the hypervisors
|
delay time.Duration // how often to poll the hypervisors
|
||||||
killcount int
|
killcount int
|
||||||
unstable time.Time // the last time the cluster was incorrect
|
unstable time.Time // the last time the cluster was incorrect
|
||||||
|
changed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// the stuff that is needed for a hypervisor
|
// the stuff that is needed for a hypervisor
|
||||||
|
|
21
xml.go
21
xml.go
|
@ -71,7 +71,26 @@ func addDefaults(d *libvirtxml.Domain, filename string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DropletT) readXml(filename string) error {
|
func readXml(filename string) (*libvirtxml.Domain, error) {
|
||||||
|
log.Info("parse xml file:", filename)
|
||||||
|
|
||||||
|
pfile, err := os.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("ERROR:", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
domcfg := &libvirtxml.Domain{}
|
||||||
|
|
||||||
|
err = domcfg.Unmarshal(string(pfile))
|
||||||
|
if err != nil {
|
||||||
|
log.Info("Marshal failed on file", filename, err)
|
||||||
|
return nil, ErrorParseXML
|
||||||
|
}
|
||||||
|
return domcfg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DropletT) mergeXml(filename string) error {
|
||||||
log.Info("parse xml file:", filename)
|
log.Info("parse xml file:", filename)
|
||||||
|
|
||||||
pfile, err := os.ReadFile(filename)
|
pfile, err := os.ReadFile(filename)
|
||||||
|
|
Loading…
Reference in New Issue