From f7da9519fa4cfc0a234761da1a8d6bdc7fc94f59 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Tue, 22 Aug 2023 20:11:41 +0000 Subject: [PATCH] zones: allow iterators to terminate Signed-off-by: Alejandro Mery --- pkg/zones/scan.go | 7 +++---- pkg/zones/zones.go | 14 ++++++++++---- 2 files changed, 13 insertions(+), 8 deletions(-) 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 + } } }