|
@@ -3,6 +3,8 @@ package logic
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "slices"
|
|
|
+ "sort"
|
|
|
"time"
|
|
|
|
|
|
"github.com/gravitl/netmaker/database"
|
|
@@ -99,19 +101,6 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
|
|
|
gateway.Ranges[i] = normalized
|
|
|
|
|
|
}
|
|
|
- if gateway.NatEnabled == "" {
|
|
|
- gateway.NatEnabled = "yes"
|
|
|
- }
|
|
|
- err = ValidateEgressGateway(gateway)
|
|
|
- if err != nil {
|
|
|
- return models.Node{}, err
|
|
|
- }
|
|
|
- if gateway.Ranges == nil {
|
|
|
- gateway.Ranges = make([]string, 0)
|
|
|
- }
|
|
|
- node.IsEgressGateway = true
|
|
|
- node.EgressGatewayRanges = gateway.Ranges
|
|
|
- node.EgressGatewayNatEnabled = models.ParseBool(gateway.NatEnabled)
|
|
|
rangesWithMetric := []string{}
|
|
|
for i := len(gateway.RangesWithMetric) - 1; i >= 0; i-- {
|
|
|
if gateway.RangesWithMetric[i].Network == "0.0.0.0/0" || gateway.RangesWithMetric[i].Network == "::/0" {
|
|
@@ -119,7 +108,7 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
|
|
|
gateway.RangesWithMetric = append(gateway.RangesWithMetric[:i], gateway.RangesWithMetric[i+1:]...)
|
|
|
continue
|
|
|
}
|
|
|
- normalized, err := NormalizeCIDR(gateway.Ranges[i])
|
|
|
+ normalized, err := NormalizeCIDR(gateway.RangesWithMetric[i].Network)
|
|
|
if err != nil {
|
|
|
return models.Node{}, err
|
|
|
}
|
|
@@ -129,9 +118,25 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
|
|
|
gateway.RangesWithMetric[i].RouteMetric = 256
|
|
|
}
|
|
|
}
|
|
|
- if !IsSlicesEqual(node.EgressGatewayRanges, rangesWithMetric) {
|
|
|
+ sort.Strings(gateway.Ranges)
|
|
|
+ sort.Strings(rangesWithMetric)
|
|
|
+ if !slices.Equal(gateway.Ranges, rangesWithMetric) {
|
|
|
return models.Node{}, errors.New("invalid ranges")
|
|
|
}
|
|
|
+ if gateway.NatEnabled == "" {
|
|
|
+ gateway.NatEnabled = "yes"
|
|
|
+ }
|
|
|
+ err = ValidateEgressGateway(gateway)
|
|
|
+ if err != nil {
|
|
|
+ return models.Node{}, err
|
|
|
+ }
|
|
|
+ if gateway.Ranges == nil {
|
|
|
+ gateway.Ranges = make([]string, 0)
|
|
|
+ }
|
|
|
+ node.IsEgressGateway = true
|
|
|
+ node.EgressGatewayRanges = gateway.Ranges
|
|
|
+ node.EgressGatewayNatEnabled = models.ParseBool(gateway.NatEnabled)
|
|
|
+
|
|
|
node.EgressGatewayRequest = gateway // store entire request for use when preserving the egress gateway
|
|
|
node.SetLastModified()
|
|
|
if err = UpsertNode(&node); err != nil {
|