refactor leave to use API

Signed-off-by: Matthew R. Kasun <mkasun@nusak.ca>
This commit is contained in:
Matthew R. Kasun 2022-04-20 07:52:31 -04:00
parent b7a18eac1f
commit 12dfc5f820

View file

@ -5,24 +5,21 @@ import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"log"
"net"
"net/http"
"os"
"strings"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/auth"
"github.com/gravitl/netmaker/netclient/config"
"github.com/gravitl/netmaker/netclient/daemon"
"github.com/gravitl/netmaker/netclient/local"
"github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/netclient/wireguard"
"golang.zx2c4.com/wireguard/wgctrl"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
)
// LINUX_APP_DATA_PATH - linux path
@ -158,46 +155,25 @@ func LeaveNetwork(network string, force bool) error {
if err != nil {
return err
}
servercfg := cfg.Server
node := cfg.Node
if node.NetworkSettings.IsComms == "yes" && !force {
return errors.New("COMMS_NET - You are trying to leave the comms network. This will break network updates. Unless you re-join. If you really want to leave, run with --force=yes.")
}
if node.IsServer != "yes" {
var wcclient nodepb.NodeServiceClient
conn, err := grpc.Dial(cfg.Server.GRPCAddress,
ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL))
token, err := Authenticate(cfg)
if err != nil {
log.Printf("Unable to establish client connection to "+servercfg.GRPCAddress+": %v", err)
return fmt.Errorf("unable to authenticate %w", err)
}
defer conn.Close()
wcclient = nodepb.NewNodeServiceClient(conn)
ctx, err := auth.SetJWT(wcclient, network)
url := "https://" + cfg.Server.API + "/api/nodes/" + cfg.Network + "/" + cfg.Node.ID
response, err := API("", http.MethodDelete, url, token)
if err != nil {
log.Printf("Failed to authenticate: %v", err)
} else { // handle client side
var header metadata.MD
nodeData, err := json.Marshal(&node)
if err == nil {
_, err = wcclient.DeleteNode(
ctx,
&nodepb.Object{
Data: string(nodeData),
Type: nodepb.NODE_TYPE,
},
grpc.Header(&header),
)
if err != nil {
logger.Log(1, "encountered error deleting node: ", err.Error())
} else {
logger.Log(1, "removed machine from ", node.Network, " network on remote server")
}
}
return fmt.Errorf("error deleting node on server %w", err)
}
if response.StatusCode == http.StatusOK {
logger.Log(0, "deleted node", cfg.Node.Name, " on network ", cfg.Network)
} else {
bodybytes, _ := ioutil.ReadAll(response.Body)
defer response.Body.Close()
return fmt.Errorf("error deleting node on server %s %s", response.Status, string(bodybytes))
}
}
wgClient, wgErr := wgctrl.New()
if wgErr == nil {
removeIface := cfg.Node.Interface