summaryrefslogtreecommitdiff
path: root/addDroplet.go
diff options
context:
space:
mode:
Diffstat (limited to 'addDroplet.go')
-rw-r--r--addDroplet.go92
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