diff options
| author | Jeff Carr <[email protected]> | 2024-10-27 04:53:39 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-10-27 04:53:39 -0500 |
| commit | 212b582060107d8e64ca9dbe8e194cc922e460fa (patch) | |
| tree | 00948d77892ca8ec5aa65a4754d0f9b0fda3853b /validate.go | |
| parent | d948581300ecea1b5407662be9e812ddf237e6cf (diff) | |
sets unique spice port and saves config filesv0.2
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'validate.go')
| -rw-r--r-- | validate.go | 119 |
1 files changed, 86 insertions, 33 deletions
diff --git a/validate.go b/validate.go index 16d78ac..505b022 100644 --- a/validate.go +++ b/validate.go @@ -177,46 +177,99 @@ func ValidateDroplets(cluster *pb.Cluster) (map[string]string, map[string]string return umap, macs, nil } -/* -func safeValidateDroplets(cluster *pb.Cluster) (map[string]string, map[string]string) { - // uuid map to check for duplicates - var umap map[string]string - umap = make(map[string]string) - - // mac address map to check for duplicates - var macs map[string]string - macs = make(map[string]string) - - for _, d := range cluster.Droplets { - // Generate a new UUID - if d.Uuid == "" { - u := uuid.New() - d.Uuid = u.String() +// checks a droplet right before a start event +// verify ethernet mac address +// verify uuid (but probably can ignore this since it's not used) +// check qemu domain id +// check spice and vnc ports +// check filenames +func ValidateDroplet(check *pb.Droplet) error { + // check for duplicate uuid's + for _, d := range me.cluster.Droplets { + if check == d { + continue } - - // seconds, ok := timeZone[tz]; ok { - if _, ok := umap[d.Uuid]; ok { + if d.Uuid == check.Uuid { // UUID already exists - log.Info("duplicate UUID", d.Uuid, umap[d.Uuid]) log.Info("duplicate UUID", d.Uuid, d.Hostname) - // os.Exit(-1) + log.Info("duplicate UUID", d.Uuid, check.Hostname) + return errors.New("duplicate UUID: " + d.Uuid) } - umap[d.Uuid] = d.Hostname + } - for _, n := range d.Networks { - // log.Println("network:", n.Mac, d.Uuid, d.Hostname) - if _, ok := macs[n.Mac]; ok { - // UUID already exists - log.Info("duplicate MAC", n.Mac, macs[n.Mac], umap[macs[n.Mac]]) - log.Info("duplicate MAC", n.Mac, d.Hostname) - // os.Exit(-1) + // check for duplicate mac addresses + for _, checkn := range check.Networks { + for _, d := range me.cluster.Droplets { + if check == d { + continue + } + for _, n := range d.Networks { + if checkn.Mac == n.Mac { + // MAC already exists + log.Info("duplicate MAC", n.Mac, d.Hostname) + log.Info("duplicate MAC", n.Mac, check.Hostname) + return errors.New("duplicate MAC: " + n.Mac) + } } - macs[n.Mac] = d.Uuid } } - log.Println("validated okay: no duplicate MAC addr") - log.Println("validated okay: no duplicate UUID") - return umap, macs + if err := setUniqueSpicePort(check); err != nil { + return err + } + return nil +} + +func setUniqueSpicePort(check *pb.Droplet) error { + var ports map[int64]*pb.Droplet + ports = make(map[int64]*pb.Droplet) + + // check spice ports + // checkn.SpicePort = getUniqueSpicePort() + for _, d := range me.cluster.Droplets { + if d.SpicePort == 0 { + continue + } + if _, ok := ports[d.SpicePort]; ok { + log.Info("duplicate ports", d.SpicePort) + return errors.New("duplicate ports") + } + ports[d.SpicePort] = d + } + + for p, d := range ports { + log.Info("found spice port", p, "on", d.Hostname) + } + + var start int64 + start = 6000 + for { + if _, ok := ports[start]; ok { + d := ports[start] + log.Info("already using port", start, "on", d.Hostname) + if d == check { + log.Info("this is good because it's me!", check.Hostname, d.Hostname) + return nil + } + start += 1 + continue + } + // generate change port event + log.Info("going to try port", start, "on", check.Hostname) + e := check.NewChangeEvent("SpicePort", check.SpicePort, start) + me.cluster.Events = append(me.cluster.Events, e) + + // set port to start + check.SpicePort = start + + // write out config file + if err := me.cluster.ConfigSave(); err != nil { + log.Info("config save error inside here is bad", err) + return err + } + + return nil + } + // for loop never gets here + return nil } -*/ |
