mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-13 00:24:31 +08:00
feat(netclient): add listing of nodes with hostnames
This commit is contained in:
parent
3a399aff23
commit
51a09167fc
5 changed files with 127 additions and 30 deletions
|
@ -7,6 +7,7 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/dnslogic"
|
||||
"github.com/gravitl/netmaker/functions"
|
||||
|
@ -277,6 +278,7 @@ func setPeerInfo(node models.Node) models.Node {
|
|||
peer.IsRelayed = node.IsRelayed
|
||||
peer.PublicKey = node.PublicKey
|
||||
peer.Endpoint = node.Endpoint
|
||||
peer.Name = node.Name
|
||||
peer.LocalAddress = node.LocalAddress
|
||||
peer.ListenPort = node.ListenPort
|
||||
peer.AllowedIPs = node.AllowedIPs
|
||||
|
|
|
@ -4,13 +4,14 @@ import (
|
|||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"math/rand"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
const charset = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
|
|
|
@ -255,32 +255,6 @@ func DeleteInterface(ifacename string, postdown string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// List - lists all networks on local machine
|
||||
func List() error {
|
||||
|
||||
networks, err := ncutils.GetSystemNetworks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, network := range networks {
|
||||
cfg, err := config.ReadConfig(network)
|
||||
if err == nil {
|
||||
jsoncfg, _ := json.Marshal(
|
||||
map[string]string{
|
||||
"Name": cfg.Node.Name,
|
||||
"Interface": cfg.Node.Interface,
|
||||
"PrivateIPv4": cfg.Node.Address,
|
||||
"PrivateIPv6": cfg.Node.Address6,
|
||||
"PublicEndpoint": cfg.Node.Endpoint,
|
||||
})
|
||||
fmt.Println(network + ": " + string(jsoncfg))
|
||||
} else {
|
||||
ncutils.PrintLog(network+": Could not retrieve network configuration.", 1)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// WipeLocal - wipes local instance
|
||||
func WipeLocal(network string) error {
|
||||
cfg, err := config.ReadConfig(network)
|
||||
|
|
120
netclient/functions/list.go
Normal file
120
netclient/functions/list.go
Normal file
|
@ -0,0 +1,120 @@
|
|||
package functions
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
nodepb "github.com/gravitl/netmaker/grpc"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/netclient/auth"
|
||||
"github.com/gravitl/netmaker/netclient/config"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/metadata"
|
||||
)
|
||||
|
||||
type Peer struct {
|
||||
Name string `json:"name"`
|
||||
Interface string `json:"interface,omitempty"`
|
||||
PrivateIPv4 string `json:"private_ipv4,omitempty"`
|
||||
PrivateIPv6 string `json:"private_ipv6,omitempty"`
|
||||
PublicEndpoint string `json:"public_endoint,omitempty"`
|
||||
}
|
||||
|
||||
type Network struct {
|
||||
Name string `json:"name"`
|
||||
CurrentNode Peer `json:"current_node"`
|
||||
Peers []Peer `json:"peers"`
|
||||
}
|
||||
|
||||
func List() error {
|
||||
networks, err := ncutils.GetSystemNetworks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
nets := []Network{}
|
||||
for _, network := range networks {
|
||||
cfg, err := config.ReadConfig(network)
|
||||
if err != nil {
|
||||
ncutils.PrintLog(network+": Could not retrieve network configuration.", 1)
|
||||
return err
|
||||
}
|
||||
peers, err := getPeers(network)
|
||||
if err != nil {
|
||||
ncutils.PrintLog(network+": Could not retrieve network configuration.", 1)
|
||||
return err
|
||||
}
|
||||
|
||||
nets = append(nets, Network{
|
||||
Name: network,
|
||||
Peers: peers,
|
||||
CurrentNode: Peer{
|
||||
Name: cfg.Node.Name,
|
||||
Interface: cfg.Node.Interface,
|
||||
PrivateIPv4: cfg.Node.Address,
|
||||
PrivateIPv6: cfg.Node.Address6,
|
||||
PublicEndpoint: cfg.Node.Endpoint,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
jsoncfg, _ := json.Marshal(struct {
|
||||
Networks []Network `json:"networks"`
|
||||
}{nets})
|
||||
fmt.Println(string(jsoncfg))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getPeers(network string) ([]Peer, error) {
|
||||
cfg, err := config.ReadConfig(network)
|
||||
if err != nil {
|
||||
return []Peer{}, err
|
||||
}
|
||||
nodecfg := cfg.Node
|
||||
var nodes []models.Node
|
||||
|
||||
var wcclient nodepb.NodeServiceClient
|
||||
conn, err := grpc.Dial(cfg.Server.GRPCAddress,
|
||||
ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL))
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to establish client connection to localhost:50051: %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
// Instantiate the BlogServiceClient with our client connection to the server
|
||||
wcclient = nodepb.NewNodeServiceClient(conn)
|
||||
|
||||
req := &nodepb.Object{
|
||||
Data: nodecfg.MacAddress + "###" + nodecfg.Network,
|
||||
Type: nodepb.STRING_TYPE,
|
||||
}
|
||||
|
||||
ctx, err := auth.SetJWT(wcclient, network)
|
||||
if err != nil {
|
||||
log.Println("Failed to authenticate.")
|
||||
return []Peer{}, err
|
||||
}
|
||||
var header metadata.MD
|
||||
|
||||
response, err := wcclient.GetPeers(ctx, req, grpc.Header(&header))
|
||||
if err != nil {
|
||||
log.Println("Error retrieving peers")
|
||||
return []Peer{}, err
|
||||
}
|
||||
if err := json.Unmarshal([]byte(response.GetData()), &nodes); err != nil {
|
||||
log.Println("Error unmarshaling data for peers")
|
||||
return []Peer{}, err
|
||||
}
|
||||
|
||||
peers := []Peer{}
|
||||
for _, node := range nodes {
|
||||
if node.Name != cfg.Node.Name {
|
||||
peers = append(peers, Peer{Name: fmt.Sprintf("%v.%v", node.Name, network), PrivateIPv4: node.Address, PrivateIPv6: node.Address6})
|
||||
}
|
||||
}
|
||||
|
||||
return peers, nil
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
set -e
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script must be run as root"
|
||||
echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue