checking for duplicate filenames works

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-10-25 20:05:04 -05:00
parent 030af1bcfb
commit b35c04414a
4 changed files with 88 additions and 28 deletions

View File

@ -10,7 +10,7 @@ all:
./virtigo --help ./virtigo --help
xml-add: xml-add:
./virtigo --libvirt ~/libvirt/*.xml --xml-ignore-disk ./virtigo --libvirt ~/libvirt/*.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

View File

@ -166,7 +166,7 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) ([]*pb.Event, error)
nete, err := updateNetwork(d, domcfg) nete, err := updateNetwork(d, domcfg)
if err != nil { if err != nil {
log.Info("updateNetwork() failed", err) log.Info("updateNetwork() failed", err)
return alle, errors.New("updateNetwork() failed") return alle, err
} }
for _, e := range nete { for _, e := range nete {
@ -176,8 +176,14 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) ([]*pb.Event, error)
log.Info("TODO: fix updateDisk() change events") log.Info("TODO: fix updateDisk() change events")
log.Info("TODO: fix updateDisk() change events") log.Info("TODO: fix updateDisk() change events")
log.Info("TODO: fix updateDisk() change events") log.Info("TODO: fix updateDisk() change events")
if !updateDisk(d, domcfg) { nete, err = updateDisk(d, domcfg)
return alle, errors.New("updateDisk() failed") if err != nil {
log.Info("updateDisk() failed", err)
return alle, err
}
for _, e := range nete {
alle = append(alle, e)
} }
if alle == nil { if alle == nil {
@ -185,8 +191,6 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) ([]*pb.Event, error)
return alle, nil return alle, nil
} }
log.Info("libvirt xml import worked. droplet changed", domcfg.Name) log.Info("libvirt xml import worked. droplet changed", domcfg.Name)
// log.Info("all change events", alle)
me.changed = true
// append each change event // append each change event
for _, e := range alle { for _, e := range alle {
@ -349,9 +353,11 @@ func updateNetwork(d *DropletT, domcfg *libvirtxml.Domain) ([]*pb.Event, error)
*/ */
// returns false if something went wrong // returns false if something went wrong
func updateDisk(d *DropletT, domcfg *libvirtxml.Domain) bool { func updateDisk(d *DropletT, domcfg *libvirtxml.Domain) ([]*pb.Event, error) {
var alle []*pb.Event
if (d == nil) || (domcfg == nil) { if (d == nil) || (domcfg == nil) {
return false return nil, errors.New("domcfg == nil")
} }
for _, disk := range domcfg.Devices.Disks { for _, disk := range domcfg.Devices.Disks {
var t *libvirtxml.DomainDiskSourceFile var t *libvirtxml.DomainDiskSourceFile
@ -366,6 +372,16 @@ func updateDisk(d *DropletT, domcfg *libvirtxml.Domain) bool {
continue continue
} }
e, err := insertFilename(d.pb, filename)
if err != nil {
return alle, err
}
if e == nil {
continue
}
alle = append(alle, e)
/*
var found bool = false var found bool = false
for _, disk := range d.pb.Disks { for _, disk := range d.pb.Disks {
if disk.Filename == filename { if disk.Filename == filename {
@ -381,6 +397,7 @@ func updateDisk(d *DropletT, domcfg *libvirtxml.Domain) bool {
log.Info("New filename", filename) log.Info("New filename", filename)
me.changed = true me.changed = true
} }
*/
} }
return true return alle, nil
} }

View File

@ -63,7 +63,6 @@ func main() {
} }
checkUniqueFilenames() checkUniqueFilenames()
for _, filename := range argv.Xml { for _, filename := range argv.Xml {
domcfg, err := readXml(filename) domcfg, err := readXml(filename)
if err != nil { if err != nil {

View File

@ -14,6 +14,7 @@ package main
*/ */
import ( import (
"errors"
"os" "os"
"path/filepath" "path/filepath"
@ -50,6 +51,49 @@ func addClusterFilepath(dir string) {
} }
} }
// returns the droplet using a filename
func lookupFilename(filename string) *pb.Droplet {
filebase := filepath.Base(filename)
for _, d := range me.cluster.Droplets {
for _, disk := range d.Disks {
if filebase == disk.Filename {
return d
}
}
}
return nil
}
func insertFilename(d *pb.Droplet, filename string) (*pb.Event, error) {
dupd := lookupFilename(filename)
if dupd != nil {
log.Info("file", filename, "already on droplet", dupd.Hostname)
log.Info("file", filename, "on new droplet", d.Hostname)
log.Info("duplicate disk names (--xml-ignore-disk to ignore)")
return nil, errors.New("duplicate disk names")
}
filebase := filepath.Base(filename)
dir := filepath.Dir(filename)
for _, disk := range d.Disks {
if disk.Filename == filebase {
log.Info("already have disk", filename)
return nil, nil
}
}
// make a new Add Event
e := NewChangeEvent(d, "Add Disk", "", filename)
// add the disk protobuf entry
var disk *pb.Disk
disk = new(pb.Disk)
disk.Filename = filebase
disk.Filepath = dir
d.Disks = append(d.Disks, disk)
log.Info("New filename", filebase, dir)
return e, nil
}
func checkUniqueFilenames() bool { func checkUniqueFilenames() bool {
var ok bool = true var ok bool = true
var disks map[string]string var disks map[string]string