diff --git a/pkg/zones/machine_rings.go b/pkg/zones/machine_rings.go index 8a80748..43a55cf 100644 --- a/pkg/zones/machine_rings.go +++ b/pkg/zones/machine_rings.go @@ -61,6 +61,26 @@ func (m *Machine) GetWireguardKeys(ring int) (*wireguard.KeyPair, error) { return kp, nil } +func (m *Machine) tryReadWireguardKeys(ring int) error { + kp, err := m.GetWireguardKeys(ring) + switch { + case os.IsNotExist(err): + // ignore + return nil + case err != nil: + // something went wrong + return err + default: + // import keys + ri := &RingInfo{ + Ring: ring, + Keys: kp, + } + + return m.applyRingInfo(ring, ri) + } +} + // GetWireguardConfig reads a wgN.conf file func (m *Machine) GetWireguardConfig(ring int) (*wireguard.Config, error) { data, err := m.ReadFile("wg%v.conf", ring) diff --git a/pkg/zones/machine_scan.go b/pkg/zones/machine_scan.go index 5f88ae0..c676644 100644 --- a/pkg/zones/machine_scan.go +++ b/pkg/zones/machine_scan.go @@ -25,6 +25,15 @@ func (m *Machine) updatePublicAddresses() error { return nil } +func (m *Machine) init() error { + for i := 0; i < RingsCount; i++ { + if err := m.tryReadWireguardKeys(i); err != nil { + return err + } + } + return nil +} + func (m *Machine) scan() error { for i := 0; i < RingsCount; i++ { if err := m.tryApplyWireguardConfig(i); err != nil { diff --git a/pkg/zones/scan.go b/pkg/zones/scan.go index 6c40b2f..418fe18 100644 --- a/pkg/zones/scan.go +++ b/pkg/zones/scan.go @@ -129,6 +129,10 @@ func (z *Zone) scan() error { Name: e.Name(), } + if err := m.init(); err != nil { + return err + } + z.Machines = append(z.Machines, m) } }