diff options
Diffstat (limited to 'addDroplet.go')
| -rw-r--r-- | addDroplet.go | 92 |
1 files changed, 49 insertions, 43 deletions
diff --git a/addDroplet.go b/addDroplet.go index 517279c..3e94ec5 100644 --- a/addDroplet.go +++ b/addDroplet.go @@ -31,17 +31,11 @@ func addDomainDroplet(domcfg *libvirtxml.Domain) (*DropletT, error) { me.droplets = append(me.droplets, d) me.changed = true - if updateDroplet(d, domcfg) { - if me.changed { - log.Info("updateDroplet() worked. droplet changed") - } else { - log.Verbose("updateDroplet() worked. nothing changed") - } - } else { + err := updateDroplet(d, domcfg) + if err != nil { log.Info("updateDroplet() failed for", d.pb.Hostname) return d, errors.New("update failed for " + domcfg.Name) } - log.Info("added new droplet", domcfg.Name, domcfg.UUID) dumpNonStandardXML(domcfg) return d, nil @@ -87,19 +81,23 @@ func findDomain(domcfg *libvirtxml.Domain) (*DropletT, error) { return found, nil } -func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) bool { - var ok bool = true +func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) error { + var alle []*pb.Event if d == nil { - return false + return errors.New("d == nil") } if domcfg == nil { - return false + return errors.New("domcfg == nil") } - if !updateMemory(d, domcfg) { + e, err := updateMemory(d, domcfg) + if err != nil { log.Info("updateMemory() failed") - ok = false + return err + } + if e != nil { + alle = append(alle, e) } // update arch & machine @@ -107,12 +105,12 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) bool { // OS Type: &{Arch:x86_64 Machine:pc-i440fx-5.2 Type:hvm} t := domcfg.OS.Type if d.pb.QemuArch != t.Arch { + alle = append(alle, NewChangeEvent(d.pb, "Droplet.QemuArch", d.pb.QemuArch, t.Arch)) d.pb.QemuArch = t.Arch - me.changed = true } if d.pb.QemuMachine != t.Machine { + alle = append(alle, NewChangeEvent(d.pb, "Droplet.QemuMachine", d.pb.QemuMachine, t.Machine)) d.pb.QemuMachine = t.Machine - me.changed = true } } @@ -120,8 +118,8 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) bool { if d.pb.Cpus != int64(domcfg.VCPU.Value) { // fmt.Printf("cpus changed. VCPU = %+v\n", domcfg.VCPU) fmt.Printf("cpus changed. from %d to %d\n", d.pb.Cpus, domcfg.VCPU.Value) + alle = append(alle, NewChangeEvent(d.pb, "Droplet.Cpus", d.pb.Cpus, domcfg.VCPU.Value)) d.pb.Cpus = int64(domcfg.VCPU.Value) - me.changed = true } // update spice port @@ -140,7 +138,7 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) bool { // print out, but ignore the port number d.pb.SpicePort = int64(s.Port) fmt.Printf("Spice Port set to = %d\n", s.Port) - me.changed = true + alle = append(alle, NewChangeEvent(d.pb, "Droplet.SpicePort", d.pb.SpicePort, s.Port)) } } } @@ -149,55 +147,63 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) bool { // check type if domcfg.Type != "kvm" { fmt.Printf("not kvm. Virt type == %s\n", domcfg.Type) - ok = false + return errors.New("not kvm") } if !updateNetwork(d, domcfg) { log.Info("updateNetwork() failed") - ok = false + return errors.New("updateNetwork() failed") } if !updateDisk(d, domcfg) { - log.Info("updateDisk() failed") - ok = false + return errors.New("updateDisk() failed") + } + + if alle == nil { + log.Info("libvirt xml import worked. nothing changed", domcfg.Name) + return nil } - return ok + log.Info("libvirt xml import worked. droplet changed", domcfg.Name) + // log.Info("all change events", alle) + me.changed = true + + // append each change event + for _, e := range alle { + me.events.Events = append(me.events.Events, e) + } + return nil } // returns false if something went wrong -func updateMemory(d *DropletT, domcfg *libvirtxml.Domain) bool { +func updateMemory(d *DropletT, domcfg *libvirtxml.Domain) (*pb.Event, error) { if (d == nil) || (domcfg == nil) { - return false + return nil, errors.New("domcfg == nil") } if domcfg.Memory == nil { - return true + // nothing to do. libvirt xml file didn't define memory size + return nil, nil } - var m int64 = 0 - // check memory - if domcfg.Memory.Unit == "KiB" { + var m int64 = 0 + switch domcfg.Memory.Unit { + case "KiB": m = int64(domcfg.Memory.Value * 1024) - } - - if domcfg.Memory.Unit == "MiB" { + case "MiB": m = int64(domcfg.Memory.Value * 1024 * 1024) - } - - if domcfg.Memory.Unit == "GiB" { + case "GiB": m = int64(domcfg.Memory.Value * 1024 * 1024 * 1024) + default: + fmt.Println("Unknown Memory Unit", domcfg.Memory.Unit) + return nil, errors.New("Unknown Memory Unit " + domcfg.Memory.Unit) } - if e := d.SetMemory(m); e != nil { + e := d.SetMemory(m) + if e != nil { fmt.Printf("Memory changed %s to %d %s\n", pb.HumanFormatBytes(d.pb.Memory), domcfg.Memory.Value, domcfg.Memory.Unit) d.pb.Memory = m - me.changed = true - return true - } else { - // nothing changed - return true + // me.changed = true } - fmt.Println("Unknown Memory Unit", domcfg.Memory.Unit) - return false + return e, nil } // returns false if something went wrong |
