made some more efficient images and added set defaults for node reads

This commit is contained in:
0xdcarns 2021-09-27 17:51:20 -04:00
parent df132e2396
commit 90d941854b
13 changed files with 110 additions and 21 deletions

View file

@ -14,7 +14,6 @@ import (
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
) )
func GetPeersList(networkName string, excludeRelayed bool, relayedNodeAddr string) ([]models.Node, error) { func GetPeersList(networkName string, excludeRelayed bool, relayedNodeAddr string) ([]models.Node, error) {
var peers []models.Node var peers []models.Node
var relayNode models.Node var relayNode models.Node
@ -218,6 +217,7 @@ func GetNode(macaddress string, network string) (models.Node, error) {
if err = json.Unmarshal([]byte(data), &node); err != nil { if err = json.Unmarshal([]byte(data), &node); err != nil {
return node, err return node, err
} }
node.SetDefaults()
return node, err return node, err
} }

View file

@ -133,7 +133,7 @@ func getNetworks(w http.ResponseWriter, r *http.Request) {
err := errors.New("Networks Error") err := errors.New("Networks Error")
if networksSlice[0] == ALL_NETWORK_ACCESS { if networksSlice[0] == ALL_NETWORK_ACCESS {
allnetworks, err = models.GetNetworks() allnetworks, err = models.GetNetworks()
if err != nil && !database.IsEmptyRecord(err){ if err != nil && !database.IsEmptyRecord(err) {
returnErrorResponse(w, r, formatError(err, "internal")) returnErrorResponse(w, r, formatError(err, "internal"))
return return
} }
@ -390,7 +390,7 @@ func CreateNetwork(network models.Network) error {
return err return err
} }
if servercfg.IsClientMode() { if servercfg.IsClientMode() != "off" {
var success bool var success bool
success, err = serverctl.AddNetwork(network.NetID) success, err = serverctl.AddNetwork(network.NetID)
if err != nil || !success { if err != nil || !success {

View file

@ -33,6 +33,7 @@ func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.Object) (*
return nil, err return nil, err
} }
node.Update(&node) node.Update(&node)
node.SetDefaults()
response := &nodepb.Object{ response := &nodepb.Object{
Data: string(nodeData), Data: string(nodeData),
Type: nodepb.NODE_TYPE, Type: nodepb.NODE_TYPE,
@ -148,7 +149,7 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
} }
peersData, err := json.Marshal(&peers) peersData, err := json.Marshal(&peers)
functions.PrintUserLog(node.Address,"checked in successfully",3) functions.PrintUserLog(node.Address, "checked in successfully", 3)
return &nodepb.Object{ return &nodepb.Object{
Data: string(peersData), Data: string(peersData),
Type: nodepb.NODE_TYPE, Type: nodepb.NODE_TYPE,

View file

@ -12,11 +12,11 @@ RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=1 /usr/local/go/bin/go build -ldflags="-
WORKDIR /app/netclient WORKDIR /app/netclient
RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=1 /usr/local/go/bin/go build -ldflags="-w -s" -o netclient main.go RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=0 /usr/local/go/bin/go build -ldflags="-w -s" -o netclient main.go
#second stage #second stage
FROM alpine:3.13.6 FROM alpine:3.13.6
# add glib support daemon manager # add a c lib
RUN apk add gcompat iptables RUN apk add gcompat iptables
# set the working directory # set the working directory
WORKDIR /root/ WORKDIR /root/
@ -26,11 +26,10 @@ RUN mkdir /etc/netclient
COPY --from=builder /app/netmaker . COPY --from=builder /app/netmaker .
COPY --from=builder /app/config config COPY --from=builder /app/config config
COPY --from=builder /app/netclient/netclient /etc/netclient/netclient COPY --from=builder /app/netclient/netclient /etc/netclient/netclient
COPY --from=builder /app/scripts/daemon.sh .
RUN chmod 0755 /etc/netclient/netclient
EXPOSE 8081 EXPOSE 8081
EXPOSE 50051 EXPOSE 50051
RUN touch /etc/netclient/netclient.logs
RUN sh daemon.sh
ENTRYPOINT ["./netmaker"] ENTRYPOINT ["./netmaker"]

View file

@ -556,6 +556,8 @@ func GetNodeByMacAddress(network string, macaddress string) (models.Node, error)
return models.Node{}, err return models.Node{}, err
} }
node.SetDefaults()
return node, nil return node, nil
} }
@ -577,6 +579,8 @@ func GetDeletedNodeByMacAddress(network string, macaddress string) (models.Node,
return models.Node{}, err return models.Node{}, err
} }
node.SetDefaults()
return node, nil return node, nil
} }

27
main.go
View file

@ -11,6 +11,7 @@ import (
"os/signal" "os/signal"
"strconv" "strconv"
"sync" "sync"
"time"
controller "github.com/gravitl/netmaker/controllers" controller "github.com/gravitl/netmaker/controllers"
"github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/database"
@ -19,6 +20,7 @@ import (
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/servercfg" "github.com/gravitl/netmaker/servercfg"
"github.com/gravitl/netmaker/serverctl"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
@ -37,7 +39,7 @@ func initialize() { // Client Mode Prereq Check
log.Fatal(err) log.Fatal(err)
} }
log.Println("database successfully connected.") log.Println("database successfully connected.")
if servercfg.IsClientMode() { if servercfg.IsClientMode() != "off" {
output, err := ncutils.RunCmd("id -u", true) output, err := ncutils.RunCmd("id -u", true)
if err != nil { if err != nil {
log.Println("Error running 'id -u' for prereq check. Please investigate or disable client mode.") log.Println("Error running 'id -u' for prereq check. Please investigate or disable client mode.")
@ -75,6 +77,13 @@ func startControllers() {
waitnetwork.Add(1) waitnetwork.Add(1)
go runGRPC(&waitnetwork) go runGRPC(&waitnetwork)
} }
// Run the client in goroutine locally if CLIENT_MODE is "contained"
if servercfg.IsClientMode() == "contained" {
waitnetwork.Add(1)
go runClient(&waitnetwork)
}
if servercfg.IsDNSMode() { if servercfg.IsDNSMode() {
err := controller.SetDNS() err := controller.SetDNS()
if err != nil { if err != nil {
@ -96,8 +105,22 @@ func startControllers() {
if !servercfg.IsAgentBackend() && !servercfg.IsRestBackend() { if !servercfg.IsAgentBackend() && !servercfg.IsRestBackend() {
log.Println("No Server Mode selected, so nothing is being served! Set either Agent mode (AGENT_BACKEND) or Rest mode (REST_BACKEND) to 'true'.") log.Println("No Server Mode selected, so nothing is being served! Set either Agent mode (AGENT_BACKEND) or Rest mode (REST_BACKEND) to 'true'.")
} }
waitnetwork.Wait() waitnetwork.Wait()
log.Println("exiting") log.Println("[netmaker] exiting")
}
func runClient(wg *sync.WaitGroup) {
defer wg.Done()
log.Println("CLIENT_MODE running as contained")
go func() {
for {
if err := serverctl.HandleContainedClient(); err != nil {
// PASS
}
time.Sleep(time.Second * 15)
}
}()
} }
func runGRPC(wg *sync.WaitGroup) { func runGRPC(wg *sync.WaitGroup) {

View file

@ -178,7 +178,7 @@ func (network *Network) SetNetworkLastModified() {
func (network *Network) SetDefaults() { func (network *Network) SetDefaults() {
if network.DefaultUDPHolePunch == "" { if network.DefaultUDPHolePunch == "" {
if servercfg.IsClientMode() { if servercfg.IsClientMode() != "off" {
network.DefaultUDPHolePunch = "yes" network.DefaultUDPHolePunch = "yes"
} else { } else {
network.DefaultUDPHolePunch = "no" network.DefaultUDPHolePunch = "no"

View file

@ -1,4 +1,11 @@
# create a logs file
sudo touch /etc/netclient/netclient.logs
echo "[netclient] created logs file in /etc/netclient/netclient.logs"
echo "[netclient] Starting netclient checkins"
# loop and call checkin -n all
while [ 1 ]; do while [ 1 ]; do
/etc/netclient/netclient checkin -n all >> /etc/netclient/netclient.logs 2&1> # add logs to netclient.logs
sudo /etc/netclient/netclient checkin -n all >> /etc/netclient/netclient.logs 2&1>
sleep 15 sleep 15
done & done &
echo "[netclient] exiting"

View file

@ -39,8 +39,8 @@ func GetServerConfig() config.ServerConfig {
cfg.AgentBackend = "on" cfg.AgentBackend = "on"
} }
cfg.ClientMode = "off" cfg.ClientMode = "off"
if IsClientMode() { if IsClientMode() != "off" {
cfg.ClientMode = "on" cfg.ClientMode = IsClientMode()
} }
cfg.DNSMode = "off" cfg.DNSMode = "off"
if IsDNSMode() { if IsDNSMode() {
@ -222,15 +222,21 @@ func IsAgentBackend() bool {
} }
return isagent return isagent
} }
func IsClientMode() bool { func IsClientMode() string {
isclient := true isclient := "on"
if os.Getenv("CLIENT_MODE") != "" { if os.Getenv("CLIENT_MODE") != "" {
if os.Getenv("CLIENT_MODE") == "off" { if os.Getenv("CLIENT_MODE") == "off" {
isclient = false isclient = "off"
}
if os.Getenv("CLIENT_MODE") == "contained" {
isclient = "contained"
} }
} else if config.Config.Server.ClientMode != "" { } else if config.Config.Server.ClientMode != "" {
if config.Config.Server.ClientMode == "off" { if config.Config.Server.ClientMode == "off" {
isclient = false isclient = "off"
}
if config.Config.Server.ClientMode == "contained" {
isclient = "contained"
} }
} }
return isclient return isclient

View file

@ -100,6 +100,51 @@ func RemoveNetwork(network string) (bool, error) {
} }
func HandleContainedClient() error {
log.SetFlags(log.Flags() &^ (log.Llongfile | log.Lshortfile))
netclientDir := ncutils.GetNetclientPath()
netclientPath := ncutils.GetNetclientPathSpecific()
_, err := os.Stat(netclientDir)
if os.IsNotExist(err) {
os.Mkdir(netclientDir, 744)
} else if err != nil {
log.Println("could not find or create", netclientDir)
return err
}
_, err = os.Stat(netclientPath + "netclient")
if os.IsNotExist(err) {
err = InstallNetclient()
if err != nil {
return err
}
}
err = os.Chmod(netclientPath+"netclient", 0755)
if err != nil {
log.Println("could not change netclient binary permissions")
return err
}
checkinCMD := exec.Command(netclientPath+"netclient", "checkin", "-n", "all")
checkinCMD.Stdout = os.Stdout
checkinCMD.Stderr = os.Stderr
err = checkinCMD.Start()
if err != nil {
if servercfg.GetVerbose() >= 2 {
log.Println(err)
}
}
err = checkinCMD.Wait()
if err != nil {
if servercfg.GetVerbose() >= 2 {
log.Println(err)
}
}
if servercfg.GetVerbose() >= 3 {
log.Println("[server netclient]", "completed a checkin call")
}
return nil
}
func AddNetwork(network string) (bool, error) { func AddNetwork(network string) (bool, error) {
pubip, err := servercfg.GetPublicIP() pubip, err := servercfg.GetPublicIP()
if err != nil { if err != nil {
@ -133,8 +178,12 @@ func AddNetwork(network string) (bool, error) {
return false, err return false, err
} }
functions.PrintUserLog(models.NODE_SERVER_NAME, "executing network join: "+netclientPath+"netclient "+"join "+"-t "+token+" -name "+models.NODE_SERVER_NAME+" -endpoint "+pubip, 0) functions.PrintUserLog(models.NODE_SERVER_NAME, "executing network join: "+netclientPath+"netclient "+"join "+"-t "+token+" -name "+models.NODE_SERVER_NAME+" -endpoint "+pubip, 0)
var joinCMD *exec.Cmd
joinCMD := exec.Command(netclientPath+"netclient", "join", "-t", token, "-name", models.NODE_SERVER_NAME, "-endpoint", pubip, "-daemon", "off") if servercfg.IsClientMode() == "contained" {
joinCMD = exec.Command(netclientPath+"netclient", "join", "-t", token, "-name", models.NODE_SERVER_NAME, "-endpoint", pubip, "-daemon", "off")
} else {
joinCMD = exec.Command(netclientPath+"netclient", "join", "-t", token, "-name", models.NODE_SERVER_NAME, "-endpoint", pubip)
}
joinCMD.Stdout = os.Stdout joinCMD.Stdout = os.Stdout
joinCMD.Stderr = os.Stderr joinCMD.Stderr = os.Stderr
err = joinCMD.Start() err = joinCMD.Start()