Browse Source

Merge pull request #1963 from gravitl/bugfix_relay_host

Remove hosts from relays before deletion
dcarns 2 years ago
parent
commit
bdf7a542cd
1 changed files with 27 additions and 1 deletions
  1. 27 1
      controllers/hosts.go

+ 27 - 1
controllers/hosts.go

@@ -140,7 +140,33 @@ func deleteHost(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
 		return
 	}
-
+	if currHost.IsRelay {
+		if _, _, err := logic.DeleteHostRelay(hostid); err != nil {
+			logger.Log(0, r.Header.Get("user"), "failed to dissociate host from relays:", err.Error())
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
+			return
+		}
+	}
+	if currHost.IsRelayed {
+		relayHost, err := logic.GetHost(currHost.RelayedBy)
+		if err != nil {
+			logger.Log(0, r.Header.Get("user"), "failed to fetch relay host:", err.Error())
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
+			return
+		}
+		newRelayedHosts := make([]string, 0)
+		for _, relayedHostID := range relayHost.RelayedHosts {
+			if relayedHostID != hostid {
+				newRelayedHosts = append(newRelayedHosts, relayedHostID)
+			}
+		}
+		relayHost.RelayedHosts = newRelayedHosts
+		if err := logic.UpsertHost(relayHost); err != nil {
+			logger.Log(0, r.Header.Get("user"), "failed to update host relays:", err.Error())
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
+			return
+		}
+	}
 	if err = logic.RemoveHost(currHost); err != nil {
 		logger.Log(0, r.Header.Get("user"), "failed to delete a host:", err.Error())
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))