From 2e3a4abca33acc28b37f1d81390db3854dc523c6 Mon Sep 17 00:00:00 2001 From: rainzm Date: Fri, 31 Jul 2020 16:56:59 +0800 Subject: [PATCH] fix(region): Don't allow address conflicts under vpc Except for default vpc, vpc and wire have a one-to-one correspondence. So prohibiting the address conflict of wire does not avoid the address conflict of default vpc. --- pkg/compute/models/networks.go | 8 ++++---- pkg/compute/models/vpcs.go | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 056656d5e3..02c45f366b 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -1449,12 +1449,12 @@ func (manager *SNetworkManager) ValidateCreateData(ctx context.Context, userCred } } { - nets := manager.getAllNetworks(wire.Id, "") - if nets == nil { - return input, httperrors.NewInternalServerError("query all networks fail") + nets, err := vpc.GetNetworks() + if err != nil { + return input, httperrors.NewInternalServerError("fail to GetNetworks of vpc: %v", err) } if isOverlapNetworks(nets, ipStart, ipEnd) { - return input, httperrors.NewInputParameterError("Conflict address space with existing networks") + return input, httperrors.NewInputParameterError("Conflict address space with existing networks in vpc %q", vpc.GetName()) } } diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 0023cb9f0d..48b6c7b2b1 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -214,6 +214,16 @@ func (self *SVpc) getNetworkQuery() *sqlchemy.SQuery { return q } +func (self *SVpc) GetNetworks() ([]SNetwork, error) { + q := self.getNetworkQuery() + nets := make([]SNetwork, 0, 5) + err := db.FetchModelObjects(NetworkManager, q, &nets) + if err != nil { + return nil, errors.Wrap(err, "db.FetchModelObjects") + } + return nets, nil +} + func (self *SVpc) GetNetworkCount() (int, error) { q := self.getNetworkQuery() return q.CountWithError()