Compare commits

..

5 Commits

Author SHA1 Message Date
amery 2525026e2d WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-25 17:41:04 +00:00
amery 051e441a68 zones: change WriteEnv() to not fake gateways
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-25 17:41:04 +00:00
amery 3013303ece zones: add Zone.SetGateway() to set one by ID
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-25 17:41:04 +00:00
amery ff2cbdc3c5 zones: set first node of a Zone as ring0 gateway if it doesn't have one already
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-25 17:41:04 +00:00
amery b9e98ca322 zones: Zone.PruneWireguardConfig()
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-25 17:41:04 +00:00
3 changed files with 5 additions and 90 deletions
+4 -33
View File
@@ -1,35 +1,17 @@
package wireguard
import (
"bytes"
"errors"
"fmt"
"io"
"net/netip"
"strconv"
"strings"
"text/template"
"darvaza.org/core"
"gopkg.in/gcfg.v1"
)
var configTemplate = template.Must(template.New("config").Funcs(template.FuncMap{
"StringsJoin": strings.Join,
}).Parse(`[Interface]
Address = {{.Interface.Address}}
PrivateKey = {{.Interface.PrivateKey}}
ListenPort = {{.Interface.ListenPort}}
{{range .Peer}}
[Peer]
# {{.Endpoint.Name}}
PublicKey = {{.PublicKey}}
Endpoint = {{.Endpoint}}
AllowedIPs = {{ StringsJoin .AllowedIPs ", "}}
{{end}}
`))
// Config represents a wgN.conf file
type Config struct {
Interface InterfaceConfig
@@ -37,24 +19,13 @@ type Config struct {
}
// GetAddress is a shortcut to the interface's address
func (wg *Config) GetAddress() netip.Addr {
return wg.Interface.Address
func (f *Config) GetAddress() netip.Addr {
return f.Interface.Address
}
// Peers tells how many peers are described
func (wg *Config) Peers() int {
return len(wg.Peer)
}
// WriteTo writes a Wireguard [Config] onto the provided [io.Writer]
func (wg *Config) WriteTo(w io.Writer) (int64, error) {
var buf bytes.Buffer
if err := configTemplate.Execute(&buf, wg); err != nil {
return 0, err
}
return buf.WriteTo(w)
func (f *Config) Peers() int {
return len(f.Peer)
}
// InterfaceConfig represents the [Interface] section
-25
View File
@@ -268,31 +268,6 @@ func (m *Machine) SyncWireguardConfig(ring int) error {
return m.zone.SyncWireguardConfig(ring)
}
func (m *Machine) WriteWireguardConfig(ring int) error {
r, err := m.zone.GetRing(ring)
if err != nil {
return err
}
return m.writeWireguardRing(r)
}
func (m *Machine) writeWireguardRing(r *Ring) error {
wg, err := r.ExportConfig(m.ID)
if err != nil {
return nil
}
f, err := m.CreateTruncFile("wg%v.conf", r.Ring)
if err != nil {
return err
}
defer f.Close()
_, err = wg.WriteTo(f)
return err
}
func (m *Machine) createRingInfo(ring int, enabled bool) (*RingInfo, error) {
keys, err := wireguard.NewKeyPair()
if err != nil {
+1 -32
View File
@@ -1,40 +1,9 @@
package zones
import "git.jpi.io/amery/jpictl/pkg/wireguard"
type Ring struct {
Ring int
}
func (*Ring) ExportConfig(_ int) (*wireguard.Config, error) {
return nil, nil
}
func (*Zone) GetRing(_ int) (*Ring, error) {
return &Ring{}, nil
}
// SyncWireguardConfig updates all wgN.conf files for the specified
// ring
func (z *Zone) SyncWireguardConfig(ring int) error {
err := z.PruneWireguardConfig(ring)
if err != nil {
return err
}
r, err := z.GetRing(ring)
if err != nil {
return err
}
z.ForEachMachine(func(p *Machine) bool {
if _, ok := p.getRingInfo(ring); ok {
err = p.writeWireguardRing(r)
}
return err != nil
})
return err
return z.PruneWireguardConfig(ring)
}
// PruneWireguardConfig removes wgN.conf files of machines with