mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-20 23:36:18 +08:00
added associate and dissasociate functions
This commit is contained in:
parent
5f5f8be5d5
commit
df614d6d4f
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue