From d60dee6a97ed234a6cf648fdc022e4f2f6dd7ce1 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Mon, 26 Oct 2020 16:17:15 +0800 Subject: [PATCH] fix: avoid delete public ip when sync eip list --- pkg/compute/models/cloudregions.go | 16 ++++++++++++++++ pkg/compute/models/elasticips.go | 15 +-------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index cc2ead5876..63b4b387ec 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -118,6 +118,22 @@ func (self *SCloudregion) ValidateDeleteCondition(ctx context.Context) error { return self.SEnabledStatusStandaloneResourceBase.ValidateDeleteCondition(ctx) } +func (self *SCloudregion) GetElasticIps(managerId, eipMode string) ([]SElasticip, error) { + q := ElasticipManager.Query().Equals("cloudregion_id", self.Id) + if len(managerId) > 0 { + q = q.Equals("manager_id", managerId) + } + if len(eipMode) > 0 { + q = q.Equals("mode", eipMode) + } + eips := []SElasticip{} + err := db.FetchModelObjects(ElasticipManager, q, &eips) + if err != nil { + return nil, errors.Wrapf(err, "db.FetchModelObjects") + } + return eips, nil +} + func (self *SCloudregion) GetZoneQuery() *sqlchemy.SQuery { zones := ZoneManager.Query() if self.Id == api.DEFAULT_REGION_ID { diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index 6d467c8073..615afc58ae 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -248,19 +248,6 @@ func (manager *SElasticipManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fi return q, httperrors.ErrNotFound } -func (manager *SElasticipManager) getEipsByRegion(region *SCloudregion, provider *SCloudprovider) ([]SElasticip, error) { - eips := make([]SElasticip, 0) - q := manager.Query().Equals("cloudregion_id", region.Id) - if provider != nil { - q = q.Equals("manager_id", provider.Id) - } - err := db.FetchModelObjects(manager, q, &eips) - if err != nil { - return nil, err - } - return eips, nil -} - func (self *SElasticip) GetRegion() *SCloudregion { return CloudregionManager.FetchRegionById(self.CloudregionId) } @@ -329,7 +316,7 @@ func (manager *SElasticipManager) SyncEips(ctx context.Context, userCred mcclien // remoteEips := make([]cloudprovider.ICloudEIP, 0) syncResult := compare.SyncResult{} - dbEips, err := manager.getEipsByRegion(region, provider) + dbEips, err := region.GetElasticIps(provider.Id, api.EIP_MODE_STANDALONE_EIP) if err != nil { syncResult.Error(err) return syncResult