v1.5.0: fix egress update

This commit is contained in:
abhishek9686
2026-02-12 22:16:02 +04:00
parent 65ca370ec0
commit c29b23ccf8
+12 -6
View File
@@ -11,6 +11,7 @@ import (
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/schema"
"golang.org/x/exp/slog"
"gorm.io/datatypes"
)
var ValidateEgressReq = validateEgressReq
@@ -432,19 +433,24 @@ func GetNodeEgressInfo(targetNode *models.Node, eli []schema.Egress, acls []mode
}
func RemoveNodeFromEgress(node models.Node) {
ctx := context.TODO()
egs, err := (&schema.Egress{Network: node.Network}).ListByNetwork(db.WithContext(ctx))
ctx := db.WithContext(context.TODO())
egs, err := (&schema.Egress{Network: node.Network}).ListByNetwork(ctx)
if err != nil {
slog.Error("RemoveNodeFromEgress: failed to list egresses", "error", err.Error())
return
}
for _, egI := range egs {
for i := range egs {
egI := &egs[i]
if _, ok := egI.Nodes[node.ID.String()]; ok {
delete(egI.Nodes, node.ID.String())
// Use explicit Updates: GORM's Updates(&struct) does not reliably persist
// in-place map modifications; explicit column update ensures it is saved.
// Build a new map to ensure GORM persists the change; in-place modification
// of the same map reference may not be detected by Updates(&struct).
newNodes := make(datatypes.JSONMap)
for k, v := range egI.Nodes {
newNodes[k] = v
}
if err := db.FromContext(ctx).Table(egI.Table()).Where("id = ?", egI.ID).Updates(map[string]any{
"nodes": egI.Nodes,
"nodes": newNodes,
}).Error; err != nil {
slog.Error("RemoveNodeFromEgress: failed to update egress", "id", egI.ID, "error", err.Error())
}