mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
publish dns on node creation
This commit is contained in:
@@ -671,6 +671,21 @@ func createNode(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
//runForceServerUpdate(&data.Node, true)
|
//runForceServerUpdate(&data.Node, true)
|
||||||
|
dns := models.DNSUpdate{
|
||||||
|
Action: models.DNSInsert,
|
||||||
|
Address: data.Node.Address.IP.String(),
|
||||||
|
Name: data.Host.Name + data.Node.Network,
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
//publish new node dns entry to all nodes on network
|
||||||
|
if err := mq.PublishDNSUpdate(data.Node.Network, dns); err != nil {
|
||||||
|
logger.Log(1, "failed to publish dns update on node creation", err.Error())
|
||||||
|
}
|
||||||
|
//publish add dns records for network to new node
|
||||||
|
if err := mq.PublishAllDNS(&data.Node); err != nil {
|
||||||
|
logger.Log(1, "failed to publish dns update on node creation", err.Error())
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// == EGRESS ==
|
// == EGRESS ==
|
||||||
|
@@ -160,6 +160,84 @@ func ServerStartNotify() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PublishDNSUpdate(network string, dns models.DNSUpdate) error {
|
||||||
|
nodes, err := logic.GetNetworkNodes(network)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, node := range nodes {
|
||||||
|
host, err := logic.GetHost(node.HostID.String())
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
data, err := json.Marshal(dns)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "failed to encode dns data for node", node.ID.String(), err.Error())
|
||||||
|
}
|
||||||
|
if err := publish(host, "network/"+host.ID.String()+"/dns", data); err != nil {
|
||||||
|
logger.Log(0, "error publishing dns update to host", host.ID.String(), err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
logger.Log(3, "published dns update to host", host.ID.String())
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func PublishAllDNS(newnode *models.Node) error {
|
||||||
|
alldns := []models.DNSUpdate{}
|
||||||
|
dns := models.DNSUpdate{}
|
||||||
|
newnodeHost, err := logic.GetHost(newnode.HostID.String())
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error retrieving host for dns update %w", err)
|
||||||
|
}
|
||||||
|
nodes, err := logic.GetNetworkNodes(newnode.Network)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, node := range nodes {
|
||||||
|
if node.ID == newnode.ID {
|
||||||
|
//skip self
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
host, err := logic.GetHost(node.HostID.String())
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if node.Address.IP != nil {
|
||||||
|
dns.Action = models.DNSInsert
|
||||||
|
dns.Name = host.Name + "." + node.Network
|
||||||
|
dns.Address = node.Address.IP.String()
|
||||||
|
alldns = append(alldns, dns)
|
||||||
|
}
|
||||||
|
if node.Address6.IP != nil {
|
||||||
|
dns.Action = models.DNSInsert
|
||||||
|
dns.Name = host.Name + "." + node.Network
|
||||||
|
dns.Address = node.Address6.IP.String()
|
||||||
|
alldns = append(alldns, dns)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
entries, err := logic.GetCustomDNS(newnode.Network)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error retrieving custom dns entries", err.Error())
|
||||||
|
}
|
||||||
|
for _, entry := range entries {
|
||||||
|
dns.Action = models.DNSInsert
|
||||||
|
dns.Address = entry.Address
|
||||||
|
dns.Name = entry.Name
|
||||||
|
alldns = append(alldns, dns)
|
||||||
|
}
|
||||||
|
data, err := json.Marshal(alldns)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error encoding dnd data %w", err)
|
||||||
|
}
|
||||||
|
if err := publish(newnodeHost, "network/"+newnodeHost.ID.String()+"/fulldns", data); err != nil {
|
||||||
|
return fmt.Errorf("error publish full dns update to %s, %w", newnodeHost.ID.String(), err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// function to collect and store metrics for server nodes
|
// function to collect and store metrics for server nodes
|
||||||
//func collectServerMetrics(networks []models.Network) {
|
//func collectServerMetrics(networks []models.Network) {
|
||||||
// if !servercfg.Is_EE {
|
// if !servercfg.Is_EE {
|
||||||
|
Reference in New Issue
Block a user