Skip to content

Commit

Permalink
Merge pull request #1308 from spidernet-io/update-codev
Browse files Browse the repository at this point in the history
Fix first egw create not update usage
  • Loading branch information
weizhoublue authored Apr 17, 2024
2 parents 03aa272 + 5c56478 commit c2c83c9
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 112 deletions.
37 changes: 0 additions & 37 deletions pkg/controller/webhook/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"

"github.com/spidernet-io/egressgateway/pkg/config"
"github.com/spidernet-io/egressgateway/pkg/constant"
"github.com/spidernet-io/egressgateway/pkg/egressgateway"
egressv1 "github.com/spidernet-io/egressgateway/pkg/k8s/apis/v1beta1"
"github.com/spidernet-io/egressgateway/pkg/utils/ip"
Expand Down Expand Up @@ -336,42 +335,6 @@ func checkEIPIncluded(client client.Client, ctx context.Context, ipv4, ipv6, egw
return true, nil
}

func countGatewayAvailableIP(egw *egressv1.EgressGateway) (int, int, error) {
// check has free egress ip
ipv4Ranges, err := ip.MergeIPRanges(constant.IPv4, egw.Spec.Ippools.IPv4)
if err != nil {
return 0, 0, err
}
ipv6Ranges, err := ip.MergeIPRanges(constant.IPv6, egw.Spec.Ippools.IPv6)
if err != nil {
return 0, 0, err
}
useIpv4s := make([]net.IP, 0)
useIpv6s := make([]net.IP, 0)
for _, node := range egw.Status.NodeList {
for _, eip := range node.Eips {
if len(eip.IPv4) != 0 {
useIpv4s = append(useIpv4s, net.ParseIP(eip.IPv4))
}
if len(eip.IPv6) != 0 {
useIpv6s = append(useIpv6s, net.ParseIP(eip.IPv6))
}
}
}
ipv4s, err := ip.ParseIPRanges(constant.IPv4, ipv4Ranges)
if err != nil {
return 0, 0, err
}
ipv6s, err := ip.ParseIPRanges(constant.IPv6, ipv6Ranges)
if err != nil {
return 0, 0, err
}
freeIpv4s := ip.IPsDiffSet(ipv4s, useIpv4s, false)
freeIpv6s := ip.IPsDiffSet(ipv6s, useIpv6s, false)

return len(freeIpv4s), len(freeIpv6s), nil
}

func validateSubnet(subnet []string) webhook.AdmissionResponse {
invalidList := make([]string, 0)
for _, subnet := range subnet {
Expand Down
74 changes: 0 additions & 74 deletions pkg/controller/webhook/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import (

"github.com/spidernet-io/egressgateway/pkg/config"
"github.com/spidernet-io/egressgateway/pkg/k8s/apis/v1beta1"
egressv1 "github.com/spidernet-io/egressgateway/pkg/k8s/apis/v1beta1"
"github.com/spidernet-io/egressgateway/pkg/schema"
)

Expand Down Expand Up @@ -983,76 +982,3 @@ func TestUpdateEgressClusterPolicy(t *testing.T) {
})
}
}

func TestCountAvailableIP(t *testing.T) {
tests := []struct {
name string
args *egressv1.EgressGateway
want4 int
want6 int
}{
{
name: "case1-ipv4",
args: &egressv1.EgressGateway{
Spec: egressv1.EgressGatewaySpec{
Ippools: egressv1.Ippools{
IPv4: []string{
"10.6.1.21-10.6.1.30",
},
IPv6: []string{},
},
},
Status: v1beta1.EgressGatewayStatus{
NodeList: []egressv1.EgressIPStatus{
{
Name: "node1",
Eips: []egressv1.Eips{{IPv4: "10.6.1.21"}},
},
},
},
},
want4: 9,
want6: 0,
},
{
name: "case2-dual",
args: &egressv1.EgressGateway{
Spec: egressv1.EgressGatewaySpec{
Ippools: egressv1.Ippools{
IPv4: []string{
"10.6.1.21",
"10.6.1.22",
},
IPv6: []string{
"fd00::1-fd00::2",
},
},
},
Status: v1beta1.EgressGatewayStatus{
NodeList: []egressv1.EgressIPStatus{
{
Name: "node1",
Eips: []egressv1.Eips{{IPv4: "10.6.1.21", IPv6: "fd00::1"}},
},
},
},
},
want4: 1,
want6: 1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got4, got6, err := countGatewayAvailableIP(tt.args)
if err != nil {
t.Fatal(err)
}
if got4 != tt.want4 {
t.Fatalf("got4 %d, want4 %d", got4, tt.want4)
}
if got6 != tt.want6 {
t.Fatalf("got6 %d, want6 %d", got6, tt.want6)
}
})
}
}
6 changes: 6 additions & 0 deletions pkg/egressgateway/egress_gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,12 @@ func (r *egnReconciler) reconcileGateway(ctx context.Context, req reconcile.Requ
}
}

// first create egw update usage
if (egw.Status.IPUsage.IPv4Total == 0 && len(egw.Spec.Ippools.IPv4) != 0) ||
(egw.Status.IPUsage.IPv6Total == 0 || len(egw.Spec.Ippools.IPv6) != 0) {
needUpdate = true
}

if needUpdate {
// update
err := updateGatewayStatusWithUsage(ctx, r.client, egw)
Expand Down
2 changes: 1 addition & 1 deletion pkg/utils/ip/ip.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ func IPsDiffSet(ips1, ips2 []net.IP, sorted bool) []net.IP {
// to [172.18.40.1-172.18.40.5]. The overlapping part of two IP ranges will
// be ignored.
func MergeIPRanges(version constant.IPVersion, ipRanges []string) ([]string, error) {
ips, err := ParseIPRanges(version, ipRanges)
ips, err := ConvertCidrOrIPrangeToIPs(ipRanges, version)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit c2c83c9

Please sign in to comment.