Browse Source

zones: assign zoneID to zones inferable ID

Signed-off-by: Alejandro Mery <amery@jpi.io>
pull/1/head
Alejandro Mery 1 year ago
parent
commit
9aef92f32d
  1. 46
      pkg/zones/scan.go

46
pkg/zones/scan.go

@ -5,6 +5,20 @@ import (
)
func (m *Zones) scan() error {
for _, fn := range []func() error{
m.scanDirectory,
m.scanMachines,
m.scanZoneIDs,
} {
if err := fn(); err != nil {
return err
}
}
return nil
}
func (m *Zones) scanDirectory() error {
// each directory is a zone
entries, err := fs.ReadDir(m.dir, ".")
if err != nil {
@ -26,7 +40,7 @@ func (m *Zones) scan() error {
}
}
return m.scanMachines()
return nil
}
func (m *Zones) scanMachines() error {
@ -38,6 +52,36 @@ func (m *Zones) scanMachines() error {
return err
}
func (m *Zones) scanZoneIDs() error {
var hasMissing bool
var lastZoneID int
m.ForEachZone(func(z *Zone) bool {
switch {
case z.ID == 0:
hasMissing = true
case z.ID > lastZoneID:
lastZoneID = z.ID
}
return false
})
if hasMissing {
next := lastZoneID + 1
m.ForEachZone(func(z *Zone) bool {
if z.ID == 0 {
z.ID, next = next, next+1
}
return false
})
}
return nil
}
func (z *Zone) scan() error {
// each directory is a machine
entries, err := fs.ReadDir(z.zones.dir, z.Name)

Loading…
Cancel
Save