nodes.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 GetTagMapWithNodesByNetwork(netID models.NetworkID, withStaticNodes bool) (tagNodesMap map[models.TagID][]models.Node) {
  40. tagNodesMap = make(map[models.TagID][]models.Node)
  41. nodes, _ := logic.GetNetworkNodes(netID.String())
  42. for _, nodeI := range nodes {
  43. tagNodesMap[models.TagID(nodeI.ID.String())] = []models.Node{
  44. nodeI,
  45. }
  46. if nodeI.Tags == nil {
  47. continue
  48. }
  49. if nodeI.Mutex != nil {
  50. nodeI.Mutex.Lock()
  51. }
  52. for nodeTagID := range nodeI.Tags {
  53. if nodeTagID == models.TagID(nodeI.ID.String()) {
  54. continue
  55. }
  56. tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
  57. }
  58. if nodeI.Mutex != nil {
  59. nodeI.Mutex.Unlock()
  60. }
  61. }
  62. tagNodesMap["*"] = nodes
  63. if !withStaticNodes {
  64. return
  65. }
  66. return AddTagMapWithStaticNodes(netID, tagNodesMap)
  67. }
  68. func AddTagMapWithStaticNodes(netID models.NetworkID,
  69. tagNodesMap map[models.TagID][]models.Node) map[models.TagID][]models.Node {
  70. extclients, err := logic.GetNetworkExtClients(netID.String())
  71. if err != nil {
  72. return tagNodesMap
  73. }
  74. for _, extclient := range extclients {
  75. if extclient.RemoteAccessClientID != "" {
  76. continue
  77. }
  78. tagNodesMap[models.TagID(extclient.ClientID)] = []models.Node{
  79. {
  80. IsStatic: true,
  81. StaticNode: extclient,
  82. },
  83. }
  84. if extclient.Tags == nil {
  85. continue
  86. }
  87. if extclient.Mutex != nil {
  88. extclient.Mutex.Lock()
  89. }
  90. for tagID := range extclient.Tags {
  91. if tagID == models.TagID(extclient.ClientID) {
  92. continue
  93. }
  94. tagNodesMap[tagID] = append(tagNodesMap[tagID], extclient.ConvertToStaticNode())
  95. tagNodesMap["*"] = append(tagNodesMap["*"], extclient.ConvertToStaticNode())
  96. }
  97. if extclient.Mutex != nil {
  98. extclient.Mutex.Unlock()
  99. }
  100. }
  101. return tagNodesMap
  102. }
  103. func AddTagMapWithStaticNodesWithUsers(netID models.NetworkID,
  104. tagNodesMap map[models.TagID][]models.Node) map[models.TagID][]models.Node {
  105. extclients, err := logic.GetNetworkExtClients(netID.String())
  106. if err != nil {
  107. return tagNodesMap
  108. }
  109. for _, extclient := range extclients {
  110. tagNodesMap[models.TagID(extclient.ClientID)] = []models.Node{
  111. {
  112. IsStatic: true,
  113. StaticNode: extclient,
  114. },
  115. }
  116. if extclient.Tags == nil {
  117. continue
  118. }
  119. if extclient.Mutex != nil {
  120. extclient.Mutex.Lock()
  121. }
  122. for tagID := range extclient.Tags {
  123. tagNodesMap[tagID] = append(tagNodesMap[tagID], extclient.ConvertToStaticNode())
  124. }
  125. if extclient.Mutex != nil {
  126. extclient.Mutex.Unlock()
  127. }
  128. }
  129. return tagNodesMap
  130. }
  131. func GetNodeIDsWithTag(tagID models.TagID) (ids []string) {
  132. tag, err := GetTag(tagID)
  133. if err != nil {
  134. return
  135. }
  136. nodes, _ := logic.GetNetworkNodes(tag.Network.String())
  137. for _, nodeI := range nodes {
  138. if nodeI.Tags == nil {
  139. continue
  140. }
  141. if nodeI.Mutex != nil {
  142. nodeI.Mutex.Lock()
  143. }
  144. if _, ok := nodeI.Tags[tagID]; ok {
  145. ids = append(ids, nodeI.ID.String())
  146. }
  147. if nodeI.Mutex != nil {
  148. nodeI.Mutex.Unlock()
  149. }
  150. }
  151. return
  152. }
  153. func GetNodesWithTag(tagID models.TagID) map[string]models.Node {
  154. nMap := make(map[string]models.Node)
  155. tag, err := GetTag(tagID)
  156. if err != nil {
  157. return nMap
  158. }
  159. nodes, _ := logic.GetNetworkNodes(tag.Network.String())
  160. for _, nodeI := range nodes {
  161. if nodeI.Tags == nil {
  162. continue
  163. }
  164. if nodeI.Mutex != nil {
  165. nodeI.Mutex.Lock()
  166. }
  167. if _, ok := nodeI.Tags[tagID]; ok {
  168. nMap[nodeI.ID.String()] = nodeI
  169. }
  170. if nodeI.Mutex != nil {
  171. nodeI.Mutex.Unlock()
  172. }
  173. }
  174. return AddStaticNodesWithTag(tag, nMap)
  175. }
  176. func AddStaticNodesWithTag(tag models.Tag, nMap map[string]models.Node) map[string]models.Node {
  177. extclients, err := logic.GetNetworkExtClients(tag.Network.String())
  178. if err != nil {
  179. return nMap
  180. }
  181. for _, extclient := range extclients {
  182. if extclient.RemoteAccessClientID != "" {
  183. continue
  184. }
  185. if extclient.Mutex != nil {
  186. extclient.Mutex.Lock()
  187. }
  188. if _, ok := extclient.Tags[tag.ID]; ok {
  189. nMap[extclient.ClientID] = extclient.ConvertToStaticNode()
  190. }
  191. if extclient.Mutex != nil {
  192. extclient.Mutex.Unlock()
  193. }
  194. }
  195. return nMap
  196. }
  197. func GetStaticNodeWithTag(tagID models.TagID) map[string]models.Node {
  198. nMap := make(map[string]models.Node)
  199. tag, err := GetTag(tagID)
  200. if err != nil {
  201. return nMap
  202. }
  203. extclients, err := logic.GetNetworkExtClients(tag.Network.String())
  204. if err != nil {
  205. return nMap
  206. }
  207. for _, extclient := range extclients {
  208. nMap[extclient.ClientID] = extclient.ConvertToStaticNode()
  209. }
  210. return nMap
  211. }