cluster: migrate to using pkg/rings for Addresses [WIP]
Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
@@ -13,11 +13,13 @@ import (
|
||||
)
|
||||
|
||||
// GetWireguardKeys reads a wgN.key/wgN.pub files
|
||||
func (m *Machine) GetWireguardKeys(ring int) (wireguard.KeyPair, error) {
|
||||
func (m *Machine) GetWireguardKeys(ringID rings.RingID) (wireguard.KeyPair, error) {
|
||||
var (
|
||||
data []byte
|
||||
err error
|
||||
out wireguard.KeyPair
|
||||
|
||||
ring = int(ringID - 1)
|
||||
)
|
||||
|
||||
data, err = m.ReadFile("wg%v.key", ring)
|
||||
@@ -54,8 +56,8 @@ func (m *Machine) GetWireguardKeys(ring int) (wireguard.KeyPair, error) {
|
||||
return out, err
|
||||
}
|
||||
|
||||
func (m *Machine) tryReadWireguardKeys(ring int) error {
|
||||
kp, err := m.GetWireguardKeys(ring)
|
||||
func (m *Machine) tryReadWireguardKeys(ringID rings.RingID) error {
|
||||
kp, err := m.GetWireguardKeys(ringID)
|
||||
switch {
|
||||
case os.IsNotExist(err):
|
||||
// ignore
|
||||
@@ -66,19 +68,21 @@ func (m *Machine) tryReadWireguardKeys(ring int) error {
|
||||
default:
|
||||
// import keys
|
||||
ri := &RingInfo{
|
||||
Ring: ring,
|
||||
Ring: ringID,
|
||||
Keys: kp,
|
||||
}
|
||||
|
||||
return m.applyRingInfo(ring, ri)
|
||||
return m.applyRingInfo(ringID, ri)
|
||||
}
|
||||
}
|
||||
|
||||
// RemoveWireguardKeys deletes wgN.key and wgN.pub from
|
||||
// the machine's config directory
|
||||
func (m *Machine) RemoveWireguardKeys(ring int) error {
|
||||
func (m *Machine) RemoveWireguardKeys(ringID rings.RingID) error {
|
||||
var err error
|
||||
|
||||
ring := int(ringID - 1)
|
||||
|
||||
err = m.RemoveFile("wg%v.pub", ring)
|
||||
switch {
|
||||
case os.IsNotExist(err):
|
||||
@@ -97,7 +101,9 @@ func (m *Machine) RemoveWireguardKeys(ring int) error {
|
||||
}
|
||||
|
||||
// GetWireguardConfig reads a wgN.conf file
|
||||
func (m *Machine) GetWireguardConfig(ring int) (*wireguard.Config, error) {
|
||||
func (m *Machine) GetWireguardConfig(ringID rings.RingID) (*wireguard.Config, error) {
|
||||
ring := int(ringID - 1)
|
||||
|
||||
data, err := m.ReadFile("wg%v.conf", ring)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -107,27 +113,27 @@ func (m *Machine) GetWireguardConfig(ring int) (*wireguard.Config, error) {
|
||||
return wireguard.NewConfigFromReader(r)
|
||||
}
|
||||
|
||||
func (m *Machine) tryApplyWireguardConfig(ring int) error {
|
||||
wg, err := m.GetWireguardConfig(ring)
|
||||
func (m *Machine) tryApplyWireguardConfig(ringID rings.RingID) error {
|
||||
wg, err := m.GetWireguardConfig(ringID)
|
||||
switch {
|
||||
case os.IsNotExist(err):
|
||||
return nil
|
||||
case err != nil:
|
||||
return err
|
||||
default:
|
||||
return m.applyWireguardConfig(ring, wg)
|
||||
return m.applyWireguardConfig(ringID, wg)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Machine) applyWireguardConfigNode(ring int, wg *wireguard.Config) error {
|
||||
func (m *Machine) applyWireguardConfigNode(ring rings.RingID, wg *wireguard.Config) error {
|
||||
addr := wg.GetAddress()
|
||||
if !core.IsZero(addr) {
|
||||
zoneID, nodeID, ok := Rings[ring].Decode(addr)
|
||||
regionID, zoneID, nodeID, ok := Rings[ring].Decode(addr)
|
||||
if !ok {
|
||||
return fmt.Errorf("%s: invalid address", addr)
|
||||
}
|
||||
|
||||
if err := m.applyZoneNodeID(zoneID, nodeID); err != nil {
|
||||
if err := m.applyZoneNodeID(regionID, zoneID, nodeID); err != nil {
|
||||
return core.Wrap(err, "%s: invalid address", addr)
|
||||
}
|
||||
}
|
||||
@@ -139,7 +145,7 @@ func (m *Machine) applyWireguardConfigNode(ring int, wg *wireguard.Config) error
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Machine) applyWireguardConfig(ring int, wg *wireguard.Config) error {
|
||||
func (m *Machine) applyWireguardConfig(ring rings.RingID, wg *wireguard.Config) error {
|
||||
if err := m.applyWireguardConfigNode(ring, wg); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -163,7 +169,7 @@ func (m *Machine) applyWireguardConfig(ring int, wg *wireguard.Config) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Machine) getRingInfo(ring int) (*RingInfo, bool) {
|
||||
func (m *Machine) getRingInfo(ring rings.RingID) (*RingInfo, bool) {
|
||||
for _, ri := range m.Rings {
|
||||
if ri.Ring == ring {
|
||||
return ri, ri.Enabled
|
||||
@@ -173,7 +179,7 @@ func (m *Machine) getRingInfo(ring int) (*RingInfo, bool) {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func (m *Machine) applyRingInfo(ring int, new *RingInfo) error {
|
||||
func (m *Machine) applyRingInfo(ring rings.RingID, new *RingInfo) error {
|
||||
cur, _ := m.getRingInfo(ring)
|
||||
if cur == nil {
|
||||
// first, append
|
||||
@@ -189,7 +195,9 @@ func (m *Machine) applyRingInfo(ring int, new *RingInfo) error {
|
||||
return cur.Merge(new)
|
||||
}
|
||||
|
||||
func (m *Machine) applyWireguardInterfaceConfig(ring int, data wireguard.InterfaceConfig) error {
|
||||
func (m *Machine) applyWireguardInterfaceConfig(ring rings.RingID,
|
||||
data wireguard.InterfaceConfig) error {
|
||||
//
|
||||
ri := &RingInfo{
|
||||
Ring: ring,
|
||||
Enabled: true,
|
||||
@@ -201,7 +209,9 @@ func (m *Machine) applyWireguardInterfaceConfig(ring int, data wireguard.Interfa
|
||||
return m.applyRingInfo(ring, ri)
|
||||
}
|
||||
|
||||
func (m *Machine) applyWireguardPeerConfig(ring int, pc wireguard.PeerConfig) error {
|
||||
func (m *Machine) applyWireguardPeerConfig(ring rings.RingID,
|
||||
pc wireguard.PeerConfig) error {
|
||||
//
|
||||
peer, found := m.getPeerByName(pc.Endpoint.Name())
|
||||
switch {
|
||||
case !found:
|
||||
@@ -224,16 +234,22 @@ func (m *Machine) applyWireguardPeerConfig(ring int, pc wireguard.PeerConfig) er
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Machine) applyZoneNodeID(zoneID rings.ZoneID, nodeID rings.NodeID) error {
|
||||
func (m *Machine) applyZoneNodeID(regionID rings.RegionID,
|
||||
zoneID rings.ZoneID, nodeID rings.NodeID) error {
|
||||
//
|
||||
switch {
|
||||
case zoneID == 0:
|
||||
case !regionID.Valid():
|
||||
return fmt.Errorf("invalid %s", "regionID")
|
||||
case !zoneID.Valid():
|
||||
return fmt.Errorf("invalid %s", "zoneID")
|
||||
case nodeID == 0:
|
||||
case !nodeID.Valid():
|
||||
return fmt.Errorf("invalid %s", "nodeID")
|
||||
case m.ID != nodeID:
|
||||
return fmt.Errorf("invalid %s: %v ≠ %v", "zoneID", m.ID, nodeID)
|
||||
case m.zone.ID != 0 && m.zone.ID != zoneID:
|
||||
return fmt.Errorf("invalid %s: %v ≠ %v", "zoneID", m.zone.ID, zoneID)
|
||||
case m.zone.ID != 0 && m.zone.ID != zoneID:
|
||||
return fmt.Errorf("invalid %s: %v ≠ %v", "zoneID", m.zone.ID, zoneID)
|
||||
case m.zone.ID == 0:
|
||||
m.zone.ID = zoneID
|
||||
}
|
||||
@@ -260,7 +276,7 @@ func (m *Machine) setRingDefaults(ri *RingInfo) error {
|
||||
|
||||
// RemoveWireguardConfig deletes wgN.conf from the machine's
|
||||
// config directory.
|
||||
func (m *Machine) RemoveWireguardConfig(ring int) error {
|
||||
func (m *Machine) RemoveWireguardConfig(ring rings.RingID) error {
|
||||
err := m.RemoveFile("wg%v.conf", ring)
|
||||
if os.IsNotExist(err) {
|
||||
err = nil
|
||||
@@ -269,7 +285,7 @@ func (m *Machine) RemoveWireguardConfig(ring int) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *Machine) createRingInfo(ring int, enabled bool) (*RingInfo, error) {
|
||||
func (m *Machine) createRingInfo(ring rings.RingID, enabled bool) (*RingInfo, error) {
|
||||
keys, err := wireguard.NewKeyPair()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user