common.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package controller
  2. import (
  3. "encoding/json"
  4. "strings"
  5. "github.com/gravitl/netmaker/database"
  6. "github.com/gravitl/netmaker/functions"
  7. "github.com/gravitl/netmaker/logic"
  8. "github.com/gravitl/netmaker/models"
  9. "github.com/gravitl/netmaker/servercfg"
  10. )
  11. /**
  12. * If being deleted by server, create a record in the DELETED_NODES_TABLE for the client to find
  13. * If being deleted by the client, delete completely
  14. */
  15. func DeleteNode(key string, exterminate bool) error {
  16. var err error
  17. if !exterminate {
  18. args := strings.Split(key, "###")
  19. node, err := GetNode(args[0], args[1])
  20. if err != nil {
  21. return err
  22. }
  23. node.Action = models.NODE_DELETE
  24. nodedata, err := json.Marshal(&node)
  25. if err != nil {
  26. return err
  27. }
  28. err = database.Insert(key, string(nodedata), database.DELETED_NODES_TABLE_NAME)
  29. if err != nil {
  30. return err
  31. }
  32. } else {
  33. if err := database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, key); err != nil {
  34. functions.PrintUserLog("", err.Error(), 2)
  35. }
  36. }
  37. if err := database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil {
  38. return err
  39. }
  40. if servercfg.IsDNSMode() {
  41. err = logic.SetDNS()
  42. }
  43. return err
  44. }
  45. func DeleteIntClient(clientid string) (bool, error) {
  46. err := database.DeleteRecord(database.INT_CLIENTS_TABLE_NAME, clientid)
  47. if err != nil {
  48. return false, err
  49. }
  50. return true, nil
  51. }
  52. func GetNode(macaddress string, network string) (models.Node, error) {
  53. var node models.Node
  54. key, err := logic.GetRecordKey(macaddress, network)
  55. if err != nil {
  56. return node, err
  57. }
  58. data, err := database.FetchRecord(database.NODES_TABLE_NAME, key)
  59. if err != nil {
  60. if data == "" {
  61. data, err = database.FetchRecord(database.DELETED_NODES_TABLE_NAME, key)
  62. err = json.Unmarshal([]byte(data), &node)
  63. }
  64. return node, err
  65. }
  66. if err = json.Unmarshal([]byte(data), &node); err != nil {
  67. return node, err
  68. }
  69. logic.SetNodeDefaults(&node)
  70. return node, err
  71. }
  72. func GetIntClient(clientid string) (models.IntClient, error) {
  73. var client models.IntClient
  74. value, err := database.FetchRecord(database.INT_CLIENTS_TABLE_NAME, clientid)
  75. if err != nil {
  76. return client, err
  77. }
  78. if err = json.Unmarshal([]byte(value), &client); err != nil {
  79. return models.IntClient{}, err
  80. }
  81. return client, nil
  82. }