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" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io/ioutil"
"log" "log"
"net" "net"
"net/http" "net/http"
"os" "os"
"strings" "strings"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/auth"
"github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/config"
"github.com/gravitl/netmaker/netclient/daemon" "github.com/gravitl/netmaker/netclient/daemon"
"github.com/gravitl/netmaker/netclient/local" "github.com/gravitl/netmaker/netclient/local"
"github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/netclient/wireguard" "github.com/gravitl/netmaker/netclient/wireguard"
"golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
) )
// LINUX_APP_DATA_PATH - linux path // LINUX_APP_DATA_PATH - linux path
@ -158,46 +155,25 @@ func LeaveNetwork(network string, force bool) error {
if err != nil { if err != nil {
return err return err
} }
servercfg := cfg.Server
node := cfg.Node 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" { if node.IsServer != "yes" {
var wcclient nodepb.NodeServiceClient token, err := Authenticate(cfg)
conn, err := grpc.Dial(cfg.Server.GRPCAddress,
ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL))
if err != nil { 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() url := "https://" + cfg.Server.API + "/api/nodes/" + cfg.Network + "/" + cfg.Node.ID
wcclient = nodepb.NewNodeServiceClient(conn) response, err := API("", http.MethodDelete, url, token)
ctx, err := auth.SetJWT(wcclient, network)
if err != nil { if err != nil {
log.Printf("Failed to authenticate: %v", err) return fmt.Errorf("error deleting node on server %w", err)
} else { // handle client side }
var header metadata.MD if response.StatusCode == http.StatusOK {
nodeData, err := json.Marshal(&node) logger.Log(0, "deleted node", cfg.Node.Name, " on network ", cfg.Network)
if err == nil { } else {
_, err = wcclient.DeleteNode( bodybytes, _ := ioutil.ReadAll(response.Body)
ctx, defer response.Body.Close()
&nodepb.Object{ return fmt.Errorf("error deleting node on server %s %s", response.Status, string(bodybytes))
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")
}
}
} }
} }
wgClient, wgErr := wgctrl.New() wgClient, wgErr := wgctrl.New()
if wgErr == nil { if wgErr == nil {
removeIface := cfg.Node.Interface removeIface := cfg.Node.Interface