Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
2023-08-24 17:03:31 +00:00
parent 568fd71d89
commit 114372b4c6
5 changed files with 170 additions and 16 deletions
+28 -16
View File
@@ -10,18 +10,21 @@ import (
// WriteEnv generates environment variables for shell scripts
func (m *Zones) WriteEnv(w io.Writer) error {
var buf bytes.Buffer
var err error
m.writeEnvVarFn(&buf, genEnvZones, "ZONES")
m.ForEachZone(func(z *Zone) bool {
m.writeEnvZone(&buf, z)
return false
err = m.writeEnvZone(&buf, z)
return err != nil
})
_, err := buf.WriteTo(w)
if err == nil {
_, err = buf.WriteTo(w)
}
return err
}
func (m *Zones) writeEnvZone(w io.Writer, z *Zone) {
func (m *Zones) writeEnvZone(w io.Writer, z *Zone) error {
zoneID := z.ID
// ZONE{zoneID}
@@ -31,12 +34,17 @@ func (m *Zones) writeEnvZone(w io.Writer, z *Zone) {
m.writeEnvVar(w, z.Name, "ZONE%v_%s", zoneID, "NAME")
// ZONE{zoneID}_GW
gatewayID := getRingZeroGatewayID(z)
gatewayID, err := getRingZeroGatewayID(z)
if err != nil {
return err
}
m.writeEnvVar(w, fmt.Sprintf("%v", gatewayID), "ZONE%v_%s", zoneID, "GW")
// ZONE{zoneID}_IP
ip, _ := RingZeroAddress(zoneID, gatewayID)
m.writeEnvVar(w, ip.String(), "ZONE%v_%s", zoneID, "IP")
if ip, ok := RingZeroAddress(zoneID, gatewayID); ok {
m.writeEnvVar(w, ip.String(), "ZONE%v_%s", zoneID, "IP")
}
return nil
}
func (m *Zones) writeEnvVarFn(w io.Writer, fn func(*Zones) string, name string, args ...any) {
@@ -78,12 +86,13 @@ func genEnvZoneNodes(z *Zone) string {
return strings.Join(s, " ")
}
func getRingZeroGatewayID(z *Zone) int {
var firstNodeID, gatewayID int
func getRingZeroGatewayID(z *Zone) (int, error) {
var gatewayID int
var first *Machine
z.ForEachMachine(func(p *Machine) bool {
if firstNodeID == 0 {
firstNodeID = p.ID
if first == nil {
first = p
}
if p.IsGateway() {
@@ -93,10 +102,13 @@ func getRingZeroGatewayID(z *Zone) int {
return gatewayID != 0
})
switch {
case gatewayID == 0:
return firstNodeID
default:
return gatewayID
if gatewayID == 0 {
gatewayID = first.ID
if err := first.SetGateway(true); err != nil {
return gatewayID, err
}
}
return gatewayID, nil
}