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())) } } }