Merge pull request #1947 from gravitl/GRA-985/host_delete_logic

Gra 985/host delete logic
This commit is contained in:
dcarns 2023-01-17 15:42:35 -05:00 committed by GitHub
commit 394f386f32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 3 deletions

View file

@ -154,7 +154,12 @@ func deleteHost(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
// TODO: publish host update with delete action using MQ
if err = mq.HostUpdate(&models.HostUpdate{
Action: models.DeleteHost,
Host: *currHost,
}); err != nil {
logger.Log(0, r.Header.Get("user"), "failed to send delete host update: ", currHost.ID.String(), err.Error())
}
if err = mq.DeleteMqClient(currHost.ID.String()); err != nil {
logger.Log(0, "error removing DynSec credentials for host:", currHost.Name, err.Error())

View file

@ -151,6 +151,11 @@ func RemoveHost(h *models.Host) error {
return database.DeleteRecord(database.HOSTS_TABLE_NAME, h.ID.String())
}
// RemoveHostByID - removes a given host by id from server
func RemoveHostByID(hostID string) error {
return database.DeleteRecord(database.HOSTS_TABLE_NAME, hostID)
}
// UpdateHostNetworks - updates a given host's networks
func UpdateHostNetworks(h *models.Host, server string, nets []string) error {
if len(h.Nodes) > 0 {
@ -241,6 +246,28 @@ func DissasociateNodeFromHost(n *models.Node, h *models.Host) error {
return UpsertHost(h)
}
// DisassociateAllNodesFromHost - deletes all nodes of the host
func DisassociateAllNodesFromHost(hostID string) error {
host, err := GetHost(hostID)
if err != nil {
return err
}
for _, nodeID := range host.Nodes {
node, err := GetNodeByID(nodeID)
if err != nil {
logger.Log(0, "failed to get host node", err.Error())
continue
}
if err := DeleteNode(&node, true); err != nil {
logger.Log(0, "failed to delete node", node.ID.String(), err.Error())
continue
}
logger.Log(3, "deleted node", node.ID.String(), "of host", host.ID.String())
}
host.Nodes = []string{}
return UpsertHost(host)
}
// GetDefaultHosts - retrieve all hosts marked as default from DB
func GetDefaultHosts() []models.Host {
defaultHostList := []models.Host{}

View file

@ -152,8 +152,15 @@ func UpdateHost(client mqtt.Client, msg mqtt.Message) {
return
}
case models.DeleteHost:
// TODO: logic to delete host on the server
if err := logic.DisassociateAllNodesFromHost(currentHost.ID.String()); err != nil {
logger.Log(0, "failed to delete all nodes of host: ", currentHost.ID.String(), err.Error())
return
}
if err := logic.RemoveHostByID(currentHost.ID.String()); err != nil {
logger.Log(0, "failed to delete host: ", currentHost.ID.String(), err.Error())
return
}
sendPeerUpdate = true
}
if sendPeerUpdate {
err := PublishPeerUpdate()