From a24263281c34e5f8443e95d4da4de2c0796e8ca7 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 09:01:45 -0500 Subject: [PATCH] publish dns update on node ip change --- controllers/node.go | 3 +++ mq/publishers.go | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/controllers/node.go b/controllers/node.go index eb697ca5..17abc00e 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -967,6 +967,9 @@ func updateNode(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(apiNode) runUpdates(newNode, ifaceDelta) + if err := mq.PublishReplaceDNS(¤tNode, newNode, host); err != nil { + logger.Log(1, "failed to publish dns update", err.Error()) + } } // swagger:route DELETE /api/nodes/{network}/{nodeid} nodes deleteNode diff --git a/mq/publishers.go b/mq/publishers.go index 9cd47a5f..9d2cdf9f 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -258,6 +258,26 @@ func PublishDNSDelete(node *models.Node, host *models.Host) error { return nil } +func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { + dns := models.DNSUpdate{ + Action: models.DNSReplace, + Name: host.Name + "." + oldNode.Network, + } + if !oldNode.Address.IP.Equal(newNode.Address.IP) { + dns.Address = newNode.Address.IP.String() + if err := PublishDNSUpdate(oldNode.Network, dns); err != nil { + return err + } + } + if !oldNode.Address6.IP.Equal(newNode.Address6.IP) { + dns.Address = newNode.Address6.IP.String() + if err := PublishDNSUpdate(oldNode.Network, dns); err != nil { + return err + } + } + return nil +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE {