egress.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package logic
  2. import (
  3. "context"
  4. "errors"
  5. "github.com/gravitl/netmaker/db"
  6. "github.com/gravitl/netmaker/logic"
  7. "github.com/gravitl/netmaker/models"
  8. "github.com/gravitl/netmaker/schema"
  9. "github.com/gravitl/netmaker/servercfg"
  10. "gorm.io/datatypes"
  11. )
  12. func ValidateEgressReq(e *schema.Egress) error {
  13. if e.Network == "" {
  14. return errors.New("network id is empty")
  15. }
  16. _, err := logic.GetNetwork(e.Network)
  17. if err != nil {
  18. return errors.New("failed to get network " + err.Error())
  19. }
  20. if !servercfg.IsPro && len(e.Nodes) > 1 {
  21. return errors.New("can only set one routing node on CE")
  22. }
  23. if len(e.Nodes) > 0 {
  24. for k := range e.Nodes {
  25. _, err := logic.GetNodeByID(k)
  26. if err != nil {
  27. return errors.New("invalid routing node " + err.Error())
  28. }
  29. }
  30. }
  31. if len(e.Tags) > 0 {
  32. e.Nodes = make(datatypes.JSONMap)
  33. for tagID := range e.Tags {
  34. _, err := GetTag(models.TagID(tagID))
  35. if err != nil {
  36. return errors.New("invalid tag " + tagID)
  37. }
  38. }
  39. }
  40. return nil
  41. }
  42. func RemoveTagFromEgress(net models.NetworkID, tagID models.TagID) {
  43. eli, _ := (&schema.Egress{Network: net.String()}).ListByNetwork(db.WithContext(context.TODO()))
  44. for _, eI := range eli {
  45. if _, ok := eI.Tags[tagID.String()]; ok {
  46. delete(eI.Tags, tagID.String())
  47. eI.Update(db.WithContext(context.TODO()))
  48. }
  49. }
  50. }