dns.go 2.2 KB

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