checking for duplicate filenames works
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
030af1bcfb
commit
b35c04414a
2
Makefile
2
Makefile
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
1
main.go
1
main.go
|
@ -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 {
|
||||||
|
|
44
validate.go
44
validate.go
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue