From d1d556e68eddb03ba7882183a344ca92ac0b7c0a Mon Sep 17 00:00:00 2001 From: Rain Date: Tue, 22 Oct 2019 15:54:11 +0800 Subject: [PATCH] Bugfix: add parameter deepsync to command 'cloud-provider-sync' and 'cloud-account-sync'; fix the bug when syncing eip. --- pkg/compute/models/cloudproviders.go | 3 +++ pkg/compute/models/elasticips.go | 34 ++++++++-------------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index e0f3040f34..097b57898c 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -507,6 +507,9 @@ func (self *SCloudprovider) PerformSync(ctx context.Context, userCred mcclient.T if err != nil { return nil, httperrors.NewInputParameterError("invalid input %s", err) } + if syncRange.FullSync || len(syncRange.Region) > 0 || len(syncRange.Zone) > 0 || len(syncRange.Host) > 0 { + syncRange.DeepSync = true + } if self.CanSync() || syncRange.Force { err = self.StartSyncCloudProviderInfoTask(ctx, userCred, &syncRange, "") } diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index 8afa20ea08..1ddf75db9f 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -275,24 +275,6 @@ func (manager *SElasticipManager) SyncEips(ctx context.Context, userCred mcclien } } for i := 0; i < len(added); i += 1 { - vmExtId := added[i].GetAssociationExternalId() - if len(vmExtId) > 0 { - vm, err := db.FetchByExternalId(GuestManager, vmExtId) - if err != nil && err != sql.ErrNoRows { - log.Errorf("failed to found guest by externalId %s error: %v", vmExtId, err) - continue - } - if vm != nil { - guest := vm.(*SGuest) - result := guest.SyncVMEip(ctx, userCred, provider, added[i], syncOwnerId) - if result.IsError() { - syncResult.UpdateError(fmt.Errorf(result.Result())) - } else { - syncResult.Update() - } - continue - } - } new, err := manager.newFromCloudEip(ctx, userCred, added[i], provider, region, syncOwnerId) if err != nil { syncResult.AddError(err) @@ -309,12 +291,7 @@ func (self *SElasticip) syncRemoveCloudEip(ctx context.Context, userCred mcclien lockman.LockObject(ctx, self) defer lockman.ReleaseObject(ctx, self) - err := self.ValidateDeleteCondition(ctx) - if err != nil { - return self.SetStatus(userCred, api.EIP_STATUS_UNKNOWN, "sync to delete") - } else { - return self.RealDelete(ctx, userCred) - } + return self.RealDelete(ctx, userCred) } func (self *SElasticip) SyncInstanceWithCloudEip(ctx context.Context, userCred mcclient.TokenCredential, ext cloudprovider.ICloudEIP) error { @@ -404,6 +381,10 @@ func (self *SElasticip) SyncWithCloudEip(ctx context.Context, userCred mcclient. } db.OpsLog.LogSyncUpdate(self, diff, userCred) + err = self.SyncInstanceWithCloudEip(ctx, userCred, ext) + if err != nil { + return errors.Wrap(err, "fail to sync associated instance of EIP") + } SyncCloudProject(userCred, self, syncOwnerId, ext, self.ManagerId) return nil @@ -441,7 +422,10 @@ func (manager *SElasticipManager) newFromCloudEip(ctx context.Context, userCred log.Errorf("newFromCloudEip fail %s", err) return nil, err } - + err = eip.SyncInstanceWithCloudEip(ctx, userCred, extEip) + if err != nil { + return nil, errors.Wrap(err, "fail to sync associated instance of EIP") + } SyncCloudProject(userCred, &eip, syncOwnerId, extEip, eip.ManagerId) db.OpsLog.LogEvent(&eip, db.ACT_CREATE, eip.GetShortDesc(ctx), userCred)