diff --git a/pkg/zones/scan.go b/pkg/zones/scan.go index 01b309f..2cfdada 100644 --- a/pkg/zones/scan.go +++ b/pkg/zones/scan.go @@ -31,10 +31,9 @@ func (m *Zones) scan() error { func (m *Zones) scanMachines() error { var err error - m.ForEachMachine(func(p *Machine) { - if err == nil { - err = p.scan() - } + m.ForEachMachine(func(p *Machine) bool { + err = p.scan() + return err != nil }) return err } diff --git a/pkg/zones/zones.go b/pkg/zones/zones.go index 22074d4..ae0a99d 100644 --- a/pkg/zones/zones.go +++ b/pkg/zones/zones.go @@ -32,18 +32,24 @@ type Zones struct { } // ForEachMachine calls a function for each Machine in the cluster -func (m *Zones) ForEachMachine(fn func(*Machine)) { +func (m *Zones) ForEachMachine(fn func(*Machine) bool) { for _, z := range m.Zones { for _, p := range z.Machines { - fn(p) + if fn(p) { + // terminate + return + } } } } // ForEachZone calls a function for each Zone in the cluster -func (m *Zones) ForEachZone(fn func(*Zone)) { +func (m *Zones) ForEachZone(fn func(*Zone) bool) { for _, p := range m.Zones { - fn(p) + if fn(p) { + // terminate + return + } } }