Browse Source

network and ACL initialization

afeiszli 2 years ago
parent
commit
96772bb4bd
5 changed files with 41 additions and 6 deletions
  1. 1 0
      logic/nodes.go
  2. 11 6
      logic/pro/networkuser.go
  3. 7 0
      models/node.go
  4. 3 0
      netclient/command/commands.go
  5. 19 0
      serverctl/serverctl.go

+ 1 - 0
logic/nodes.go

@@ -475,6 +475,7 @@ func SetNodeDefaults(node *models.Node) {
 	node.SetDefaultIsK8S()
 	node.SetDefaultIsHub()
 	node.SetDefaultConnected()
+	node.SetDefaultACL()
 }
 
 // GetRecordKey - get record key

+ 11 - 6
logic/pro/networkuser.go

@@ -11,13 +11,18 @@ import (
 
 // InitializeNetworkUsers - intializes network users for a given network
 func InitializeNetworkUsers(network string) error {
-	newNetUserMap := make(promodels.NetworkUserMap)
-	netUserData, err := json.Marshal(newNetUserMap)
-	if err != nil {
-		return err
-	}
 
-	return database.Insert(network, string(netUserData), database.NETWORK_USER_TABLE_NAME)
+	_, err := database.FetchRecord(database.NETWORK_USER_TABLE_NAME, network)
+	if err != nil && database.IsEmptyRecord(err) {
+		newNetUserMap := make(promodels.NetworkUserMap)
+		netUserData, err := json.Marshal(newNetUserMap)
+		if err != nil {
+			return err
+		}
+
+		return database.Insert(network, string(netUserData), database.NETWORK_USER_TABLE_NAME)
+	}
+	return err
 }
 
 // GetNetworkUsers - gets the network users table

+ 7 - 0
models/node.go

@@ -142,6 +142,13 @@ func (node *Node) SetDefaultConnected() {
 	}
 }
 
+// Node.SetDefaultACL
+func (node *Node) SetDefaultACL() {
+	if node.DefaultACL == "" {
+		node.DefaultACL = "yes"
+	}
+}
+
 // Node.SetDefaultMTU - sets default MTU of a node
 func (node *Node) SetDefaultMTU() {
 	if node.MTU == 0 {

+ 3 - 0
netclient/command/commands.go

@@ -24,6 +24,9 @@ func Join(cfg *config.ClientConfig, privateKey string) error {
 		// Do that before the Joining Network flow by performing the end point auth flow
 		// if performed successfully an access key is obtained from the server and then we
 		// proceed with the usual flow 'pretending' that user is feeded us with an access token
+		if len(cfg.Network) == 0 || cfg.Network == "all" {
+			return fmt.Errorf("no network provided. Specify network with \"-n <net name>\"")
+		}
 		logger.Log(1, "Logging into %s via:", cfg.Network, cfg.SsoServer)
 		err = functions.JoinViaSSo(cfg, privateKey)
 		if err != nil {

+ 19 - 0
serverctl/serverctl.go

@@ -10,6 +10,7 @@ import (
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/logic/acls"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
+	"github.com/gravitl/netmaker/logic/pro"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/servercfg"
 )
@@ -89,6 +90,10 @@ func SetDefaults() error {
 		return err
 	}
 
+	if err := setNetworkDefaults(); err != nil {
+		return err
+	}
+
 	return nil
 }
 
@@ -111,3 +116,17 @@ func setNodeDefaults() error {
 	}
 	return nil
 }
+
+func setNetworkDefaults() error {
+	// upgraded systems will not have NetworkUsers's set, which is why we need this function
+	networks, err := logic.GetNetworks()
+	if err != nil && !database.IsEmptyRecord(err) {
+		return err
+	}
+	for _, net := range networks {
+		if err = pro.InitializeNetworkUsers(net.NetID); err != nil {
+			logger.Log(0, "could not initialize NetworkUsers on network ", net.NetID)
+		}
+	}
+	return nil
+}