mirror of
https://github.com/gravitl/netmaker.git
synced 2025-12-18 08:38:26 +08:00
* 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
56 lines
1.3 KiB
Go
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()))
|
|
}
|
|
}
|
|
}
|