From 49632d4cb676d0c3d3babbe3153f2b34e7c27a75 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Fri, 25 Aug 2023 17:11:27 +0000 Subject: [PATCH] WIP Signed-off-by: Alejandro Mery --- pkg/zones/machine.go | 18 +++++++++++++ pkg/zones/machine_rings.go | 54 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/pkg/zones/machine.go b/pkg/zones/machine.go index 4f0c736..d6f8fe3 100644 --- a/pkg/zones/machine.go +++ b/pkg/zones/machine.go @@ -43,6 +43,24 @@ func (m *Machine) IsGateway() bool { return ok } +// SetGateway enables/disables a Machine ring0 integration +func (m *Machine) SetGateway(enabled bool) error { + ri, found := m.getRingInfo(0) + switch { + case !found && !enabled: + return nil + case !found: + var err error + + if ri, err = m.createRingInfo(0, false); err != nil { + return err + } + } + + ri.Enabled = enabled + return m.syncRingConfig(0) +} + func (m *Machine) getPeerByName(name string) (*Machine, bool) { return m.zone.zones.GetMachineByName(name) } diff --git a/pkg/zones/machine_rings.go b/pkg/zones/machine_rings.go index 1e950e8..75ab2bf 100644 --- a/pkg/zones/machine_rings.go +++ b/pkg/zones/machine_rings.go @@ -261,3 +261,57 @@ func (m *Machine) RemoveWireguardConfig(ring int) error { return err } + +func (*Machine) syncRingConfig(_ int) error { + // _, err := m.getRingNodes(ring) + return nil +} + +func (m *Machine) createRingInfo(ring int, enabled bool) (*RingInfo, error) { + keys, err := wireguard.NewKeyPair() + if err != nil { + return nil, err + } + + ri := &RingInfo{ + Ring: ring, + Enabled: enabled, + Keys: keys, + } + + err = m.applyRingInfo(ring, ri) + if err != nil { + return nil, err + } + + return ri, nil +} + +func (m *Machine) writeRingInfo(ri *RingInfo) error { + var err error + + if m == nil || ri == nil { + return fs.ErrInvalid + } + + err = m.WriteWireguardKeys(ri.Ring) + if err != nil { + return err + } + + if !ri.Enabled { + return m.RemoveWireguardConfig(ri.Ring) + } + + return m.writeRingInfoConf(ri.Ring, ri.Keys.PrivateKey) +} + +func (m *Machine) writeRingInfoConf(ring int, _ wireguard.PrivateKey) error { + f, err := m.CreateTruncFile("wg%v.conf", ring) + if err != nil { + return err + } + defer f.Close() + + return nil +}