mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-11 15:44:52 +08:00
made some more efficient images and added set defaults for node reads
This commit is contained in:
parent
df132e2396
commit
90d941854b
13 changed files with 110 additions and 21 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"]
|
|
@ -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
27
main.go
|
@ -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) {
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Add table
Reference in a new issue