Make cleanup on shutdown optional

This commit is contained in:
Alex Stockinger
2022-07-28 07:31:21 +00:00
parent cb238c85a1
commit df5f79dccc
2 changed files with 17 additions and 6 deletions

View File

@@ -51,6 +51,7 @@ const (
// Mesh is able to create Kilo network meshes.
type Mesh struct {
Backend
cleanup bool
cleanUpIface bool
cni bool
cniPath string
@@ -88,7 +89,7 @@ type Mesh struct {
}
// New returns a new Mesh instance.
func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularity, hostname string, port int, subnet *net.IPNet, local, cni bool, cniPath, iface string, cleanUpIface bool, createIface bool, mtu uint, resyncPeriod time.Duration, prioritisePrivateAddr, iptablesForwardRule bool, logger log.Logger) (*Mesh, error) {
func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularity, hostname string, port int, subnet *net.IPNet, local, cni bool, cniPath, iface string, cleanup bool, cleanUpIface bool, createIface bool, mtu uint, resyncPeriod time.Duration, prioritisePrivateAddr, iptablesForwardRule bool, logger log.Logger) (*Mesh, error) {
if err := os.MkdirAll(kiloPath, 0700); err != nil {
return nil, fmt.Errorf("failed to create directory to store configuration: %v", err)
}
@@ -117,9 +118,14 @@ func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularit
}
var kiloIface int
if createIface {
kiloIface, _, err = wireguard.New(iface, mtu)
link, err := netlink.LinkByName(iface)
if err != nil {
return nil, fmt.Errorf("failed to create WireGuard interface: %v", err)
kiloIface, _, err = wireguard.New(iface, mtu)
if err != nil {
return nil, fmt.Errorf("failed to create WireGuard interface: %v", err)
}
} else {
kiloIface = link.Attrs().Index
}
} else {
link, err := netlink.LinkByName(iface)
@@ -162,6 +168,7 @@ func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularit
}
return &Mesh{
Backend: backend,
cleanup: cleanup,
cleanUpIface: cleanUpIface,
cni: cni,
cniPath: cniPath,
@@ -248,7 +255,9 @@ func (m *Mesh) Run(ctx context.Context) error {
}
}
}()
defer m.cleanUp()
if m.cleanup {
defer m.cleanUp()
}
resync := time.NewTimer(m.resyncPeriod)
checkIn := time.NewTimer(checkInPeriod)
nw := m.Nodes().Watch()