Alejandro Mery
1 year ago
12 changed files with 123 additions and 115 deletions
@ -1,2 +1,74 @@
|
||||
// Package cluster contains information about the cluster
|
||||
package cluster |
||||
|
||||
import ( |
||||
"io/fs" |
||||
|
||||
"darvaza.org/resolver" |
||||
"darvaza.org/slog" |
||||
"github.com/gofrs/uuid/v5" |
||||
) |
||||
|
||||
var ( |
||||
_ MachineIterator = (*Cluster)(nil) |
||||
_ ZoneIterator = (*Cluster)(nil) |
||||
) |
||||
|
||||
// revive:disable:line-length-limit
|
||||
|
||||
// Cluster represents all zones in a cluster
|
||||
type Cluster struct { |
||||
dir fs.FS |
||||
log slog.Logger |
||||
resolver resolver.Resolver |
||||
domain string |
||||
|
||||
CephFSID uuid.UUID `json:"ceph_fsid,omitempty" yaml:"ceph_fsid,omitempty"` |
||||
Zones []*Zone |
||||
} |
||||
|
||||
// revive:enable:line-length-limit
|
||||
|
||||
// ForEachMachine calls a function for each Machine in the cluster
|
||||
// until instructed to terminate the loop
|
||||
func (m *Cluster) ForEachMachine(fn func(*Machine) bool) { |
||||
m.ForEachZone(func(z *Zone) bool { |
||||
var term bool |
||||
|
||||
z.ForEachMachine(func(p *Machine) bool { |
||||
term = fn(p) |
||||
return term |
||||
}) |
||||
|
||||
return term |
||||
}) |
||||
} |
||||
|
||||
// ForEachZone calls a function for each Zone in the cluster
|
||||
// until instructed to terminate the loop
|
||||
func (m *Cluster) ForEachZone(fn func(*Zone) bool) { |
||||
for _, p := range m.Zones { |
||||
if fn(p) { |
||||
// terminate
|
||||
return |
||||
} |
||||
} |
||||
} |
||||
|
||||
// GetMachineByName looks for a machine with the specified
|
||||
// name on any zone
|
||||
func (m *Cluster) GetMachineByName(name string) (*Machine, bool) { |
||||
var out *Machine |
||||
|
||||
if name != "" { |
||||
m.ForEachMachine(func(p *Machine) bool { |
||||
if p.Name == name { |
||||
out = p |
||||
} |
||||
|
||||
return out != nil |
||||
}) |
||||
} |
||||
|
||||
return out, out != nil |
||||
} |
||||
|
Loading…
Reference in new issue