dns.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package dnslogic
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/functions"
  6. "github.com/gravitl/netmaker/models"
  7. "github.com/gravitl/netmaker/servercfg"
  8. "github.com/txn2/txeh"
  9. )
  10. // SetDNS - sets the dns on file
  11. func SetDNS() error {
  12. hostfile := txeh.Hosts{}
  13. var corefilestring string
  14. networks, err := models.GetNetworks()
  15. if err != nil && !database.IsEmptyRecord(err) {
  16. return err
  17. }
  18. for _, net := range networks {
  19. corefilestring = corefilestring + net.NetID + " "
  20. dns, err := GetDNS(net.NetID)
  21. if err != nil && !database.IsEmptyRecord(err) {
  22. return err
  23. }
  24. for _, entry := range dns {
  25. hostfile.AddHost(entry.Address, entry.Name+"."+entry.Network)
  26. }
  27. }
  28. if corefilestring == "" {
  29. corefilestring = "example.com"
  30. }
  31. err = hostfile.SaveAs("./config/dnsconfig/netmaker.hosts")
  32. if err != nil {
  33. return err
  34. }
  35. if servercfg.IsSplitDNS() {
  36. err = functions.SetCorefile(corefilestring)
  37. }
  38. return err
  39. }
  40. // GetDNS - gets the DNS of a current network
  41. func GetDNS(network string) ([]models.DNSEntry, error) {
  42. var dns []models.DNSEntry
  43. dns, err := GetNodeDNS(network)
  44. if err != nil && !database.IsEmptyRecord(err) {
  45. return dns, err
  46. }
  47. customdns, err := GetCustomDNS(network)
  48. if err != nil && !database.IsEmptyRecord(err) {
  49. return dns, err
  50. }
  51. dns = append(dns, customdns...)
  52. return dns, nil
  53. }
  54. // GetNodeDNS - gets the DNS of a network node
  55. func GetNodeDNS(network string) ([]models.DNSEntry, error) {
  56. var dns []models.DNSEntry
  57. collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
  58. if err != nil {
  59. return dns, err
  60. }
  61. for _, value := range collection {
  62. var entry models.DNSEntry
  63. var node models.Node
  64. if err = json.Unmarshal([]byte(value), &node); err != nil {
  65. continue
  66. }
  67. if err = json.Unmarshal([]byte(value), &entry); node.Network == network && err == nil {
  68. dns = append(dns, entry)
  69. }
  70. }
  71. return dns, nil
  72. }
  73. // GetCustomDNS - gets the custom DNS of a network
  74. func GetCustomDNS(network string) ([]models.DNSEntry, error) {
  75. var dns []models.DNSEntry
  76. collection, err := database.FetchRecords(database.DNS_TABLE_NAME)
  77. if err != nil {
  78. return dns, err
  79. }
  80. for _, value := range collection { // filter for entries based on network
  81. var entry models.DNSEntry
  82. if err := json.Unmarshal([]byte(value), &entry); err != nil {
  83. continue
  84. }
  85. if entry.Network == network {
  86. dns = append(dns, entry)
  87. }
  88. }
  89. return dns, err
  90. }