From f194ad718379dc25268581bb2fcf9cc866dfdcba Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Fri, 13 Dec 2019 09:36:32 +0000 Subject: [PATCH] vpcs: add method containsIPV4Range() --- pkg/compute/models/networks.go | 29 +++-------------------------- pkg/compute/models/vpcs.go | 10 ++++++++++ 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index de49df4e37..aef9f7de24 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -1412,19 +1412,8 @@ func (manager *SNetworkManager) ValidateCreateData(ctx context.Context, userCred return input, httperrors.NewInvalidStatusError("VPC not ready") } - vpcRanges := vpc.getIPRanges() - netRange := netutils.NewIPV4AddrRange(startIp, endIp) - - inRange := false - for _, vpcRange := range vpcRanges { - if vpcRange.ContainsRange(netRange) { - inRange = true - break - } - } - - if !inRange { + if !vpc.containsIPV4Range(netRange) { return input, httperrors.NewInputParameterError("Network not in range of VPC cidrblock %s", vpc.CidrBlock) } @@ -1485,21 +1474,9 @@ func (self *SNetwork) ValidateUpdateData(ctx context.Context, userCred mcclient. return nil, httperrors.NewInputParameterError("Conflict address space with existing networks") } - vpc := self.GetVpc() - - vpcRanges := vpc.getIPRanges() - netRange := netutils.NewIPV4AddrRange(startIp, endIp) - - inRange := false - for _, vpcRange := range vpcRanges { - if vpcRange.ContainsRange(netRange) { - inRange = true - break - } - } - - if !inRange { + vpc := self.GetVpc() + if !vpc.containsIPV4Range(netRange) { return nil, httperrors.NewInputParameterError("Network not in range of VPC cidrblock %s", vpc.CidrBlock) } diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 65edba3b67..b1dec2e8ea 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -766,6 +766,16 @@ func (self *SVpc) getIPRanges() []netutils.IPV4AddrRange { return ret } +func (self *SVpc) containsIPV4Range(a netutils.IPV4AddrRange) bool { + ranges := self.getIPRanges() + for i := range ranges { + if ranges[i].ContainsRange(a) { + return true + } + } + return false +} + func (self *SVpc) AllowPerformPurge(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return db.IsAdminAllowPerform(userCred, self, "purge") }