mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-20 15:26:04 +08:00
node update fix, nil pointer errors fix
This commit is contained in:
parent
950fd3c290
commit
9f0ef1628c
|
@ -48,9 +48,9 @@ func GetNetworkNodes(network string) ([]models.Node, error) {
|
|||
|
||||
// UpdateNode - takes a node and updates another node with it's values
|
||||
func UpdateNode(currentNode *models.Node, newNode *models.Node) error {
|
||||
if newNode.Address.String() != currentNode.Address.String() {
|
||||
if newNode.Address.IP.String() != currentNode.Address.IP.String() {
|
||||
if network, err := GetParentNetwork(newNode.Network); err == nil {
|
||||
if !IsAddressInCIDR(newNode.Address.String(), network.AddressRange) {
|
||||
if !IsAddressInCIDR(newNode.Address.IP.String(), network.AddressRange) {
|
||||
return fmt.Errorf("invalid address provided; out of network range for node %s", newNode.ID)
|
||||
}
|
||||
}
|
||||
|
@ -561,11 +561,7 @@ func createNode(node *models.Node) error {
|
|||
if node.Address.IP, err = UniqueAddress(node.Network, false); err != nil {
|
||||
return err
|
||||
}
|
||||
_, cidr, err := net.ParseCIDR(parentNetwork.AddressRange)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
node.Address.Mask = net.CIDRMask(cidr.Mask.Size())
|
||||
node.Address.Mask = net.CIDRMask(32, 32)
|
||||
}
|
||||
} else if !IsIPUnique(node.Network, node.Address.String(), database.NODES_TABLE_NAME, false) {
|
||||
return fmt.Errorf("invalid address: ipv4 " + node.Address.String() + " is not unique")
|
||||
|
@ -575,11 +571,7 @@ func createNode(node *models.Node) error {
|
|||
if node.Address6.IP, err = UniqueAddress6(node.Network, false); err != nil {
|
||||
return err
|
||||
}
|
||||
_, cidr, err := net.ParseCIDR(parentNetwork.AddressRange6)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
node.Address6.Mask = net.CIDRMask(cidr.Mask.Size())
|
||||
node.Address6.Mask = net.CIDRMask(128, 128)
|
||||
}
|
||||
} else if !IsIPUnique(node.Network, node.Address6.String(), database.NODES_TABLE_NAME, true) {
|
||||
return fmt.Errorf("invalid address: ipv6 " + node.Address6.String() + " is not unique")
|
||||
|
|
|
@ -207,6 +207,9 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
|
|||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if !node.Connected {
|
||||
continue
|
||||
}
|
||||
hostPeerUpdate.Network[node.Network] = models.NetworkInfo{
|
||||
DNS: getPeerDNS(node.Network),
|
||||
}
|
||||
|
@ -216,18 +219,19 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
|
|||
return models.HostPeerUpdate{}, err
|
||||
}
|
||||
for _, peer := range currentPeers {
|
||||
var peerConfig wgtypes.PeerConfig
|
||||
peerHost, err := GetHost(peer.HostID.String())
|
||||
if err != nil {
|
||||
log.Println("no peer host", err)
|
||||
return models.HostPeerUpdate{}, err
|
||||
}
|
||||
if peer.ID == node.ID {
|
||||
log.Println("peer update, skipping self")
|
||||
//skip yourself
|
||||
|
||||
continue
|
||||
}
|
||||
var peerConfig wgtypes.PeerConfig
|
||||
peerHost, err := GetHost(peer.HostID.String())
|
||||
if err != nil {
|
||||
log.Println("no peer host", err)
|
||||
return models.HostPeerUpdate{}, err
|
||||
}
|
||||
|
||||
if !peer.Connected {
|
||||
log.Println("peer update, skipping unconnected node")
|
||||
//skip unconnected nodes
|
||||
|
@ -847,6 +851,7 @@ func getPeerDNS(network string) string {
|
|||
host, err := GetHost(node.HostID.String())
|
||||
if err != nil {
|
||||
logger.Log(0, "error retrieving host for node", node.ID.String(), err.Error())
|
||||
continue
|
||||
}
|
||||
dns = dns + fmt.Sprintf("%s %s.%s\n", nodes[i].Address, host.Name, nodes[i].Network)
|
||||
}
|
||||
|
|
|
@ -34,7 +34,8 @@ func CheckZombies(newnode *models.Node, mac net.HardwareAddr) {
|
|||
for _, node := range nodes {
|
||||
host, err := GetHost(node.HostID.String())
|
||||
if err != nil {
|
||||
|
||||
// should we delete the node if host not found ??
|
||||
continue
|
||||
}
|
||||
if host.MacAddress.String() == mac.String() {
|
||||
logger.Log(0, "adding ", node.ID.String(), " to zombie list")
|
||||
|
|
|
@ -365,7 +365,7 @@ func (node *LegacyNode) SetDefaultFailover() {
|
|||
// Node.Fill - fills other node data into calling node data if not set on calling node
|
||||
func (newNode *Node) Fill(currentNode *Node) { // TODO add new field for nftables present
|
||||
newNode.ID = currentNode.ID
|
||||
|
||||
newNode.HostID = currentNode.HostID
|
||||
// Revisit the logic for boolean values
|
||||
// TODO ---- !!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
// TODO ---- !!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
@ -499,17 +499,23 @@ func (ln *LegacyNode) ConvertToNewNode() (*Host, *Node) {
|
|||
host.HostPass = ln.Password
|
||||
host.Name = ln.Name
|
||||
host.ListenPort = int(ln.ListenPort)
|
||||
_, cidr, _ := net.ParseCIDR(ln.LocalAddress)
|
||||
_, cidr, _ = net.ParseCIDR(ln.LocalRange)
|
||||
host.LocalRange = *cidr
|
||||
if _, cidr, err := net.ParseCIDR(ln.LocalAddress); err == nil {
|
||||
host.LocalRange = *cidr
|
||||
} else {
|
||||
if _, cidr, err := net.ParseCIDR(ln.LocalRange); err == nil {
|
||||
host.LocalRange = *cidr
|
||||
}
|
||||
}
|
||||
host.LocalListenPort = int(ln.LocalListenPort)
|
||||
host.ProxyListenPort = int(ln.ProxyListenPort)
|
||||
host.MTU = int(ln.MTU)
|
||||
host.PublicKey, _ = wgtypes.ParseKey(ln.PublicKey)
|
||||
host.MacAddress, _ = net.ParseMAC(ln.MacAddress)
|
||||
host.TrafficKeyPublic = ln.TrafficKeys.Mine
|
||||
gateway, _ := net.ResolveUDPAddr("udp", ln.InternetGateway)
|
||||
host.InternetGateway = *gateway
|
||||
gateway, err := net.ResolveUDPAddr("udp", ln.InternetGateway)
|
||||
if err == nil {
|
||||
host.InternetGateway = *gateway
|
||||
}
|
||||
id, _ := uuid.Parse(ln.ID)
|
||||
host.Nodes = append(host.Nodes, id.String())
|
||||
host.Interfaces = ln.Interfaces
|
||||
|
@ -519,16 +525,26 @@ func (ln *LegacyNode) ConvertToNewNode() (*Host, *Node) {
|
|||
id, _ := uuid.Parse(ln.ID)
|
||||
node.ID = id
|
||||
node.Network = ln.Network
|
||||
_, cidr, _ := net.ParseCIDR(ln.NetworkSettings.AddressRange)
|
||||
node.NetworkRange = *cidr
|
||||
_, cidr, _ = net.ParseCIDR(ln.NetworkSettings.AddressRange6)
|
||||
node.NetworkRange6 = *cidr
|
||||
if _, cidr, err := net.ParseCIDR(ln.NetworkSettings.AddressRange); err == nil {
|
||||
node.NetworkRange = *cidr
|
||||
}
|
||||
if _, cidr, err := net.ParseCIDR(ln.NetworkSettings.AddressRange6); err == nil {
|
||||
node.NetworkRange6 = *cidr
|
||||
}
|
||||
node.Server = ln.Server
|
||||
node.Connected = parseBool(ln.Connected)
|
||||
_, cidr, _ = net.ParseCIDR(ln.Address)
|
||||
node.Address = *cidr
|
||||
_, cidr, _ = net.ParseCIDR(ln.Address6)
|
||||
node.Address6 = *cidr
|
||||
if ln.Address != "" {
|
||||
node.Address = net.IPNet{
|
||||
IP: net.ParseIP(ln.Address),
|
||||
Mask: net.CIDRMask(32, 32),
|
||||
}
|
||||
}
|
||||
if ln.Address6 != "" {
|
||||
node.Address = net.IPNet{
|
||||
IP: net.ParseIP(ln.Address6),
|
||||
Mask: net.CIDRMask(128, 128),
|
||||
}
|
||||
}
|
||||
node.PostUp = ln.PostUp
|
||||
node.PostDown = ln.PostDown
|
||||
node.Action = ln.Action
|
||||
|
|
|
@ -90,19 +90,20 @@ func UpdateNode(client mqtt.Client, msg mqtt.Message) {
|
|||
logger.Log(1, "failed to decrypt message for node ", id, decryptErr.Error())
|
||||
return
|
||||
}
|
||||
var newNode models.Node
|
||||
if err := json.Unmarshal(decrypted, &newNode); err != nil {
|
||||
var oldNode models.LegacyNode
|
||||
if err := json.Unmarshal(decrypted, &oldNode); err != nil {
|
||||
logger.Log(1, "error unmarshaling payload ", err.Error())
|
||||
return
|
||||
}
|
||||
ifaceDelta := logic.IfaceDelta(¤tNode, &newNode)
|
||||
_, newNode := oldNode.ConvertToNewNode()
|
||||
ifaceDelta := logic.IfaceDelta(¤tNode, newNode)
|
||||
if servercfg.Is_EE && ifaceDelta {
|
||||
if err = logic.EnterpriseResetAllPeersFailovers(currentNode.ID.String(), currentNode.Network); err != nil {
|
||||
logger.Log(1, "failed to reset failover list during node update", currentNode.ID.String(), currentNode.Network)
|
||||
}
|
||||
}
|
||||
newNode.SetLastCheckIn()
|
||||
if err := logic.UpdateNode(¤tNode, &newNode); err != nil {
|
||||
if err := logic.UpdateNode(¤tNode, newNode); err != nil {
|
||||
logger.Log(1, "error saving node", err.Error())
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue