mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-04 16:33:49 +08:00
refactored delete, pull nil pointer and logging
This commit is contained in:
@@ -599,7 +599,12 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
//send update to node to be deleted before deleting on server otherwise message cannot be sent
|
//send update to node to be deleted before deleting on server otherwise message cannot be sent
|
||||||
node.Action = models.NODE_DELETE
|
node.Action = models.NODE_DELETE
|
||||||
runUpdates(&node, true)
|
if err := mq.NodeUpdate(&node); err != nil {
|
||||||
|
logger.Log(1, "error publishing node update", err.Error())
|
||||||
|
returnErrorResponse(w, r, formatError(err, "internal"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
err = logic.DeleteNodeByID(&node, false)
|
err = logic.DeleteNodeByID(&node, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
returnErrorResponse(w, r, formatError(err, "internal"))
|
returnErrorResponse(w, r, formatError(err, "internal"))
|
||||||
@@ -611,8 +616,8 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"])
|
logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"])
|
||||||
|
runUpdates(&node, false)
|
||||||
returnSuccessResponse(w, r, nodeid+" deleted.")
|
returnSuccessResponse(w, r, nodeid+" deleted.")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
||||||
|
@@ -31,6 +31,7 @@ func InstallDaemon(cfg config.ClientConfig) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restart - restarts a system daemon
|
||||||
func Restart() error {
|
func Restart() error {
|
||||||
os := runtime.GOOS
|
os := runtime.GOOS
|
||||||
var err error
|
var err error
|
||||||
@@ -49,3 +50,23 @@ func Restart() error {
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stop - stops a system daemon
|
||||||
|
func Stop() error {
|
||||||
|
os := runtime.GOOS
|
||||||
|
var err error
|
||||||
|
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
|
||||||
|
switch os {
|
||||||
|
case "windows":
|
||||||
|
StopWindowsDaemon()
|
||||||
|
case "darwin":
|
||||||
|
StopLaunchD()
|
||||||
|
case "linux":
|
||||||
|
StopSystemD()
|
||||||
|
default:
|
||||||
|
err = errors.New("no OS daemon to stop")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
@@ -56,12 +56,18 @@ func CleanupMac() {
|
|||||||
os.Remove(MAC_EXEC_DIR + "netclient")
|
os.Remove(MAC_EXEC_DIR + "netclient")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RestartLaunchD - restart launch daemon
|
||||||
func RestartLaunchD() {
|
func RestartLaunchD() {
|
||||||
ncutils.RunCmd("launchctl unload /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
ncutils.RunCmd("launchctl unload /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
||||||
time.Sleep(time.Second >> 2)
|
time.Sleep(time.Second >> 2)
|
||||||
ncutils.RunCmd("launchctl load /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
ncutils.RunCmd("launchctl load /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StopLaunchD - stop launch daemon
|
||||||
|
func StopLaunchD() {
|
||||||
|
ncutils.RunCmd("launchctl unload /System/Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
||||||
|
}
|
||||||
|
|
||||||
// CreateMacService - Creates the mac service file for LaunchDaemons
|
// CreateMacService - Creates the mac service file for LaunchDaemons
|
||||||
func CreateMacService(servicename string, interval string) error {
|
func CreateMacService(servicename string, interval string) error {
|
||||||
_, err := os.Stat("/Library/LaunchDaemons")
|
_, err := os.Stat("/Library/LaunchDaemons")
|
||||||
|
@@ -74,12 +74,14 @@ WantedBy=multi-user.target
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RestartSystemD - restarts systemd service
|
||||||
func RestartSystemD() {
|
func RestartSystemD() {
|
||||||
ncutils.PrintLog("restarting netclient.service", 1)
|
ncutils.PrintLog("restarting netclient.service", 1)
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
_, _ = ncutils.RunCmd("systemctl restart netclient.service", true)
|
_, _ = ncutils.RunCmd("systemctl restart netclient.service", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CleanupLinux - cleans up neclient configs
|
||||||
func CleanupLinux() {
|
func CleanupLinux() {
|
||||||
if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil {
|
if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil {
|
||||||
ncutils.PrintLog("Removing netclient configs: "+err.Error(), 1)
|
ncutils.PrintLog("Removing netclient configs: "+err.Error(), 1)
|
||||||
@@ -89,6 +91,11 @@ func CleanupLinux() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StopSystemD - tells system to stop systemd
|
||||||
|
func StopSystemD() {
|
||||||
|
ncutils.RunCmd("systemctl stop netclient.service", false)
|
||||||
|
}
|
||||||
|
|
||||||
// RemoveSystemDServices - removes the systemd services on a machine
|
// RemoveSystemDServices - removes the systemd services on a machine
|
||||||
func RemoveSystemDServices() error {
|
func RemoveSystemDServices() error {
|
||||||
//sysExec, err := exec.LookPath("systemctl")
|
//sysExec, err := exec.LookPath("systemctl")
|
||||||
|
@@ -248,9 +248,6 @@ func Pull(network string, manual bool) (*models.Node, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if ncutils.IsLinux() {
|
|
||||||
// setDNS(&resNode, servercfg, &cfg.Node)
|
|
||||||
//}
|
|
||||||
var bkupErr = config.SaveBackup(network)
|
var bkupErr = config.SaveBackup(network)
|
||||||
if bkupErr != nil {
|
if bkupErr != nil {
|
||||||
ncutils.Log("unable to update backup file")
|
ncutils.Log("unable to update backup file")
|
||||||
|
@@ -219,6 +219,7 @@ func LeaveNetwork(network string) error {
|
|||||||
|
|
||||||
currentNets, err := ncutils.GetSystemNetworks()
|
currentNets, err := ncutils.GetSystemNetworks()
|
||||||
if err != nil || len(currentNets) <= 1 {
|
if err != nil || len(currentNets) <= 1 {
|
||||||
|
daemon.Stop() // stop system daemon if last network
|
||||||
return RemoveLocalInstance(cfg, network)
|
return RemoveLocalInstance(cfg, network)
|
||||||
}
|
}
|
||||||
return daemon.Restart()
|
return daemon.Restart()
|
||||||
|
@@ -105,17 +105,16 @@ func SetupMQTT(cfg *config.ClientConfig) mqtt.Client {
|
|||||||
ncutils.Log("could not run pull, exiting " + cfg.Node.Network + " setup: " + err.Error())
|
ncutils.Log("could not run pull, exiting " + cfg.Node.Network + " setup: " + err.Error())
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(time.Second)
|
||||||
}
|
}
|
||||||
if token := client.Connect(); token.Wait() && token.Error() != nil {
|
if token := client.Connect(); token.Wait() && token.Error() != nil {
|
||||||
ncutils.Log("unable to connect to broker, retrying ...")
|
ncutils.Log("unable to connect to broker, retrying ...")
|
||||||
if time.Now().After(tperiod) {
|
if time.Now().After(tperiod) {
|
||||||
ncutils.Log("could not connect to broker, exiting " + cfg.Node.Network + " setup: " + token.Error().Error())
|
ncutils.Log("could not connect to broker, exiting " + cfg.Node.Network + " setup: " + token.Error().Error())
|
||||||
if strings.Contains(token.Error().Error(), "connectex") {
|
if strings.Contains(token.Error().Error(), "connectex") || strings.Contains(token.Error().Error(), "i/o timeout") {
|
||||||
ncutils.PrintLog("connection issue detected.. restarting daemon", 0)
|
ncutils.PrintLog("connection issue detected.. pulling and restarting daemon", 0)
|
||||||
Pull(cfg.Node.Network, true)
|
Pull(cfg.Node.Network, true)
|
||||||
daemon.Restart()
|
daemon.Restart()
|
||||||
os.Exit(2)
|
|
||||||
}
|
}
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
@@ -273,30 +272,23 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
|
|||||||
} else {
|
} else {
|
||||||
ncutils.Log("failed to kill go routines for network " + newNode.Network)
|
ncutils.Log("failed to kill go routines for network " + newNode.Network)
|
||||||
}
|
}
|
||||||
ncutils.Log("deleting configuration files")
|
ncutils.PrintLog(fmt.Sprintf("received delete request for %s", cfg.Node.Name), 1)
|
||||||
if err := WipeLocal(cfg.Network); err != nil {
|
if err = LeaveNetwork(cfg.Node.Network); err != nil {
|
||||||
ncutils.PrintLog("error deleting local instance: "+err.Error(), 1)
|
if !strings.Contains("rpc error", err.Error()) {
|
||||||
ncutils.PrintLog("Please perform manual clean up", 1)
|
ncutils.PrintLog(fmt.Sprintf("failed to leave, please check that local files for network %s were removed", cfg.Node.Network), 1)
|
||||||
}
|
|
||||||
currNets, err := ncutils.GetSystemNetworks()
|
|
||||||
if err == nil && len(currNets) == 0 {
|
|
||||||
if err = RemoveLocalInstance(&cfg, cfg.Network); err != nil {
|
|
||||||
ncutils.PrintLog("Please perform manual clean up", 1)
|
|
||||||
}
|
}
|
||||||
os.Exit(0)
|
|
||||||
}
|
}
|
||||||
|
ncutils.PrintLog(fmt.Sprintf("%s was removed", cfg.Node.Name), 1)
|
||||||
return
|
return
|
||||||
case models.NODE_UPDATE_KEY:
|
case models.NODE_UPDATE_KEY:
|
||||||
ncutils.Log("delete recieved")
|
|
||||||
if err := UpdateKeys(&cfg, client); err != nil {
|
if err := UpdateKeys(&cfg, client); err != nil {
|
||||||
ncutils.PrintLog("err updating wireguard keys: "+err.Error(), 1)
|
ncutils.PrintLog("err updating wireguard keys: "+err.Error(), 1)
|
||||||
}
|
}
|
||||||
ifaceDelta = true
|
ifaceDelta = true
|
||||||
case models.NODE_NOOP:
|
case models.NODE_NOOP:
|
||||||
ncutils.Log("noop recieved")
|
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
//Save new config
|
// Save new config
|
||||||
cfg.Node.Action = models.NODE_NOOP
|
cfg.Node.Action = models.NODE_NOOP
|
||||||
if err := config.Write(&cfg, cfg.Network); err != nil {
|
if err := config.Write(&cfg, cfg.Network); err != nil {
|
||||||
ncutils.PrintLog("error updating node configuration: "+err.Error(), 1)
|
ncutils.PrintLog("error updating node configuration: "+err.Error(), 1)
|
||||||
|
@@ -165,10 +165,11 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
|
|||||||
// ensure you clear any existing interface first
|
// ensure you clear any existing interface first
|
||||||
d, _ := wgclient.Device(deviceiface)
|
d, _ := wgclient.Device(deviceiface)
|
||||||
for d != nil && d.Name == deviceiface {
|
for d != nil && d.Name == deviceiface {
|
||||||
err = RemoveConf(deviceiface, false) // remove interface first
|
if err = RemoveConf(deviceiface, false); err != nil { // remove interface first
|
||||||
if strings.Contains(err.Error(), "does not exist") {
|
if strings.Contains(err.Error(), "does not exist") {
|
||||||
err = nil
|
err = nil
|
||||||
break
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
time.Sleep(time.Second >> 2)
|
time.Sleep(time.Second >> 2)
|
||||||
d, _ = wgclient.Device(deviceiface)
|
d, _ = wgclient.Device(deviceiface)
|
||||||
@@ -201,7 +202,7 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
|
|||||||
return fmt.Errorf("could not reliably create interface, please check wg installation and retry")
|
return fmt.Errorf("could not reliably create interface, please check wg installation and retry")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ncutils.PrintLog("interface ready - netclient engage", 1)
|
ncutils.PrintLog("interface ready - netclient.. ENGAGE", 1)
|
||||||
if syncconf { // should never be called really.
|
if syncconf { // should never be called really.
|
||||||
err = SyncWGQuickConf(ifacename, confPath)
|
err = SyncWGQuickConf(ifacename, confPath)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user