From 9c2dd4b0ea8f0b4ba40ab36437c22970a1ae8ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Fri, 26 Jan 2024 11:14:22 +0800 Subject: [PATCH] fix(region): sync resource owner with auto-create-project options (#19320) --- pkg/compute/models/app.go | 2 +- pkg/compute/models/app_environment.go | 2 +- pkg/compute/models/buckets.go | 4 ++-- pkg/compute/models/cachedimages.go | 16 +++++++++----- pkg/compute/models/cdn_domains.go | 4 ++-- pkg/compute/models/cloudsync.go | 21 +++++++------------ pkg/compute/models/dbinstance_backups.go | 4 ++-- pkg/compute/models/dbinstances.go | 4 ++-- pkg/compute/models/disks.go | 8 +++++-- pkg/compute/models/dnszones.go | 4 ++-- pkg/compute/models/elastic_search.go | 4 ++-- pkg/compute/models/elasticcache_instances.go | 4 ++-- pkg/compute/models/elasticips.go | 4 ++-- pkg/compute/models/globalvpcs.go | 5 ++++- pkg/compute/models/guests.go | 9 ++++++-- pkg/compute/models/ipv6_gateways.go | 4 ++-- pkg/compute/models/kafka.go | 4 ++-- pkg/compute/models/loadbalancercachedacls.go | 2 +- .../models/loadbalancercachedcertificates.go | 2 +- pkg/compute/models/loadbalancers.go | 4 ++-- pkg/compute/models/miscresources.go | 4 ++-- pkg/compute/models/modelarts_pools.go | 4 ++-- pkg/compute/models/mongodb.go | 4 ++-- pkg/compute/models/networks.go | 7 +++---- pkg/compute/models/secgroups.go | 6 ++++-- pkg/compute/models/snapshotpolicy.go | 4 ++-- pkg/compute/models/snapshots.go | 4 ++-- pkg/compute/models/storagecachedimages.go | 7 ++++--- pkg/compute/models/tablestores.go | 4 ++-- 29 files changed, 85 insertions(+), 70 deletions(-) diff --git a/pkg/compute/models/app.go b/pkg/compute/models/app.go index 0ec2a96207..682f38feeb 100644 --- a/pkg/compute/models/app.go +++ b/pkg/compute/models/app.go @@ -295,7 +295,7 @@ func (self *SCloudregion) newFromCloudApp(ctx context.Context, userCred mcclient if result.IsError() { return &app, errors.Wrap(result.AllError(), "unable to SyncAppEnvironments") } - SyncCloudProject(ctx, userCred, &app, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &app, provider.GetOwnerId(), ext, provider) syncVirtualResourceMetadata(ctx, userCred, &app, ext, false) db.OpsLog.LogEvent(&app, db.ACT_CREATE, app.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/app_environment.go b/pkg/compute/models/app_environment.go index f039cf7579..d9c3c95637 100644 --- a/pkg/compute/models/app_environment.go +++ b/pkg/compute/models/app_environment.go @@ -180,7 +180,7 @@ func (a *SApp) newFromCloudAppEnvironment(ctx context.Context, userCred mcclient return nil, errors.Wrapf(err, "newFromCloudAppEnvironment.Insert") } - SyncCloudProject(ctx, userCred, &appEnvironment, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &appEnvironment, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(&appEnvironment, db.ACT_CREATE, appEnvironment.GetShortDesc(ctx), userCred) return nil, nil } diff --git a/pkg/compute/models/buckets.go b/pkg/compute/models/buckets.go index d88951d922..d00e4b93a7 100644 --- a/pkg/compute/models/buckets.go +++ b/pkg/compute/models/buckets.go @@ -238,7 +238,7 @@ func (manager *SBucketManager) newFromCloudBucket( return nil, err } - SyncCloudProject(ctx, userCred, &bucket, provider.GetOwnerId(), extBucket, provider.Id) + SyncCloudProject(ctx, userCred, &bucket, provider.GetOwnerId(), extBucket, provider) notifyclient.EventNotify(ctx, userCred, notifyclient.SEventNotifyParam{ Obj: &bucket, Action: notifyclient.ActionSyncCreate, @@ -335,7 +335,7 @@ func (bucket *SBucket) syncWithCloudBucket( } if provider != nil { - SyncCloudProject(ctx, userCred, bucket, provider.GetOwnerId(), extBucket, provider.Id) + SyncCloudProject(ctx, userCred, bucket, provider.GetOwnerId(), extBucket, provider) bucket.SyncShareState(ctx, userCred, provider.getAccountShareInfo()) } diff --git a/pkg/compute/models/cachedimages.go b/pkg/compute/models/cachedimages.go index ac1d9a5d38..96b2cf6cfc 100644 --- a/pkg/compute/models/cachedimages.go +++ b/pkg/compute/models/cachedimages.go @@ -626,7 +626,7 @@ func (self *SCachedimage) canDeleteLastCache() bool { return false } -func (self *SCachedimage) syncWithCloudImage(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, image cloudprovider.ICloudImage, managerId string) error { +func (self *SCachedimage) syncWithCloudImage(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, image cloudprovider.ICloudImage, provider *SCloudprovider) error { diff, err := db.UpdateWithLock(ctx, self, func() error { if options.Options.EnableSyncName { newName, err := db.GenerateAlterName(self, image.GetName()) @@ -651,11 +651,13 @@ func (self *SCachedimage) syncWithCloudImage(ctx context.Context, userCred mccli }) db.OpsLog.LogSyncUpdate(self, diff, userCred) - SyncCloudProject(ctx, userCred, self, ownerId, image, managerId) + if provider != nil { + SyncCloudProject(ctx, userCred, self, ownerId, image, provider) + } return err } -func (manager *SCachedimageManager) newFromCloudImage(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, image cloudprovider.ICloudImage, managerId string) (*SCachedimage, error) { +func (manager *SCachedimageManager) newFromCloudImage(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, image cloudprovider.ICloudImage, provider *SCloudprovider) (*SCachedimage, error) { cachedImage := SCachedimage{} cachedImage.SetModelManager(manager, &cachedImage) @@ -667,6 +669,8 @@ func (manager *SCachedimageManager) newFromCloudImage(ctx context.Context, userC cachedImage.ImageType = string(image.GetImageType()) cachedImage.ExternalId = image.GetGlobalId() cachedImage.Status = image.GetStatus() + cachedImage.ProjectId = ownerId.GetProjectId() + cachedImage.DomainId = ownerId.GetProjectDomainId() cachedImage.PublicScope = string(image.GetPublicScope()) switch image.GetPublicScope() { case rbacscope.ScopeNone: @@ -689,7 +693,9 @@ func (manager *SCachedimageManager) newFromCloudImage(ctx context.Context, userC return nil, err } - SyncCloudProject(ctx, userCred, &cachedImage, ownerId, image, managerId) + if provider != nil { + SyncCloudProject(ctx, userCred, &cachedImage, ownerId, image, provider) + } return &cachedImage, nil } @@ -723,7 +729,7 @@ func (image *SCachedimage) requestRefreshExternalImage(ctx context.Context, user log.Errorf("iCache.GetIImageById fail %s", err) return nil, err } - err = image.syncWithCloudImage(ctx, userCred, nil, iImage, "") + err = image.syncWithCloudImage(ctx, userCred, nil, iImage, nil) if err != nil { log.Errorf("image.syncWithCloudImage fail %s", err) return nil, err diff --git a/pkg/compute/models/cdn_domains.go b/pkg/compute/models/cdn_domains.go index 81819e99dd..058f6f9025 100644 --- a/pkg/compute/models/cdn_domains.go +++ b/pkg/compute/models/cdn_domains.go @@ -291,7 +291,7 @@ func (self *SCDNDomain) SyncWithCloudCDNDomain(ctx context.Context, userCred mcc } if provider := self.GetCloudprovider(); provider != nil { - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, self.ManagerId) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) } return nil @@ -323,7 +323,7 @@ func (self *SCloudprovider) newFromCloudCDNDomain(ctx context.Context, userCred } syncVirtualResourceMetadata(ctx, userCred, &domain, ext, false) - SyncCloudProject(ctx, userCred, &domain, self.GetOwnerId(), ext, self.Id) + SyncCloudProject(ctx, userCred, &domain, self.GetOwnerId(), ext, self) db.OpsLog.LogEvent(&domain, db.ACT_CREATE, domain.GetShortDesc(ctx), userCred) notifyclient.EventNotify(ctx, userCred, notifyclient.SEventNotifyParam{ diff --git a/pkg/compute/models/cloudsync.go b/pkg/compute/models/cloudsync.go index 6ac35026f7..9af18aeac3 100644 --- a/pkg/compute/models/cloudsync.go +++ b/pkg/compute/models/cloudsync.go @@ -2570,13 +2570,12 @@ func (manager *SCloudproviderregionManager) initAllRecords() { } } -func SyncCloudProject(ctx context.Context, userCred mcclient.TokenCredential, model db.IVirtualModel, syncOwnerId mcclient.IIdentityProvider, extModel cloudprovider.IVirtualResource, managerId string) { +func SyncCloudProject(ctx context.Context, userCred mcclient.TokenCredential, model db.IVirtualModel, syncOwnerId mcclient.IIdentityProvider, extModel cloudprovider.IVirtualResource, manager *SCloudprovider) { + account, err := manager.GetCloudaccount() + if err != nil { + return + } newOwnerId, err := func() (mcclient.IIdentityProvider, error) { - _manager, err := CloudproviderManager.FetchById(managerId) - if err != nil { - return nil, errors.Wrapf(err, "CloudproviderManager.FetchById(%s)", managerId) - } - manager := _manager.(*SCloudprovider) rm, err := manager.GetProjectMapping() if err != nil { if errors.Cause(err) == cloudprovider.ErrNotFound { @@ -2584,10 +2583,6 @@ func SyncCloudProject(ctx context.Context, userCred mcclient.TokenCredential, mo } return nil, errors.Wrapf(err, "GetProjectMapping") } - account, err := manager.GetCloudaccount() - if err != nil { - return nil, errors.Wrapf(err, "GetCloudaccount") - } if rm != nil && rm.Enabled.Bool() && rm.IsNeedResourceSync() { model.SetProjectSrc(apis.OWNER_SOURCE_CLOUD) extTags, err := extModel.GetTags() @@ -2616,8 +2611,8 @@ func SyncCloudProject(ctx context.Context, userCred mcclient.TokenCredential, mo if err != nil { log.Errorf("try sync project for %s %s by tags error: %v", model.Keyword(), model.GetName(), err) } - if extProjectId := extModel.GetProjectId(); len(extProjectId) > 0 && newOwnerId == nil { - extProject, err := ExternalProjectManager.GetProject(extProjectId, managerId) + if extProjectId := extModel.GetProjectId(); len(extProjectId) > 0 && account.AutoCreateProject && newOwnerId == nil { + extProject, err := ExternalProjectManager.GetProject(extProjectId, manager.Id) if err != nil { log.Errorf("sync project for %s %s error: %v", model.Keyword(), model.GetName(), err) } else if len(extProject.ProjectId) > 0 { @@ -2628,7 +2623,7 @@ func SyncCloudProject(ctx context.Context, userCred mcclient.TokenCredential, mo newOwnerId = syncOwnerId } if newOwnerId == nil { - newOwnerId = userCred + newOwnerId = manager.GetOwnerId() } model.SyncCloudProjectId(userCred, newOwnerId) } diff --git a/pkg/compute/models/dbinstance_backups.go b/pkg/compute/models/dbinstance_backups.go index cf98526486..5826a9b4d6 100644 --- a/pkg/compute/models/dbinstance_backups.go +++ b/pkg/compute/models/dbinstance_backups.go @@ -484,7 +484,7 @@ func (self *SDBInstanceBackup) SyncWithCloudDBInstanceBackup( } if len(self.ProjectId) == 0 { - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), extBackup, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), extBackup, provider) } return nil @@ -543,7 +543,7 @@ func (manager *SDBInstanceBackupManager) newFromCloudDBInstanceBackup( } if len(backup.ProjectId) == 0 { - SyncCloudProject(ctx, userCred, &backup, provider.GetOwnerId(), extBackup, provider.Id) + SyncCloudProject(ctx, userCred, &backup, provider.GetOwnerId(), extBackup, provider) } return nil diff --git a/pkg/compute/models/dbinstances.go b/pkg/compute/models/dbinstances.go index 47457612bb..ac9a7c82d8 100644 --- a/pkg/compute/models/dbinstances.go +++ b/pkg/compute/models/dbinstances.go @@ -1761,7 +1761,7 @@ func (self *SDBInstance) SyncWithCloudDBInstance(ctx context.Context, userCred m if account := self.GetCloudaccount(); account != nil { syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) db.OpsLog.LogSyncUpdate(self, diff, userCred) if len(diff) > 0 { notifyclient.EventNotify(ctx, userCred, notifyclient.SEventNotifyParam{ @@ -1858,7 +1858,7 @@ func (manager *SDBInstanceManager) newFromCloudDBInstance(ctx context.Context, u } syncVirtualResourceMetadata(ctx, userCred, &instance, extInstance, false) - SyncCloudProject(ctx, userCred, &instance, provider.GetOwnerId(), extInstance, provider.Id) + SyncCloudProject(ctx, userCred, &instance, provider.GetOwnerId(), extInstance, provider) db.OpsLog.LogEvent(&instance, db.ACT_CREATE, instance.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 5f572f47f9..5334649914 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -1719,7 +1719,9 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke } if len(guests) == 0 { - SyncCloudProject(ctx, userCred, self, syncOwnerId, extDisk, storage.ManagerId) + if provider := storage.GetCloudprovider(); provider != nil { + SyncCloudProject(ctx, userCred, self, syncOwnerId, extDisk, provider) + } } else { self.SyncCloudProjectId(userCred, guests[0].GetOwnerId()) } @@ -1785,7 +1787,9 @@ func (manager *SDiskManager) newFromCloudDisk(ctx context.Context, userCred mccl syncVirtualResourceMetadata(ctx, userCred, &disk, extDisk, false) - SyncCloudProject(ctx, userCred, &disk, syncOwnerId, extDisk, storage.ManagerId) + if provider := storage.GetCloudprovider(); provider != nil { + SyncCloudProject(ctx, userCred, &disk, syncOwnerId, extDisk, provider) + } db.OpsLog.LogEvent(&disk, db.ACT_CREATE, disk.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/dnszones.go b/pkg/compute/models/dnszones.go index f19df33808..19934225f2 100644 --- a/pkg/compute/models/dnszones.go +++ b/pkg/compute/models/dnszones.go @@ -512,7 +512,7 @@ func (self *SDnsZone) syncWithDnsZone(ctx context.Context, userCred mcclient.Tok if account, _ := provider.GetCloudaccount(); account != nil { syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, self.ManagerId) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) } return nil @@ -534,7 +534,7 @@ func (self *SCloudprovider) newFromCloudDnsZone(ctx context.Context, userCred mc } syncVirtualResourceMetadata(ctx, userCred, zone, ext, false) - SyncCloudProject(ctx, userCred, zone, self.GetOwnerId(), ext, self.Id) + SyncCloudProject(ctx, userCred, zone, self.GetOwnerId(), ext, self) return zone, nil } diff --git a/pkg/compute/models/elastic_search.go b/pkg/compute/models/elastic_search.go index b75fda3e49..7ec94bd143 100644 --- a/pkg/compute/models/elastic_search.go +++ b/pkg/compute/models/elastic_search.go @@ -512,7 +512,7 @@ func (self *SElasticSearch) SyncWithCloudElasticSearch(ctx context.Context, user } if provider := self.GetCloudprovider(); provider != nil { - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) } db.OpsLog.LogSyncUpdate(self, diff, userCred) return nil @@ -615,7 +615,7 @@ func (self *SCloudregion) newFromCloudElasticSearch(ctx context.Context, userCre // 同步标签 syncVirtualResourceMetadata(ctx, userCred, &es, ext, false) // 同步项目归属 - SyncCloudProject(ctx, userCred, &es, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &es, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(&es, db.ACT_CREATE, es.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/elasticcache_instances.go b/pkg/compute/models/elasticcache_instances.go index 2aef9492ac..339bfa2463 100644 --- a/pkg/compute/models/elasticcache_instances.go +++ b/pkg/compute/models/elasticcache_instances.go @@ -650,7 +650,7 @@ func (self *SElasticcache) SyncWithCloudElasticcache(ctx context.Context, userCr if err != nil { return errors.Wrapf(err, "syncWithCloudElasticcache.Update") } - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), extInstance, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), extInstance, provider) if account := self.GetCloudaccount(); account != nil { syncVirtualResourceMetadata(ctx, userCred, self, extInstance, account.ReadOnly) } @@ -779,7 +779,7 @@ func (self *SCloudregion) newFromCloudElasticcache(ctx context.Context, userCred return nil, errors.Wrapf(err, "newFromCloudElasticcache.Insert") } - SyncCloudProject(ctx, userCred, &instance, provider.GetOwnerId(), extInstance, provider.Id) + SyncCloudProject(ctx, userCred, &instance, provider.GetOwnerId(), extInstance, provider) syncVirtualResourceMetadata(ctx, userCred, &instance, extInstance, false) db.OpsLog.LogEvent(&instance, db.ACT_CREATE, instance.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index f880424618..b31da88abf 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -584,7 +584,7 @@ func (self *SElasticip) SyncWithCloudEip(ctx context.Context, userCred mcclient. if res := self.GetAssociateResource(); res != nil && len(res.GetOwnerId().GetProjectId()) > 0 { self.SyncCloudProjectId(userCred, res.GetOwnerId()) } else { - SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, self.ManagerId) + SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, provider) } return nil @@ -650,7 +650,7 @@ func (manager *SElasticipManager) newFromCloudEip(ctx context.Context, userCred if res := eip.GetAssociateResource(); res != nil && len(res.GetOwnerId().GetProjectId()) > 0 { eip.SyncCloudProjectId(userCred, res.GetOwnerId()) } else { - SyncCloudProject(ctx, userCred, &eip, syncOwnerId, extEip, eip.ManagerId) + SyncCloudProject(ctx, userCred, &eip, syncOwnerId, extEip, provider) } db.OpsLog.LogEvent(&eip, db.ACT_CREATE, eip.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/globalvpcs.go b/pkg/compute/models/globalvpcs.go index deaa5bf1db..b35aa9e716 100644 --- a/pkg/compute/models/globalvpcs.go +++ b/pkg/compute/models/globalvpcs.go @@ -533,7 +533,10 @@ func (self *SGlobalVpc) newFromCloudSecurityGroup( }) syncVirtualResourceMetadata(ctx, userCred, ret, ext, false) - SyncCloudProject(ctx, userCred, ret, syncOwnerId, ext, ret.ManagerId) + + if provider := self.GetCloudprovider(); provider != nil { + SyncCloudProject(ctx, userCred, ret, syncOwnerId, ext, provider) + } rules, err := ext.GetRules() if err != nil { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index cf29ae717f..0130640dc2 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -3132,7 +3132,9 @@ func (g *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCre if account := host.GetCloudaccount(); account != nil { syncVirtualResourceMetadata(ctx, userCred, g, extVM, account.ReadOnly) } - SyncCloudProject(ctx, userCred, g, syncOwnerId, extVM, host.ManagerId) + if cloudprovider := host.GetCloudprovider(); cloudprovider != nil { + SyncCloudProject(ctx, userCred, g, syncOwnerId, extVM, cloudprovider) + } if provider.GetFactory().IsSupportPrepaidResources() && recycle { vhost, _ := g.GetHost() @@ -3235,7 +3237,10 @@ func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient. guest.SyncOsInfo(ctx, userCred, extVM) syncVirtualResourceMetadata(ctx, userCred, &guest, extVM, false) - SyncCloudProject(ctx, userCred, &guest, syncOwnerId, extVM, host.ManagerId) + + if cloudprovider := host.GetCloudprovider(); cloudprovider != nil { + SyncCloudProject(ctx, userCred, &guest, syncOwnerId, extVM, cloudprovider) + } db.OpsLog.LogEvent(&guest, db.ACT_CREATE, guest.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/ipv6_gateways.go b/pkg/compute/models/ipv6_gateways.go index 683d7eee35..e19781b992 100644 --- a/pkg/compute/models/ipv6_gateways.go +++ b/pkg/compute/models/ipv6_gateways.go @@ -181,7 +181,7 @@ func (self *SIPv6Gateway) SyncWithCloudIPv6Gateway(ctx context.Context, userCred syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) return nil } @@ -214,7 +214,7 @@ func (self *SVpc) newFromCloudIPv6Gateway(ctx context.Context, userCred mcclient } syncVirtualResourceMetadata(ctx, userCred, ret, ext, false) - SyncCloudProject(ctx, userCred, ret, provider.GetOwnerId(), ext, self.ManagerId) + SyncCloudProject(ctx, userCred, ret, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(ret, db.ACT_CREATE, ret.GetShortDesc(ctx), userCred) notifyclient.EventNotify(ctx, userCred, notifyclient.SEventNotifyParam{ diff --git a/pkg/compute/models/kafka.go b/pkg/compute/models/kafka.go index 440bd3cf5a..29e04dd90b 100644 --- a/pkg/compute/models/kafka.go +++ b/pkg/compute/models/kafka.go @@ -507,7 +507,7 @@ func (self *SKafka) SyncWithCloudKafka(ctx context.Context, userCred mcclient.To syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } if provider := self.GetCloudprovider(); provider != nil { - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) } db.OpsLog.LogSyncUpdate(self, diff, userCred) return nil @@ -611,7 +611,7 @@ func (self *SCloudregion) newFromCloudKafka(ctx context.Context, userCred mcclie // 同步标签 syncVirtualResourceMetadata(ctx, userCred, &kafka, ext, false) // 同步项目归属 - SyncCloudProject(ctx, userCred, &kafka, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &kafka, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(&kafka, db.ACT_CREATE, kafka.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/loadbalancercachedacls.go b/pkg/compute/models/loadbalancercachedacls.go index 0d3a44ce34..4175f89ef8 100644 --- a/pkg/compute/models/loadbalancercachedacls.go +++ b/pkg/compute/models/loadbalancercachedacls.go @@ -481,7 +481,7 @@ func (man *SCachedLoadbalancerAclManager) newFromCloudLoadbalancerAcl(ctx contex return nil, errors.Wrap(err, "cachedLoadbalancerAclManager.new.InsertAcl") } - SyncCloudProject(ctx, userCred, localAcl, provider.GetOwnerId(), extAcl, provider.GetId()) + SyncCloudProject(ctx, userCred, localAcl, provider.GetOwnerId(), extAcl, provider) } { diff --git a/pkg/compute/models/loadbalancercachedcertificates.go b/pkg/compute/models/loadbalancercachedcertificates.go index 42501de5ad..4da6fce604 100644 --- a/pkg/compute/models/loadbalancercachedcertificates.go +++ b/pkg/compute/models/loadbalancercachedcertificates.go @@ -312,7 +312,7 @@ func (self *SCloudprovider) newFromCloudLoadbalancerCertificate(ctx context.Cont return errors.Wrapf(err, "Insert lbcert") } - SyncCloudProject(ctx, userCred, c, self.GetOwnerId(), ext, self.GetId()) + SyncCloudProject(ctx, userCred, c, self.GetOwnerId(), ext, self) } lbcert.CertificateId = c.Id lbcert.Name = ext.GetName() diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index 93d3f302d9..c2e3a5e77b 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -1070,7 +1070,7 @@ func (region *SCloudregion) newFromCloudLoadbalancer(ctx context.Context, userCr } syncVirtualResourceMetadata(ctx, userCred, &lb, ext, false) - SyncCloudProject(ctx, userCred, &lb, syncOwnerId, ext, provider.Id) + SyncCloudProject(ctx, userCred, &lb, syncOwnerId, ext, provider) db.OpsLog.LogEvent(&lb, db.ACT_CREATE, lb.GetShortDesc(ctx), userCred) @@ -1285,7 +1285,7 @@ func (lb *SLoadbalancer) syncWithCloudLoadbalancer(ctx context.Context, userCred syncVirtualResourceMetadata(ctx, userCred, lb, ext, account.ReadOnly) } provider := lb.GetCloudprovider() - SyncCloudProject(ctx, userCred, lb, provider.GetOwnerId(), ext, lb.ManagerId) + SyncCloudProject(ctx, userCred, lb, provider.GetOwnerId(), ext, provider) lb.syncLoadbalancerNetwork(ctx, userCred, networkIds) return err diff --git a/pkg/compute/models/miscresources.go b/pkg/compute/models/miscresources.go index 2d20796fec..29f8da1e4e 100644 --- a/pkg/compute/models/miscresources.go +++ b/pkg/compute/models/miscresources.go @@ -192,7 +192,7 @@ func (self *SMiscResource) SyncWithCloudMiscResource(ctx context.Context, userCr if account := self.GetCloudaccount(); account != nil { syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) db.OpsLog.LogSyncUpdate(self, diff, userCred) return nil @@ -230,7 +230,7 @@ func (self *SCloudregion) newFromCloudMiscResource(ctx context.Context, userCred } syncVirtualResourceMetadata(ctx, userCred, &misc, ext, false) - SyncCloudProject(ctx, userCred, &misc, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &misc, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(&misc, db.ACT_CREATE, misc.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/modelarts_pools.go b/pkg/compute/models/modelarts_pools.go index 720ee64352..5046fccc92 100644 --- a/pkg/compute/models/modelarts_pools.go +++ b/pkg/compute/models/modelarts_pools.go @@ -462,7 +462,7 @@ func (self *SModelartsPool) SyncWithCloudModelartsPool(ctx context.Context, user } if provider := self.GetCloudprovider(); provider != nil { - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) } db.OpsLog.LogSyncUpdate(self, diff, userCred) return nil @@ -516,7 +516,7 @@ func (self *SCloudregion) newFromCloudModelartsPool(ctx context.Context, userCre // 同步标签 syncVirtualResourceMetadata(ctx, userCred, &pool, ext, false) // 同步项目归属 - SyncCloudProject(ctx, userCred, &pool, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &pool, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(&pool, db.ACT_CREATE, pool.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/mongodb.go b/pkg/compute/models/mongodb.go index ba03854303..95d8d0d571 100644 --- a/pkg/compute/models/mongodb.go +++ b/pkg/compute/models/mongodb.go @@ -572,7 +572,7 @@ func (self *SMongoDB) SyncWithCloudMongoDB(ctx context.Context, userCred mcclien syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } if provider := self.GetCloudprovider(); provider != nil { - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) } db.OpsLog.LogSyncUpdate(self, diff, userCred) return nil @@ -667,7 +667,7 @@ func (self *SCloudregion) newFromCloudMongoDB(ctx context.Context, userCred mccl }) syncVirtualResourceMetadata(ctx, userCred, &ins, ext, false) - SyncCloudProject(ctx, userCred, &ins, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, &ins, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(&ins, db.ACT_CREATE, ins.GetShortDesc(ctx), userCred) return &ins, nil diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index b4f58d0a4b..ae5c0be1b7 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -723,7 +723,6 @@ func (snet *SNetwork) syncRemoveCloudNetwork(ctx context.Context, userCred mccli } func (snet *SNetwork) SyncWithCloudNetwork(ctx context.Context, userCred mcclient.TokenCredential, extNet cloudprovider.ICloudNetwork, syncOwnerId mcclient.IIdentityProvider, provider *SCloudprovider) error { - vpc, _ := snet.GetVpc() diff, err := db.UpdateWithLock(ctx, snet, func() error { if options.Options.EnableSyncName { newName, _ := db.GenerateAlterName(snet, extNet.GetName()) @@ -760,9 +759,10 @@ func (snet *SNetwork) SyncWithCloudNetwork(ctx context.Context, userCred mcclien } //syncVirtualResourceMetadata(ctx, userCred, snet, extNet) - SyncCloudProject(ctx, userCred, snet, syncOwnerId, extNet, vpc.ManagerId) if provider != nil { + SyncCloudProject(ctx, userCred, snet, syncOwnerId, extNet, provider) + shareInfo := provider.getAccountShareInfo() if utils.IsInStringArray(provider.Provider, api.PRIVATE_CLOUD_PROVIDERS) && extNet.GetPublicScope() == rbacscope.ScopeNone { shareInfo = apis.SAccountShareInfo{ @@ -817,11 +817,10 @@ func (manager *SNetworkManager) newFromCloudNetwork(ctx context.Context, userCre return nil, errors.Wrapf(err, "Insert") } - vpc, _ := wire.GetVpc() syncVirtualResourceMetadata(ctx, userCred, &net, extNet, false) - SyncCloudProject(ctx, userCred, &net, syncOwnerId, extNet, vpc.ManagerId) if provider != nil { + SyncCloudProject(ctx, userCred, &net, syncOwnerId, extNet, provider) shareInfo := provider.getAccountShareInfo() if utils.IsInStringArray(provider.Provider, api.PRIVATE_CLOUD_PROVIDERS) && extNet.GetPublicScope() == rbacscope.ScopeNone { shareInfo = apis.SAccountShareInfo{ diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index 414ee84c7a..467a2126b9 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -1265,7 +1265,9 @@ func (self *SSecurityGroup) SyncWithCloudSecurityGroup( syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } - SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, self.ManagerId) + if provider, _ := self.GetCloudprovider(); provider != nil { + SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, provider) + } if !syncRule { return nil @@ -1331,7 +1333,7 @@ func (self *SCloudregion) newFromCloudSecurityGroup( } syncVirtualResourceMetadata(ctx, userCred, ret, ext, false) - SyncCloudProject(ctx, userCred, ret, syncOwnerId, ext, ret.ManagerId) + SyncCloudProject(ctx, userCred, ret, syncOwnerId, ext, provider) rules, err := ext.GetRules() if err != nil { diff --git a/pkg/compute/models/snapshotpolicy.go b/pkg/compute/models/snapshotpolicy.go index aee8daa5ff..22161c3b77 100644 --- a/pkg/compute/models/snapshotpolicy.go +++ b/pkg/compute/models/snapshotpolicy.go @@ -324,7 +324,7 @@ func (self *SSnapshotPolicy) SyncWithCloudPolicy( syncOwnerId := provider.GetOwnerId() - SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, provider.Id) + SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, provider) if account, _ := provider.GetCloudaccount(); account != nil { syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } @@ -376,7 +376,7 @@ func (self *SCloudregion) newFromCloudPolicy( if err != nil { return nil, errors.Wrapf(err, "Insert") } - SyncCloudProject(ctx, userCred, policy, syncOwnerId, ext, provider.Id) + SyncCloudProject(ctx, userCred, policy, syncOwnerId, ext, provider) syncVirtualResourceMetadata(ctx, userCred, policy, ext, false) err = policy.SyncDisks(ctx, userCred, ext) diff --git a/pkg/compute/models/snapshots.go b/pkg/compute/models/snapshots.go index dd2e050414..a98a5c06e7 100644 --- a/pkg/compute/models/snapshots.go +++ b/pkg/compute/models/snapshots.go @@ -1003,7 +1003,7 @@ func (self *SSnapshot) SyncWithCloudSnapshot(ctx context.Context, userCred mccli if disk != nil { self.SyncCloudProjectId(userCred, disk.GetOwnerId()) } else { - SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, self.GetCloudprovider().Id) + SyncCloudProject(ctx, userCred, self, syncOwnerId, ext, self.GetCloudprovider()) } return nil @@ -1056,7 +1056,7 @@ func (manager *SSnapshotManager) newFromCloudSnapshot(ctx context.Context, userC if localDisk != nil { snapshot.SyncCloudProjectId(userCred, localDisk.GetOwnerId()) } else { - SyncCloudProject(ctx, userCred, &snapshot, syncOwnerId, extSnapshot, snapshot.ManagerId) + SyncCloudProject(ctx, userCred, &snapshot, syncOwnerId, extSnapshot, provider) } db.OpsLog.LogEvent(&snapshot, db.ACT_CREATE, snapshot.GetShortDesc(ctx), userCred) diff --git a/pkg/compute/models/storagecachedimages.go b/pkg/compute/models/storagecachedimages.go index 1faf4b4bc0..3f90a95aed 100644 --- a/pkg/compute/models/storagecachedimages.go +++ b/pkg/compute/models/storagecachedimages.go @@ -413,7 +413,7 @@ func (self *SStoragecachedimage) syncWithCloudImage(ctx context.Context, userCre } if len(cachedImage.ExternalId) > 0 { self.SetStatus(userCred, image.GetStatus(), "") - return cachedImage.syncWithCloudImage(ctx, userCred, ownerId, image, managerId) + return cachedImage.syncWithCloudImage(ctx, userCred, ownerId, image, nil) } else { return nil } @@ -421,6 +421,7 @@ func (self *SStoragecachedimage) syncWithCloudImage(ctx context.Context, userCre func (manager *SStoragecachedimageManager) newFromCloudImage(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, image cloudprovider.ICloudImage, cache *SStoragecache) error { var cachedImage *SCachedimage + provider := cache.GetCloudprovider() imgObj, err := db.FetchByExternalId(CachedimageManager, image.GetGlobalId()) if err != nil { if err != sql.ErrNoRows { @@ -442,7 +443,7 @@ func (manager *SStoragecachedimageManager) newFromCloudImage(ctx context.Context } if cachedImage == nil { // no such image - cachedImage, err = CachedimageManager.newFromCloudImage(ctx, userCred, ownerId, image, cache.ManagerId) + cachedImage, err = CachedimageManager.newFromCloudImage(ctx, userCred, ownerId, image, provider) if err != nil { log.Errorf("CachedimageManager.newFromCloudImage fail %s", err) return err @@ -452,7 +453,7 @@ func (manager *SStoragecachedimageManager) newFromCloudImage(ctx context.Context cachedImage = imgObj.(*SCachedimage) } if len(cachedImage.ExternalId) > 0 { - cachedImage.syncWithCloudImage(ctx, userCred, ownerId, image, cache.ManagerId) + cachedImage.syncWithCloudImage(ctx, userCred, ownerId, image, provider) } scimg := manager.Register(ctx, userCred, cache.GetId(), cachedImage.GetId(), image.GetStatus()) if scimg == nil { diff --git a/pkg/compute/models/tablestores.go b/pkg/compute/models/tablestores.go index 40f28e176f..ce89c3e939 100644 --- a/pkg/compute/models/tablestores.go +++ b/pkg/compute/models/tablestores.go @@ -179,7 +179,7 @@ func (self *STablestore) SyncWithCloudTablestore(ctx context.Context, userCred m syncVirtualResourceMetadata(ctx, userCred, self, ext, account.ReadOnly) } - SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, self, provider.GetOwnerId(), ext, provider) return nil } @@ -212,7 +212,7 @@ func (self *SCloudregion) newFromCloudTablestore(ctx context.Context, userCred m } syncVirtualResourceMetadata(ctx, userCred, ret, ext, false) - SyncCloudProject(ctx, userCred, ret, provider.GetOwnerId(), ext, provider.Id) + SyncCloudProject(ctx, userCred, ret, provider.GetOwnerId(), ext, provider) db.OpsLog.LogEvent(ret, db.ACT_CREATE, ret.GetShortDesc(ctx), userCred) notifyclient.EventNotify(ctx, userCred, notifyclient.SEventNotifyParam{