From 89136f483214222db1fba47128c521c43f5aaa79 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 10:48:33 -0500 Subject: [PATCH] publish dns update on ext client deletion --- controllers/ext_client.go | 6 ++++++ models/dnsEntry.go | 1 + mq/publishers.go | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index ab55a905..a9c54b61 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -392,6 +392,9 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { if err != nil { logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error()) } + if err := mq.PublishExtCLientDNS(&extclient); err != nil { + logger.Log(1, "error publishing extclient dns", err.Error()) + } } // swagger:route PUT /api/extclients/{network}/{clientid} ext_client updateExtClient @@ -558,6 +561,9 @@ func deleteExtClient(w http.ResponseWriter, r *http.Request) { if err != nil { logger.Log(1, "error setting ext peers on "+ingressnode.ID.String()+": "+err.Error()) } + if err := mq.PublishDeleteExtClientDNS(&extclient); err != nil { + logger.Log(1, "error publishing dns update for extclient deletion", err.Error()) + } logger.Log(0, r.Header.Get("user"), "Deleted extclient client", params["clientid"], "from network", params["network"]) diff --git a/models/dnsEntry.go b/models/dnsEntry.go index df08373f..e89ab3f7 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -5,6 +5,7 @@ type DNSUpdateAction int const ( DNSDelete = iota + DNSDeleteByName DNSInsert DNSReplace ) diff --git a/mq/publishers.go b/mq/publishers.go index 9d2cdf9f..6f61711b 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -278,6 +278,44 @@ func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { return nil } +func PublishExtCLientDNS(client *models.ExtClient) error { + var err4, err6 error + dns := models.DNSUpdate{ + Action: models.DNSInsert, + Name: client.ClientID + "." + client.Network, + Address: client.Address, + } + if client.Address != "" { + dns.Address = client.Address + err4 = PublishDNSUpdate(client.Network, dns) + } + if client.Address6 != "" { + dns.Address = client.Address6 + err6 = PublishDNSUpdate(client.Network, dns) + } + if err4 != nil && err6 != nil { + return fmt.Errorf("error publishing extclient dns update %w %w", err4, err6) + } + if err4 != nil { + return fmt.Errorf("error publishing extclient dns update %w", err4) + } + if err6 != nil { + return fmt.Errorf("error publishing extclient dns update %w", err6) + } + return nil +} + +func PublishDeleteExtClientDNS(client *models.ExtClient) error { + dns := models.DNSUpdate{ + Action: models.DNSDeleteByName, + Name: client.ClientID, + } + if err := PublishDNSUpdate(client.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 {