added associate and dissasociate functions

This commit is contained in:
0xdcarns 2022-12-23 13:03:33 -05:00
parent 5f5f8be5d5
commit df614d6d4f
3 changed files with 30 additions and 12 deletions

View file

@ -8,6 +8,7 @@ import (
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
)
type hostNetworksUpdatePayload struct {
@ -154,6 +155,11 @@ func updateHostNetworks(w http.ResponseWriter, r *http.Request) {
}
// TODO: add and remove hosts to networks (nodes)
if err = logic.UpdateHostNetworks(currHost, servercfg.GetServer(), payload.Networks); err != nil {
logger.Log(0, r.Header.Get("user"), "failed to update host networks:", err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
logger.Log(2, r.Header.Get("user"), "updated host networks", currHost.Name)
w.WriteHeader(http.StatusOK)

View file

@ -154,7 +154,7 @@ func RemoveHost(h *models.Host) error {
id := h.Nodes[i]
n, err := GetNodeByID(id)
if err == nil {
if err = DeleteNodeByID(&n); err != nil {
if err = DissasociateNodeFromHost(&n, h); err != nil {
return err // must remove associated nodes before removing a host
}
}
@ -164,7 +164,7 @@ func RemoveHost(h *models.Host) error {
}
// UpdateHostNetworks - updates a given host's networks
func UpdateHostNetworks(h *models.Host, nets []string) error {
func UpdateHostNetworks(h *models.Host, server string, nets []string) error {
if len(h.Nodes) > 0 {
for i := range h.Nodes {
n, err := GetNodeByID(h.Nodes[i])
@ -180,7 +180,7 @@ func UpdateHostNetworks(h *models.Host, nets []string) error {
}
}
if !found { // remove the node/host from that network
if err = DeleteNodeByID(&n); err != nil {
if err = DissasociateNodeFromHost(&n, h); err != nil {
return err
}
}
@ -192,8 +192,13 @@ func UpdateHostNetworks(h *models.Host, nets []string) error {
for i := range nets {
// create a node for each non zero network remaining
if len(nets[i]) > 0 {
// TODO create a node with given hostid
logger.Log(0, "I will create a node here")
newNode := models.Node{}
newNode.Server = server
newNode.Network = nets[i]
if err := AssociateNodeToHost(&newNode, h); err != nil {
return err
}
logger.Log(1, "added new node", newNode.ID.String(), "to host", h.Name)
}
}
@ -201,6 +206,7 @@ func UpdateHostNetworks(h *models.Host, nets []string) error {
}
// AssociateNodeToHost - associates and creates a node with a given host
// should be the only way nodes get created as of 0.18
func AssociateNodeToHost(n *models.Node, h *models.Host) error {
if len(h.ID.String()) == 0 || h.ID == uuid.Nil {
return ErrInvalidHostID
@ -215,6 +221,7 @@ func AssociateNodeToHost(n *models.Node, h *models.Host) error {
}
// DissasociateNodeFromHost - deletes a node and removes from host nodes
// should be the only way nodes are deleted as of 0.18
func DissasociateNodeFromHost(n *models.Node, h *models.Host) error {
if len(h.ID.String()) == 0 || h.ID == uuid.Nil {
return ErrInvalidHostID
@ -237,6 +244,9 @@ func DissasociateNodeFromHost(n *models.Node, h *models.Host) error {
return fmt.Errorf("node %s, not found in host, %s", n.ID.String(), h.ID.String())
}
}
if err := deleteNodeByID(n); err != nil {
return err
}
h.Nodes = RemoveStringSlice(h.Nodes, index)
return UpsertHost(h)
}

View file

@ -85,19 +85,22 @@ func UpdateNode(currentNode *models.Node, newNode *models.Node) error {
// DeleteNode - marks node for deletion if called by UI or deletes node if called by node
func DeleteNode(node *models.Node, purge bool) error {
if !purge {
newnode := node
newnode := *node
newnode.PendingDelete = true
newnode.Action = models.NODE_DELETE
if err := UpdateNode(node, newnode); err != nil {
if err := UpdateNode(node, &newnode); err != nil {
return err
}
return nil
}
if err := DeleteNodeByID(node); err != nil {
host, err := GetHost(node.HostID.String())
if err != nil {
return err
}
if err := DissasociateNodeFromHost(node, host); err != nil {
return err
}
if servercfg.Is_EE {
host, _ := GetHost(node.HostID.String())
if err := EnterpriseResetAllPeersFailovers(node.ID.String(), node.Network); err != nil {
logger.Log(0, "failed to reset failover lists during node delete for node", host.Name, node.Network)
}
@ -106,8 +109,8 @@ func DeleteNode(node *models.Node, purge bool) error {
return nil
}
// DeleteNodeByID - deletes a node from database
func DeleteNodeByID(node *models.Node) error {
// deleteNodeByID - deletes a node from database
func deleteNodeByID(node *models.Node) error {
var err error
var key = node.ID.String()
//delete any ext clients as required
@ -620,7 +623,6 @@ func PurgePendingNodes(ctx context.Context) {
} else {
logger.Log(0, "purged node ", node.ID.String())
}
}
}
}