mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
added backups to help with reboot
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
@@ -208,6 +209,44 @@ func ModConfig(node *models.Node) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ModConfig - overwrites the node inside client config on disk
|
||||||
|
func SaveBackup(network string) error {
|
||||||
|
|
||||||
|
var configPath = ncutils.GetNetclientPathSpecific() + "netconfig-" + network
|
||||||
|
var backupPath = ncutils.GetNetclientPathSpecific() + "backup.netconfig-" + network
|
||||||
|
if FileExists(configPath) {
|
||||||
|
input, err := ioutil.ReadFile(configPath)
|
||||||
|
if err != nil {
|
||||||
|
ncutils.Log("failed to read " + configPath + " to make a backup")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err = ioutil.WriteFile(backupPath, input, 0644); err != nil {
|
||||||
|
ncutils.Log("failed to copy backup to " + backupPath)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReplaceWithBackup - replaces netconfig file with backup
|
||||||
|
func ReplaceWithBackup(network string) error {
|
||||||
|
var backupPath = ncutils.GetNetclientPathSpecific() + "backup.netconfig-" + network
|
||||||
|
var configPath = ncutils.GetNetclientPathSpecific() + "netconfig-" + network
|
||||||
|
if FileExists(backupPath) {
|
||||||
|
input, err := ioutil.ReadFile(backupPath)
|
||||||
|
if err != nil {
|
||||||
|
ncutils.Log("failed to read file " + backupPath + " to backup network: " + network)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err = ioutil.WriteFile(configPath, input, 0644); err != nil {
|
||||||
|
ncutils.Log("failed backup " + backupPath + " to " + configPath)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ncutils.Log("used backup file for network: " + network)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetCLIConfig - gets the cli flags as a config
|
// GetCLIConfig - gets the cli flags as a config
|
||||||
func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
|
func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
|
||||||
var cfg ClientConfig
|
var cfg ClientConfig
|
||||||
@@ -332,8 +371,14 @@ func ReadConfig(network string) (*ClientConfig, error) {
|
|||||||
f, err := os.Open(file)
|
f, err := os.Open(file)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if err = ReplaceWithBackup(network); err != nil {
|
||||||
nofile = true
|
nofile = true
|
||||||
}
|
}
|
||||||
|
f, err = os.Open(file)
|
||||||
|
if err != nil {
|
||||||
|
nofile = true
|
||||||
|
}
|
||||||
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
var cfg ClientConfig
|
var cfg ClientConfig
|
||||||
|
@@ -151,10 +151,11 @@ func CheckConfig(cliconf config.ClientConfig) error {
|
|||||||
// Pull - pulls the latest config from the server, if manual it will overwrite
|
// Pull - pulls the latest config from the server, if manual it will overwrite
|
||||||
func Pull(network string, manual bool) (*models.Node, error) {
|
func Pull(network string, manual bool) (*models.Node, error) {
|
||||||
cfg, err := config.ReadConfig(network)
|
cfg, err := config.ReadConfig(network)
|
||||||
node := cfg.Node
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node := cfg.Node
|
||||||
servercfg := cfg.Server
|
servercfg := cfg.Server
|
||||||
|
|
||||||
if cfg.Node.IPForwarding == "yes" && !ncutils.IsWindows() {
|
if cfg.Node.IPForwarding == "yes" && !ncutils.IsWindows() {
|
||||||
@@ -243,6 +244,10 @@ func Pull(network string, manual bool) (*models.Node, error) {
|
|||||||
if ncutils.IsLinux() {
|
if ncutils.IsLinux() {
|
||||||
setDNS(&resNode, servercfg, &cfg.Node)
|
setDNS(&resNode, servercfg, &cfg.Node)
|
||||||
}
|
}
|
||||||
|
var bkupErr = config.SaveBackup(network)
|
||||||
|
if bkupErr != nil {
|
||||||
|
ncutils.Log("unable to update backup file")
|
||||||
|
}
|
||||||
|
|
||||||
return &resNode, err
|
return &resNode, err
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,9 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
nodepb "github.com/gravitl/netmaker/grpc"
|
nodepb "github.com/gravitl/netmaker/grpc"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/netclient/auth"
|
"github.com/gravitl/netmaker/netclient/auth"
|
||||||
@@ -16,8 +19,6 @@ import (
|
|||||||
"github.com/gravitl/netmaker/netclient/wireguard"
|
"github.com/gravitl/netmaker/netclient/wireguard"
|
||||||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"log"
|
|
||||||
"os/exec"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// JoinNetwork - helps a client join a network
|
// JoinNetwork - helps a client join a network
|
||||||
@@ -185,6 +186,10 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// attempt to make backup
|
||||||
|
if err = config.SaveBackup(node.Network); err != nil {
|
||||||
|
ncutils.Log("failed to make backup, node will not auto restore if config is corrupted")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ncutils.Log("retrieving peers")
|
ncutils.Log("retrieving peers")
|
||||||
|
Reference in New Issue
Block a user