Browse Source

publish dns on node deletion

Matthew R Kasun 2 years ago
parent
commit
af66356061
3 changed files with 31 additions and 1 deletions
  1. 3 0
      controllers/hosts.go
  2. 8 1
      controllers/node.go
  3. 20 0
      mq/publishers.go

+ 3 - 0
controllers/hosts.go

@@ -279,6 +279,9 @@ func deleteHostFromNetwork(w http.ResponseWriter, r *http.Request) {
 		if err := mq.PublishPeerUpdate(); err != nil {
 			logger.Log(1, "error publishing peer update ", err.Error())
 		}
+		if err := mq.PublishDNSDelete(node, currHost); err != nil {
+			logger.Log(1, "error publishing dns update", err.Error())
+		}
 	}()
 	logger.Log(2, r.Header.Get("user"), fmt.Sprintf("removed host %s from network %s", currHost.Name, network))
 	w.WriteHeader(http.StatusOK)

+ 8 - 1
controllers/node.go

@@ -674,7 +674,7 @@ func createNode(w http.ResponseWriter, r *http.Request) {
 	go func() {
 		dns := models.DNSUpdate{
 			Action: models.DNSInsert,
-			Name:   data.Host.Name + data.Node.Network,
+			Name:   data.Host.Name + "." + data.Node.Network,
 		}
 		if data.Node.Address.IP != nil {
 			dns.Address = data.Node.Address.IP.String()
@@ -1014,6 +1014,13 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 		if err := mq.PublishPeerUpdate(); err != nil {
 			logger.Log(1, "error publishing peer update ", err.Error())
 		}
+		host, err := logic.GetHost(node.HostID.String())
+		if err != nil {
+			logger.Log(1, "failed to retrieve host for node", node.ID.String(), err.Error())
+		}
+		if err := mq.PublishDNSDelete(&node, host); err != nil {
+			logger.Log(1, "error publishing dns update", err.Error())
+		}
 	}()
 }
 

+ 20 - 0
mq/publishers.go

@@ -238,6 +238,26 @@ func PublishAllDNS(newnode *models.Node) error {
 	return nil
 }
 
+func PublishDNSDelete(node *models.Node, host *models.Host) error {
+	dns := models.DNSUpdate{
+		Action: models.DNSDelete,
+		Name:   host.Name + "." + node.Network,
+	}
+	if node.Address.IP != nil {
+		dns.Address = node.Address.IP.String()
+		if err := PublishDNSUpdate(node.Network, dns); err != nil {
+			return fmt.Errorf("dns update node deletion %w", err)
+		}
+	}
+	if node.Address6.IP != nil {
+		dns.Address = node.Address6.IP.String()
+		if err := PublishDNSUpdate(node.Network, dns); err != nil {
+			return fmt.Errorf("dns update node deletion %w", err)
+		}
+	}
+	return nil
+}
+
 // function to collect and store metrics for server nodes
 //func collectServerMetrics(networks []models.Network) {
 //	if !servercfg.Is_EE {