|
|
|
@ -1,5 +1,10 @@
|
|
|
|
|
package cluster |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"bytes" |
|
|
|
|
"path/filepath" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
_ MachineIterator = (*Region)(nil) |
|
|
|
|
_ ZoneIterator = (*Region)(nil) |
|
|
|
@ -134,3 +139,61 @@ func (m *Cluster) getRegion(name string) (*Region, bool) {
|
|
|
|
|
|
|
|
|
|
return nil, false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SyncRegions writes to the file system the regions this [Zone]
|
|
|
|
|
// belongs to.
|
|
|
|
|
func (z *Zone) SyncRegions() error { |
|
|
|
|
err := z.syncZoneRegions() |
|
|
|
|
if err == nil { |
|
|
|
|
z.ForEachMachine(func(p *Machine) bool { |
|
|
|
|
if p.IsActive() { |
|
|
|
|
err = p.RemoveFile("region") |
|
|
|
|
} else { |
|
|
|
|
err = p.WriteStringFile("none\n", "region") |
|
|
|
|
} |
|
|
|
|
return err != nil |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (z *Zone) syncZoneRegions() error { |
|
|
|
|
name := filepath.Join(z.Name, "regions") |
|
|
|
|
|
|
|
|
|
if len(z.Regions) > 0 { |
|
|
|
|
var buf bytes.Buffer |
|
|
|
|
|
|
|
|
|
for _, s := range z.Regions { |
|
|
|
|
_, _ = buf.WriteString(s) |
|
|
|
|
_, _ = buf.WriteRune('\n') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return z.zones.WriteStringFile(buf.String(), name) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return z.zones.RemoveFile(name) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SyncRegions writes to the file system the regions covered
|
|
|
|
|
// by this meta-region
|
|
|
|
|
func (r *Region) SyncRegions() error { |
|
|
|
|
name := filepath.Join(r.Name, "regions") |
|
|
|
|
|
|
|
|
|
if len(r.Regions) > 0 { |
|
|
|
|
var buf bytes.Buffer |
|
|
|
|
|
|
|
|
|
for _, s := range r.Regions { |
|
|
|
|
_, _ = buf.WriteString(s) |
|
|
|
|
_, _ = buf.WriteRune('\n') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := r.m.MkdirAll(r.Name); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return r.m.WriteStringFile(buf.String(), name) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return r.m.RemoveFile(name) |
|
|
|
|
} |
|
|
|
|