nodes.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package logic
  2. import (
  3. "github.com/gravitl/netmaker/logic"
  4. "github.com/gravitl/netmaker/models"
  5. )
  6. // GetNetworkIngresses - gets the gateways of a network
  7. func GetNetworkIngresses(network string) ([]models.Node, error) {
  8. var ingresses []models.Node
  9. netNodes, err := logic.GetNetworkNodes(network)
  10. if err != nil {
  11. return []models.Node{}, err
  12. }
  13. for i := range netNodes {
  14. if netNodes[i].IsIngressGateway {
  15. ingresses = append(ingresses, netNodes[i])
  16. }
  17. }
  18. return ingresses, nil
  19. }
  20. func GetTagMapWithNodes() (tagNodesMap map[models.TagID][]models.Node) {
  21. tagNodesMap = make(map[models.TagID][]models.Node)
  22. nodes, _ := logic.GetAllNodes()
  23. for _, nodeI := range nodes {
  24. if nodeI.Tags == nil {
  25. continue
  26. }
  27. if nodeI.Mutex != nil {
  28. nodeI.Mutex.Lock()
  29. }
  30. for nodeTagID := range nodeI.Tags {
  31. tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
  32. }
  33. if nodeI.Mutex != nil {
  34. nodeI.Mutex.Unlock()
  35. }
  36. }
  37. return
  38. }
  39. func AddTagMapWithStaticNodesWithUsers(netID models.NetworkID,
  40. tagNodesMap map[models.TagID][]models.Node) map[models.TagID][]models.Node {
  41. extclients, err := logic.GetNetworkExtClients(netID.String())
  42. if err != nil {
  43. return tagNodesMap
  44. }
  45. for _, extclient := range extclients {
  46. tagNodesMap[models.TagID(extclient.ClientID)] = []models.Node{
  47. {
  48. IsStatic: true,
  49. StaticNode: extclient,
  50. },
  51. }
  52. if extclient.Tags == nil {
  53. continue
  54. }
  55. if extclient.Mutex != nil {
  56. extclient.Mutex.Lock()
  57. }
  58. for tagID := range extclient.Tags {
  59. tagNodesMap[tagID] = append(tagNodesMap[tagID], extclient.ConvertToStaticNode())
  60. }
  61. if extclient.Mutex != nil {
  62. extclient.Mutex.Unlock()
  63. }
  64. }
  65. return tagNodesMap
  66. }
  67. func GetNodeIDsWithTag(tagID models.TagID) (ids []string) {
  68. tag, err := GetTag(tagID)
  69. if err != nil {
  70. return
  71. }
  72. nodes, _ := logic.GetNetworkNodes(tag.Network.String())
  73. for _, nodeI := range nodes {
  74. if nodeI.Tags == nil {
  75. continue
  76. }
  77. if nodeI.Mutex != nil {
  78. nodeI.Mutex.Lock()
  79. }
  80. if _, ok := nodeI.Tags[tagID]; ok {
  81. ids = append(ids, nodeI.ID.String())
  82. }
  83. if nodeI.Mutex != nil {
  84. nodeI.Mutex.Unlock()
  85. }
  86. }
  87. return
  88. }
  89. func GetNodesWithTag(tagID models.TagID) map[string]models.Node {
  90. nMap := make(map[string]models.Node)
  91. tag, err := GetTag(tagID)
  92. if err != nil {
  93. return nMap
  94. }
  95. nodes, _ := logic.GetNetworkNodes(tag.Network.String())
  96. for _, nodeI := range nodes {
  97. if nodeI.Tags == nil {
  98. continue
  99. }
  100. if nodeI.Mutex != nil {
  101. nodeI.Mutex.Lock()
  102. }
  103. if _, ok := nodeI.Tags[tagID]; ok {
  104. nMap[nodeI.ID.String()] = nodeI
  105. }
  106. if nodeI.Mutex != nil {
  107. nodeI.Mutex.Unlock()
  108. }
  109. }
  110. return AddStaticNodesWithTag(tag, nMap)
  111. }
  112. func AddStaticNodesWithTag(tag models.Tag, nMap map[string]models.Node) map[string]models.Node {
  113. extclients, err := logic.GetNetworkExtClients(tag.Network.String())
  114. if err != nil {
  115. return nMap
  116. }
  117. for _, extclient := range extclients {
  118. if extclient.RemoteAccessClientID != "" {
  119. continue
  120. }
  121. if extclient.Mutex != nil {
  122. extclient.Mutex.Lock()
  123. }
  124. if _, ok := extclient.Tags[tag.ID]; ok {
  125. nMap[extclient.ClientID] = extclient.ConvertToStaticNode()
  126. }
  127. if extclient.Mutex != nil {
  128. extclient.Mutex.Unlock()
  129. }
  130. }
  131. return nMap
  132. }
  133. func GetStaticNodeWithTag(tagID models.TagID) map[string]models.Node {
  134. nMap := make(map[string]models.Node)
  135. tag, err := GetTag(tagID)
  136. if err != nil {
  137. return nMap
  138. }
  139. extclients, err := logic.GetNetworkExtClients(tag.Network.String())
  140. if err != nil {
  141. return nMap
  142. }
  143. for _, extclient := range extclients {
  144. nMap[extclient.ClientID] = extclient.ConvertToStaticNode()
  145. }
  146. return nMap
  147. }