+28
-16
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user