From 97877eb3f69b1ef60d37bbc5a9861c94084ff2c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 15 Aug 2018 15:05:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=9A=E8=B4=A6=E5=8F=B7=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BE=9D=E8=B5=96manager=5Fid=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/cloudregions.go | 2 +- pkg/compute/models/hosts.go | 9 ++++++--- pkg/compute/models/storages.go | 9 ++++++--- pkg/compute/models/vpcs.go | 9 ++++++--- pkg/compute/tasks/cloud_provider_sync_info_task.go | 6 +++--- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index 3ac4efcade..e3c31efbba 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -220,7 +220,7 @@ func (self *SCloudregion) AllowPerformDefaultVpc(ctx context.Context, userCred m } func (self *SCloudregion) PerformDefaultVpc(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - vpcs, err := VpcManager.getVpcsByRegion(self) + vpcs, err := VpcManager.getVpcsByRegion(self, nil) if err != nil { return nil, err } diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index e8858bcb8b..6b47c4e370 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -759,9 +759,12 @@ func (self *SHost) GetHostDriver() IHostDriver { return GetHostDriver(self.HostType) } -func (manager *SHostManager) getHostsByZone(zone *SZone) ([]SHost, error) { +func (manager *SHostManager) getHostsByZone(zone *SZone, provider *SCloudprovider) ([]SHost, error) { hosts := make([]SHost, 0) q := manager.Query().Equals("zone_id", zone.Id) + if provider != nil { + q = q.Equals("manager_id", provider.Id) + } err := db.FetchModelObjects(manager, q, &hosts) if err != nil { log.Errorf("%s", err) @@ -770,12 +773,12 @@ func (manager *SHostManager) getHostsByZone(zone *SZone) ([]SHost, error) { return hosts, nil } -func (manager *SHostManager) SyncHosts(ctx context.Context, userCred mcclient.TokenCredential, zone *SZone, hosts []cloudprovider.ICloudHost) ([]SHost, []cloudprovider.ICloudHost, compare.SyncResult) { +func (manager *SHostManager) SyncHosts(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, zone *SZone, hosts []cloudprovider.ICloudHost) ([]SHost, []cloudprovider.ICloudHost, compare.SyncResult) { localHosts := make([]SHost, 0) remoteHosts := make([]cloudprovider.ICloudHost, 0) syncResult := compare.SyncResult{} - dbHosts, err := manager.getHostsByZone(zone) + dbHosts, err := manager.getHostsByZone(zone, provider) if err != nil { syncResult.Error(err) return nil, nil, syncResult diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index 37c1f6fc13..4ac8ea7587 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -238,9 +238,12 @@ func (self *SStorage) SyncStatusWithHosts() { } } -func (manager *SStorageManager) getStoragesByZoneId(zoneId string) ([]SStorage, error) { +func (manager *SStorageManager) getStoragesByZoneId(zoneId string, provider *SCloudprovider) ([]SStorage, error) { storages := make([]SStorage, 0) q := manager.Query().Equals("zone_id", zoneId) + if provider != nil { + q = q.Equals("manager_id", provider.Id) + } err := db.FetchModelObjects(manager, q, &storages) if err != nil { log.Errorf("getStoragesByZoneId fail %s", err) @@ -264,7 +267,7 @@ func (manager *SStorageManager) scanLegacyStorages() error { return nil } -func (manager *SStorageManager) SyncStorages(ctx context.Context, userCred mcclient.TokenCredential, zone *SZone, storages []cloudprovider.ICloudStorage) ([]SStorage, []cloudprovider.ICloudStorage, compare.SyncResult) { +func (manager *SStorageManager) SyncStorages(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, zone *SZone, storages []cloudprovider.ICloudStorage) ([]SStorage, []cloudprovider.ICloudStorage, compare.SyncResult) { localStorages := make([]SStorage, 0) remoteStorages := make([]cloudprovider.ICloudStorage, 0) syncResult := compare.SyncResult{} @@ -275,7 +278,7 @@ func (manager *SStorageManager) SyncStorages(ctx context.Context, userCred mccli return nil, nil, syncResult } - dbStorages, err := manager.getStoragesByZoneId(zone.Id) + dbStorages, err := manager.getStoragesByZoneId(zone.Id, provider) if err != nil { syncResult.Error(err) return nil, nil, syncResult diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index bba2aed865..1b7cbd74f3 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -146,9 +146,12 @@ func (self *SVpc) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCr return self.getMoreDetails(extra) } -func (manager *SVpcManager) getVpcsByRegion(region *SCloudregion) ([]SVpc, error) { +func (manager *SVpcManager) getVpcsByRegion(region *SCloudregion, provider *SCloudprovider) ([]SVpc, error) { vpcs := make([]SVpc, 0) q := manager.Query().Equals("cloudregion_id", region.Id) + if provider != nil { + q = q.Equals("manager_id", provider.Id) + } err := db.FetchModelObjects(manager, q, &vpcs) if err != nil { return nil, err @@ -167,12 +170,12 @@ func (self *SVpc) setDefault(def bool) error { return err } -func (manager *SVpcManager) SyncVPCs(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, vpcs []cloudprovider.ICloudVpc) ([]SVpc, []cloudprovider.ICloudVpc, compare.SyncResult) { +func (manager *SVpcManager) SyncVPCs(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, region *SCloudregion, vpcs []cloudprovider.ICloudVpc) ([]SVpc, []cloudprovider.ICloudVpc, compare.SyncResult) { localVPCs := make([]SVpc, 0) remoteVPCs := make([]cloudprovider.ICloudVpc, 0) syncResult := compare.SyncResult{} - dbVPCs, err := manager.getVpcsByRegion(region) + dbVPCs, err := manager.getVpcsByRegion(region, provider) if err != nil { syncResult.Error(err) return nil, nil, syncResult diff --git a/pkg/compute/tasks/cloud_provider_sync_info_task.go b/pkg/compute/tasks/cloud_provider_sync_info_task.go index b06d05b483..997f0792f3 100644 --- a/pkg/compute/tasks/cloud_provider_sync_info_task.go +++ b/pkg/compute/tasks/cloud_provider_sync_info_task.go @@ -130,7 +130,7 @@ func syncRegionVPCs(ctx context.Context, provider *models.SCloudprovider, task * return } - localVpcs, remoteVpcs, result := models.VpcManager.SyncVPCs(ctx, task.UserCred, localRegion, vpcs) + localVpcs, remoteVpcs, result := models.VpcManager.SyncVPCs(ctx, task.UserCred, provider, localRegion, vpcs) msg := result.Result() log.Infof("SyncVPCs for region %s result: %s", localRegion.Name, msg) if result.IsError() { @@ -209,7 +209,7 @@ func syncZoneStorages(ctx context.Context, provider *models.SCloudprovider, task logSyncFailed(provider, task, msg) return } - localStorages, remoteStorages, result := models.StorageManager.SyncStorages(ctx, task.UserCred, localZone, storages) + localStorages, remoteStorages, result := models.StorageManager.SyncStorages(ctx, task.UserCred, provider, localZone, storages) msg := result.Result() log.Infof("SyncZones for region %s result: %s", localZone.Name, msg) if result.IsError() { @@ -267,7 +267,7 @@ func syncZoneHosts(ctx context.Context, provider *models.SCloudprovider, task *C logSyncFailed(provider, task, msg) return } - localHosts, remoteHosts, result := models.HostManager.SyncHosts(ctx, task.UserCred, localZone, hosts) + localHosts, remoteHosts, result := models.HostManager.SyncHosts(ctx, task.UserCred, provider, localZone, hosts) msg := result.Result() log.Infof("SyncHosts for zone %s result: %s", localZone.Name, msg) if result.IsError() { From 7cb13784c2696ef5acf9c3cd67925aa0f542e7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 15 Aug 2018 15:41:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=89=8Drefresh=E8=B5=84=E6=BA=90=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/disks.go | 1 + pkg/compute/models/guests.go | 2 +- pkg/compute/models/networks.go | 1 + pkg/compute/models/secgroups.go | 1 + pkg/compute/models/vpcs.go | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 2214102b4e..35aba24217 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -508,6 +508,7 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To func (self *SDisk) syncWithCloudDisk(userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk) error { _, err := self.GetModelManager().TableSpec().Update(self, func() error { + extDisk.Refresh() self.Name = extDisk.GetName() self.Status = extDisk.GetStatus() self.DiskFormat = extDisk.GetDiskFormat() diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 51be3adaf1..c12f0e4221 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -1186,7 +1186,7 @@ func (self *SGuest) GetIsolatedDevices() []SIsolatedDevice { func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, extVM cloudprovider.ICloudVM) error { diff, err := GuestManager.TableSpec().Update(self, func() error { - + extVM.Refresh() self.Name = extVM.GetName() self.Status = extVM.GetStatus() self.VcpuCount = extVM.GetVcpuCount() diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index e4df6a1ea0..a2d86c4f5c 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -458,6 +458,7 @@ func (manager *SNetworkManager) SyncNetworks(ctx context.Context, userCred mccli func (self *SNetwork) SyncWithCloudNetwork(userCred mcclient.TokenCredential, extNet cloudprovider.ICloudNetwork) error { _, err := self.GetModelManager().TableSpec().Update(self, func() error { + extNet.Refresh() self.Name = extNet.GetName() self.Status = extNet.GetStatus() self.GuestIpStart = extNet.GetIpStart() diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index 8f13b65782..e2418d3ed1 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -238,6 +238,7 @@ func (manager *SSecurityGroupManager) SyncSecgroups(ctx context.Context, userCre func (self *SSecurityGroup) SyncWithCloudSecurityGroup(userCred mcclient.TokenCredential, extSec cloudprovider.ICloudSecurityGroup) error { if _, err := self.GetModelManager().TableSpec().Update(self, func() error { + extSec.Refresh() self.Name = extSec.GetName() self.Description = extSec.GetDescription() return nil diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 1b7cbd74f3..368a4a963b 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -240,6 +240,7 @@ func (manager *SVpcManager) SyncVPCs(ctx context.Context, userCred mcclient.Toke func (self *SVpc) SyncWithCloudVpc(extVPC cloudprovider.ICloudVpc) error { _, err := self.GetModelManager().TableSpec().Update(self, func() error { + extVPC.Refresh() self.Name = extVPC.GetName() self.Status = extVPC.GetStatus() self.CidrBlock = extVPC.GetCidrBlock()