Compare commits

...

3 Commits

Author SHA1 Message Date
amery 979324f151 zones: adds ForEachZone iterator
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-22 00:38:41 +00:00
amery be9da490ff zones: adds ForEachMachine() iterator
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-22 00:38:38 +00:00
amery 3599812072 zones: introduce Machine.ReadFile()
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-22 00:38:38 +00:00
2 changed files with 41 additions and 0 deletions
+25
View File
@@ -1,7 +1,10 @@
package zones
import (
"fmt"
"io/fs"
"net/netip"
"path/filepath"
"strconv"
"strings"
"sync"
@@ -56,3 +59,25 @@ func (m *Machine) FullName() string {
return m.Name
}
// ReadFile reads a file from the machine's config directory
func (m *Machine) ReadFile(name string, args ...any) ([]byte, error) {
base := m.zone.zones.dir
fullName := m.getFilename(name, args...)
return fs.ReadFile(base, fullName)
}
func (m *Machine) getFilename(name string, args ...any) string {
if len(args) > 0 {
name = fmt.Sprintf(name, args...)
}
s := []string{
m.zone.Name,
m.Name,
name,
}
return filepath.Join(s...)
}
+16
View File
@@ -31,6 +31,22 @@ type Zones struct {
Zones []*Zone `toml:"zones"`
}
// ForEachMachine calls a function for each Machine in the cluster
func (m *Zones) ForEachMachine(fn func(*Machine)) {
for _, z := range m.Zones {
for _, p := range z.Machines {
fn(p)
}
}
}
// ForEachZone calls a function for each Zone in the cluster
func (m *Zones) ForEachZone(fn func(*Zone)) {
for _, p := range m.Zones {
fn(p)
}
}
// NewFS builds a [Zones] tree using the given directory
func NewFS(dir fs.FS, domain string) (*Zones, error) {
z := &Zones{