mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-04 19:05:27 +08:00
refactor leave to use API
Signed-off-by: Matthew R. Kasun <mkasun@nusak.ca>
This commit is contained in:
parent
b7a18eac1f
commit
12dfc5f820
1 changed files with 13 additions and 37 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue