mirror of
https://github.com/gravitl/netmaker.git
synced 2026-04-22 16:07:11 +08:00
v1.5.0: fix egress update
This commit is contained in:
+12
-6
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user