pretty good XML handling at this point

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-10-25 16:08:55 -05:00
parent cf79357bba
commit 15f48a01ab
3 changed files with 27 additions and 71 deletions

View File

@ -20,24 +20,23 @@ func addDomainDroplet(domcfg *libvirtxml.Domain) (*DropletT, error) {
} }
d, _ := findDomain(domcfg) d, _ := findDomain(domcfg)
if d != nil { if d == nil {
return d, errors.New(d.pb.Hostname + " droplet exists. need to update instead") // this is a new unknown droplet (not in the config file)
d = new(DropletT)
d.pb = me.cluster.AddDroplet(domcfg.UUID, domcfg.Name, 2, 2*1024*1024)
d.pb.StartState = pb.DropletState_OFF
d.CurrentState = pb.DropletState_UNKNOWN
// if the domcfg doesn't have a uuid, make a new one here
if d.pb.Uuid == "" {
u := uuid.New()
d.pb.Uuid = u.String()
}
me.droplets = append(me.droplets, d)
me.changed = true
} }
// this is a new unknown droplet (not in the config file)
d = new(DropletT)
d.pb = me.cluster.AddDroplet(domcfg.UUID, domcfg.Name, 2, 2*1024*1024)
d.pb.StartState = pb.DropletState_OFF
d.CurrentState = pb.DropletState_UNKNOWN
// if the domcfg doesn't have a uuid, make a new one here
if d.pb.Uuid == "" {
u := uuid.New()
d.pb.Uuid = u.String()
}
me.droplets = append(me.droplets, d)
me.changed = true
err := updateDroplet(d, domcfg) err := updateDroplet(d, domcfg)
if err != nil { if err != nil {

View File

@ -331,10 +331,9 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) (string, error) {
domcfg.CPU = nil domcfg.CPU = nil
case "custom": case "custom":
updatedXML, _ := xml.MarshalIndent(domcfg.CPU, "", " ") updatedXML, _ := xml.MarshalIndent(domcfg.CPU, "", " ")
log.Info("Ignore custom CPU Start") log.Info("Ignoring custom CPU Start")
fmt.Println(string(updatedXML)) fmt.Println(string(updatedXML))
log.Info("Ignore custom CPU End") log.Info("Ignoring custom CPU End (--xml-ignore-cpu=true)")
log.Info("Add --xml-ignore-cpu to ignore this")
if argv.IgnoreCpu { if argv.IgnoreCpu {
domcfg.CPU = nil domcfg.CPU = nil
} }

60
main.go
View File

@ -52,84 +52,42 @@ func main() {
// sanity check the droplets // sanity check the droplets
checkDroplets(false) checkDroplets(false)
// ok tracks if all the libvirt xml files imported ok
var ok bool = true
for _, filename := range argv.Xml { for _, filename := range argv.Xml {
domcfg, err := readXml(filename) domcfg, err := readXml(filename)
if err != nil { if err != nil {
// parsing the libvirt xml file failed // parsing the libvirt xml file failed
log.Info("error:", filename, err) log.Info("error:", filename, err)
ok = false
log.Info("readXml() error", filename) log.Info("readXml() error", filename)
log.Info("readXml() error", err) log.Info("readXml() error", err)
log.Info("libvirt XML will have to be fixed by hand") log.Info("libvirt XML will have to be fixed by hand")
os.Exit(-1) os.Exit(-1)
continue
} }
// see if the libvirt xml droplet is already here // this is a new droplet. add it to the cluster
d, err := findDomain(domcfg) log.Info("Add XML Droplet here", domcfg.Name)
_, err = addDomainDroplet(domcfg)
if err != nil { if err != nil {
// some error. probably UUID mismatch or hostname duplication log.Info("addDomainDroplet() error", filename)
// this has to be fixed by hand log.Info("addDomainDroplet() error", err)
ok = false
log.Info("findDomain() error", filename)
log.Info("findDomain() error", err)
log.Info("libvirt XML will have to be fixed by hand") log.Info("libvirt XML will have to be fixed by hand")
os.Exit(-1) os.Exit(-1)
continue
}
if d == nil {
// this is a new droplet. add it to the cluster
log.Info("Add New Droplet here", domcfg.Name)
_, err := addDomainDroplet(domcfg)
if err != nil {
ok = false
log.Info("addDomainDroplet() error", filename)
log.Info("addDomainDroplet() error", err)
log.Info("libvirt XML will have to be fixed by hand")
os.Exit(-1)
}
} else {
// this droplet is already here
err := updateDroplet(d, domcfg)
if err != nil {
log.Info("updateDroplet() error", filename)
log.Info("updateDroplet() error", d.pb.Hostname, err)
log.Info("libvirt XML will have to be fixed by hand")
ok = false
os.Exit(-1)
}
} }
} }
if len(argv.Xml) != 0 { if len(argv.Xml) != 0 {
if !ok {
log.Info("importing xml files had errors")
os.Exit(-1)
}
if me.changed { if me.changed {
if argv.Save { if argv.Save {
writeConfigFile() writeConfigFile()
writeConfigFileDroplets() writeConfigFileDroplets()
log.Info("XML changes saved in protobuf config")
os.Exit(0)
} else { } else {
log.Info("Not saving changes (use --save to save)") log.Info("Not saving changes (use --save to save)")
os.Exit(0)
} }
} }
log.Info("No XML changes found")
os.Exit(0) os.Exit(0)
} }
/*
log.Info("command line hypervisors:", argv.Hosts)
for _, name := range argv.Hosts {
h := findHypervisor(name)
if h != nil {
log.Info("command line hypervisor", name, "already in config file")
continue
}
h = addHypervisor(name)
h.pb.Active = true
}
*/
// start the watchdog polling for each hypervisor // start the watchdog polling for each hypervisor
for _, h := range me.hypers { for _, h := range me.hypers {
log.Info("starting polling on", h.pb.Hostname) log.Info("starting polling on", h.pb.Hostname)