netmaker/pro/logic/egress.go
Abhishek K c5b48db2a1
NM-125: Egress HA by Latency, Allow Tags to be selected as routing peers (#3698)
* enable egress routing peers with tags

* remove tag from egress when deleted

* fix egress tag functionality

* filter duplicate egress ips

* set default stun server if unset

* add version to status api

* sync deleted node udpate host deletion
2025-10-25 23:49:21 +04:00

56 lines
1.3 KiB
Go

package logic
import (
"context"
"errors"
"github.com/gravitl/netmaker/db"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/schema"
"github.com/gravitl/netmaker/servercfg"
"gorm.io/datatypes"
)
func ValidateEgressReq(e *schema.Egress) error {
if e.Network == "" {
return errors.New("network id is empty")
}
_, err := logic.GetNetwork(e.Network)
if err != nil {
return errors.New("failed to get network " + err.Error())
}
if !servercfg.IsPro && len(e.Nodes) > 1 {
return errors.New("can only set one routing node on CE")
}
if len(e.Nodes) > 0 {
for k := range e.Nodes {
_, err := logic.GetNodeByID(k)
if err != nil {
return errors.New("invalid routing node " + err.Error())
}
}
}
if len(e.Tags) > 0 {
e.Nodes = make(datatypes.JSONMap)
for tagID := range e.Tags {
_, err := GetTag(models.TagID(tagID))
if err != nil {
return errors.New("invalid tag " + tagID)
}
}
}
return nil
}
func RemoveTagFromEgress(net models.NetworkID, tagID models.TagID) {
eli, _ := (&schema.Egress{Network: net.String()}).ListByNetwork(db.WithContext(context.TODO()))
for _, eI := range eli {
if _, ok := eI.Tags[tagID.String()]; ok {
delete(eI.Tags, tagID.String())
eI.Update(db.WithContext(context.TODO()))
}
}
}