Compare commits

..

7 Commits

Author SHA1 Message Date
amery 4d78214b82 cluster: add []string writer to Env
Signed-off-by: Alejandro Mery <amery@jpi.io>
2024-03-02 21:35:55 +00:00
amery 8f4ac9f789 cluster: introduce RegionIterator
Signed-off-by: Alejandro Mery <amery@jpi.io>
2024-03-02 21:35:55 +00:00
amery a769bdaaac m/eu/k8s_token [DO-NOT-MERGE]
Signed-off-by: Alejandro Mery <amery@jpi.io>
2024-03-02 21:35:55 +00:00
amery b2e7cb5f91 import m tree [DO-NOT-MERGE]
Signed-off-by: Alejandro Mery <amery@jpi.io>
2024-03-02 21:35:55 +00:00
amery c8c330d93a Merge branch 'pr-amery-k8s_token' into next-amery 2024-03-02 21:35:28 +00:00
amery 111951a86c Merge branch 'pr-amery-wireguard-ini' into next-amery 2024-03-02 21:35:24 +00:00
amery 3efe9c1d20 cluster: remove k8s_token files from zones on write if found
Signed-off-by: Alejandro Mery <amery@jpi.io>
2024-03-02 21:34:37 +00:00
2 changed files with 18 additions and 98 deletions
-42
View File
@@ -4,14 +4,12 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"io" "io"
"sort"
"strings" "strings"
) )
// Env is a shell environment factory for this cluster // Env is a shell environment factory for this cluster
type Env struct { type Env struct {
ZoneIterator ZoneIterator
RegionIterator
cephFSID string cephFSID string
export bool export bool
@@ -26,7 +24,6 @@ func (m *Cluster) Env(export bool) (*Env, error) {
env := &Env{ env := &Env{
ZoneIterator: m, ZoneIterator: m,
RegionIterator: m,
cephFSID: fsid.String(), cephFSID: fsid.String(),
export: export, export: export,
} }
@@ -46,22 +43,6 @@ func (m *Env) Zones() []int {
return zones return zones
} }
// Regions returns the list of primary regions
func (m *Env) Regions() []string {
var regions []string
m.ForEachRegion(func(r *Region) bool {
if r.Cluster != nil {
regions = append(regions, r.Name)
}
return false
})
sort.Strings(regions)
return regions
}
// WriteTo generates environment variables for shell scripts // WriteTo generates environment variables for shell scripts
func (m *Env) WriteTo(w io.Writer) (int64, error) { func (m *Env) WriteTo(w io.Writer) (int64, error) {
var buf bytes.Buffer var buf bytes.Buffer
@@ -70,7 +51,6 @@ func (m *Env) WriteTo(w io.Writer) (int64, error) {
m.writeEnvVar(&buf, m.cephFSID, "FSID") m.writeEnvVar(&buf, m.cephFSID, "FSID")
} }
m.writeEnvVarStrings(&buf, m.Regions(), "REGIONS")
m.writeEnvVarInts(&buf, m.Zones(), "ZONES") m.writeEnvVarInts(&buf, m.Zones(), "ZONES")
m.ForEachZone(func(z *Zone) bool { m.ForEachZone(func(z *Zone) bool {
@@ -94,9 +74,6 @@ func (m *Env) writeEnvZone(w io.Writer, z *Zone) {
gateways, _ := z.GatewayIDs() gateways, _ := z.GatewayIDs()
m.writeEnvVarInts(w, gateways, "ZONE%v_%s", zoneID, "GW") m.writeEnvVarInts(w, gateways, "ZONE%v_%s", zoneID, "GW")
// ZONE{zoneID}_REGION
m.writeEnvVar(w, genEnvZoneRegion(z), "ZONE%v_%s", zoneID, "REGION")
// Ceph // Ceph
monitors := z.GetCephMonitors() monitors := z.GetCephMonitors()
// MON{zoneID}_NAME // MON{zoneID}_NAME
@@ -147,12 +124,8 @@ func (m *Env) writeEnvVar(w io.Writer, value string, name string, args ...any) {
if name != "" { if name != "" {
value = strings.TrimSpace(value) value = strings.TrimSpace(value)
if value == "" {
_, _ = fmt.Fprintf(w, "%s%s=\n", prefix, name)
} else {
_, _ = fmt.Fprintf(w, "%s%s=%q\n", prefix, name, value) _, _ = fmt.Fprintf(w, "%s%s=%q\n", prefix, name, value)
} }
}
} }
func genEnvZoneNodes(z *Zone) string { func genEnvZoneNodes(z *Zone) string {
@@ -169,21 +142,6 @@ func genEnvZoneNodes(z *Zone) string {
return "" return ""
} }
func genEnvZoneRegion(z *Zone) string {
var region string
z.ForEachRegion(func(r *Region) bool {
if r.Cluster != nil {
region = r.Name
return true
}
return false
})
return region
}
func genEnvZoneCephMonNames(m Machines) string { func genEnvZoneCephMonNames(m Machines) string {
var buf strings.Builder var buf strings.Builder
m.ForEachMachine(func(p *Machine) bool { m.ForEachMachine(func(p *Machine) bool {
+7 -45
View File
@@ -8,8 +8,6 @@ import (
var ( var (
_ MachineIterator = (*Region)(nil) _ MachineIterator = (*Region)(nil)
_ ZoneIterator = (*Region)(nil) _ ZoneIterator = (*Region)(nil)
_ RegionIterator = (*Zone)(nil)
_ RegionIterator = (*Cluster)(nil) _ RegionIterator = (*Cluster)(nil)
) )
@@ -153,28 +151,6 @@ func (m *Cluster) appendRegionRegions(name string, subs ...string) {
}) })
} }
// ForEachRegion calls a function on all regions this zone belongs to.
func (z *Zone) ForEachRegion(fn func(*Region) bool) {
if fn == nil {
return
}
z.zones.ForEachRegion(func(r *Region) bool {
var match bool
r.ForEachZone(func(z2 *Zone) bool {
match = (z == z2)
return match
})
if match && fn(r) {
return true
}
return false
})
}
func (z *Zone) appendRegions(regions ...string) error { func (z *Zone) appendRegions(regions ...string) error {
for _, s := range regions { for _, s := range regions {
// TODO: validate // TODO: validate
@@ -198,7 +174,7 @@ func (m *Cluster) finishRegion(r *Region) {
r.m = m r.m = m
sub := []string{} sub := []string{}
for _, name := range r.Regions { for _, name := range r.Regions {
r2, ok := m.getFinishRegion(name) r2, ok := m.getRegion(name)
if !ok { if !ok {
m.warn(nil).WithField("region", name).Print("unknown region") m.warn(nil).WithField("region", name).Print("unknown region")
continue continue
@@ -213,19 +189,12 @@ func (m *Cluster) finishRegion(r *Region) {
func (m *Cluster) getRegion(name string) (*Region, bool) { func (m *Cluster) getRegion(name string) (*Region, bool) {
for i := range m.Regions { for i := range m.Regions {
r := &m.Regions[i] r := &m.Regions[i]
if name == r.Name { if name == r.Name {
return r, true
}
}
return nil, false
}
func (m *Cluster) getFinishRegion(name string) (*Region, bool) {
if r, ok := m.getRegion(name); ok {
m.finishRegion(r) m.finishRegion(r)
return r, true return r, true
} }
}
return nil, false return nil, false
} }
@@ -236,17 +205,6 @@ func (z *Zone) SyncRegions() error {
err := z.syncZoneRegions() err := z.syncZoneRegions()
if err == nil { if err == nil {
z.ForEachMachine(func(p *Machine) bool { z.ForEachMachine(func(p *Machine) bool {
err = z.syncMachineRegions(p)
return err != nil
})
}
return err
}
func (*Zone) syncMachineRegions(p *Machine) error {
var err error
if p.IsActive() { if p.IsActive() {
err = p.RemoveFile("region") err = p.RemoveFile("region")
} else { } else {
@@ -257,6 +215,10 @@ func (*Zone) syncMachineRegions(p *Machine) error {
err = p.RemoveFile(RegionClusterTokenFileName) err = p.RemoveFile(RegionClusterTokenFileName)
} }
return err != nil
})
}
return err return err
} }