mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
Merge branch 'release/2.4.0' of ssh://git.yunion.io/~qiujian/onecloud into hotfix/qj-resolve-conflict-2.5.0-20190213
Conflicts: pkg/compute/models/guests.go pkg/compute/service/service.go pkg/compute/tasks/cloud_provider_sync_info_task.go
This commit is contained in:
@@ -49,6 +49,8 @@ type ICloudProvider interface {
|
||||
GetBalance() (float64, error)
|
||||
|
||||
GetSubAccounts() ([]SSubAccount, error)
|
||||
|
||||
SupportPrepaidResources() bool
|
||||
}
|
||||
|
||||
var providerTable map[string]ICloudProviderFactory
|
||||
|
||||
+14
-12
@@ -873,7 +873,7 @@ func (manager *SDiskManager) getDisksByStorage(storage *SStorage) ([]SDisk, erro
|
||||
return disks, nil
|
||||
}
|
||||
|
||||
func (manager *SDiskManager) syncCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, vdisk cloudprovider.ICloudDisk, index int, projectId string, projectSync bool) (*SDisk, error) {
|
||||
func (manager *SDiskManager) syncCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, vdisk cloudprovider.ICloudDisk, index int, projectId string, projectSync bool) (*SDisk, error) {
|
||||
diskObj, err := manager.FetchByExternalId(vdisk.GetGlobalId())
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
@@ -885,13 +885,13 @@ func (manager *SDiskManager) syncCloudDisk(ctx context.Context, userCred mcclien
|
||||
return nil, err
|
||||
}
|
||||
storage := storageObj.(*SStorage)
|
||||
return manager.newFromCloudDisk(ctx, userCred, vdisk, storage, -1, projectId)
|
||||
return manager.newFromCloudDisk(ctx, userCred, provider, vdisk, storage, -1, projectId)
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
disk := diskObj.(*SDisk)
|
||||
err = disk.syncWithCloudDisk(ctx, userCred, vdisk, index, projectId, projectSync)
|
||||
err = disk.syncWithCloudDisk(ctx, userCred, provider, vdisk, index, projectId, projectSync)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -899,7 +899,7 @@ func (manager *SDiskManager) syncCloudDisk(ctx context.Context, userCred mcclien
|
||||
}
|
||||
}
|
||||
|
||||
func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.TokenCredential, storage *SStorage, disks []cloudprovider.ICloudDisk, projectId string, projectSync bool) ([]SDisk, []cloudprovider.ICloudDisk, compare.SyncResult) {
|
||||
func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, storage *SStorage, disks []cloudprovider.ICloudDisk, projectId string, projectSync bool) ([]SDisk, []cloudprovider.ICloudDisk, compare.SyncResult) {
|
||||
localDisks := make([]SDisk, 0)
|
||||
remoteDisks := make([]cloudprovider.ICloudDisk, 0)
|
||||
syncResult := compare.SyncResult{}
|
||||
@@ -931,7 +931,7 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
|
||||
}
|
||||
|
||||
for i := 0; i < len(commondb); i += 1 {
|
||||
err = commondb[i].syncWithCloudDisk(ctx, userCred, commonext[i], -1, projectId, projectSync)
|
||||
err = commondb[i].syncWithCloudDisk(ctx, userCred, provider, commonext[i], -1, projectId, projectSync)
|
||||
if err != nil {
|
||||
syncResult.UpdateError(err)
|
||||
} else {
|
||||
@@ -942,7 +942,7 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
|
||||
}
|
||||
|
||||
for i := 0; i < len(added); i += 1 {
|
||||
new, err := manager.newFromCloudDisk(ctx, userCred, added[i], storage, -1, projectId)
|
||||
new, err := manager.newFromCloudDisk(ctx, userCred, provider, added[i], storage, -1, projectId)
|
||||
if err != nil {
|
||||
syncResult.AddError(err)
|
||||
} else {
|
||||
@@ -955,10 +955,10 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
|
||||
return localDisks, remoteDisks, syncResult
|
||||
}
|
||||
|
||||
func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk, index int, projectId string, projectSync bool) error {
|
||||
func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, extDisk cloudprovider.ICloudDisk, index int, projectId string, projectSync bool) error {
|
||||
recycle := false
|
||||
guests := self.GetGuests()
|
||||
if len(guests) == 1 && guests[0].IsPrepaidRecycle() {
|
||||
if provider.SupportPrepaidResources() && len(guests) == 1 && guests[0].IsPrepaidRecycle() {
|
||||
recycle = true
|
||||
}
|
||||
_, err := self.GetModelManager().TableSpec().Update(self, func() error {
|
||||
@@ -981,7 +981,7 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke
|
||||
|
||||
self.IsEmulated = extDisk.IsEmulated()
|
||||
|
||||
if !recycle {
|
||||
if provider.SupportPrepaidResources() && !recycle {
|
||||
self.BillingType = extDisk.GetBillingType()
|
||||
self.ExpiredAt = extDisk.GetExpiredAt()
|
||||
}
|
||||
@@ -1013,7 +1013,7 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SDiskManager) newFromCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk, storage *SStorage, index int, projectId string) (*SDisk, error) {
|
||||
func (manager *SDiskManager) newFromCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, extDisk cloudprovider.ICloudDisk, storage *SStorage, index int, projectId string) (*SDisk, error) {
|
||||
disk := SDisk{}
|
||||
disk.SetModelManager(manager)
|
||||
|
||||
@@ -1036,8 +1036,10 @@ func (manager *SDiskManager) newFromCloudDisk(ctx context.Context, userCred mccl
|
||||
|
||||
disk.IsEmulated = extDisk.IsEmulated()
|
||||
|
||||
disk.BillingType = extDisk.GetBillingType()
|
||||
disk.ExpiredAt = extDisk.GetExpiredAt()
|
||||
if provider.SupportPrepaidResources() {
|
||||
disk.BillingType = extDisk.GetBillingType()
|
||||
disk.ExpiredAt = extDisk.GetExpiredAt()
|
||||
}
|
||||
|
||||
err := manager.TableSpec().Insert(&disk)
|
||||
if err != nil {
|
||||
|
||||
@@ -1661,10 +1661,13 @@ func (self *SGuest) GetIsolatedDevices() []SIsolatedDevice {
|
||||
return IsolatedDeviceManager.findAttachedDevicesOfGuest(self)
|
||||
}
|
||||
|
||||
func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, extVM cloudprovider.ICloudVM, projectId string, projectSync bool) error {
|
||||
func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, extVM cloudprovider.ICloudVM, projectId string, projectSync bool) error {
|
||||
lockman.LockObject(ctx, self)
|
||||
defer lockman.ReleaseObject(ctx, self)
|
||||
|
||||
recycle := false
|
||||
|
||||
if self.IsPrepaidRecycle() {
|
||||
if provider.SupportPrepaidResources() && self.IsPrepaidRecycle() {
|
||||
recycle = true
|
||||
}
|
||||
|
||||
@@ -1710,7 +1713,7 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
|
||||
|
||||
self.IsEmulated = extVM.IsEmulated()
|
||||
|
||||
if !recycle {
|
||||
if provider.SupportPrepaidResources() && !recycle {
|
||||
self.BillingType = extVM.GetBillingType()
|
||||
self.ExpiredAt = extVM.GetExpiredAt()
|
||||
}
|
||||
@@ -1760,7 +1763,7 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
|
||||
}
|
||||
}
|
||||
|
||||
if recycle {
|
||||
if provider.SupportPrepaidResources() && recycle {
|
||||
vhost := self.GetHost()
|
||||
err = vhost.syncWithCloudPrepaidVM(extVM, host, projectSync)
|
||||
if err != nil {
|
||||
@@ -1771,7 +1774,7 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, extVM cloudprovider.ICloudVM, projectId string) (*SGuest, error) {
|
||||
func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, extVM cloudprovider.ICloudVM, projectId string) (*SGuest, error) {
|
||||
|
||||
guest := SGuest{}
|
||||
guest.SetModelManager(manager)
|
||||
@@ -1790,8 +1793,10 @@ func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient.
|
||||
|
||||
guest.IsEmulated = extVM.IsEmulated()
|
||||
|
||||
guest.BillingType = extVM.GetBillingType()
|
||||
guest.ExpiredAt = extVM.GetExpiredAt()
|
||||
if provider.SupportPrepaidResources() {
|
||||
guest.BillingType = extVM.GetBillingType()
|
||||
guest.ExpiredAt = extVM.GetExpiredAt()
|
||||
}
|
||||
|
||||
guest.HostId = host.Id
|
||||
|
||||
@@ -2144,7 +2149,7 @@ type sSyncDiskPair struct {
|
||||
vdisk cloudprovider.ICloudDisk
|
||||
}
|
||||
|
||||
func (self *SGuest) SyncVMDisks(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, vdisks []cloudprovider.ICloudDisk, projectId string, projectSync bool) compare.SyncResult {
|
||||
func (self *SGuest) SyncVMDisks(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, vdisks []cloudprovider.ICloudDisk, projectId string, projectSync bool) compare.SyncResult {
|
||||
result := compare.SyncResult{}
|
||||
|
||||
newdisks := make([]sSyncDiskPair, 0)
|
||||
@@ -2152,7 +2157,7 @@ func (self *SGuest) SyncVMDisks(ctx context.Context, userCred mcclient.TokenCred
|
||||
if len(vdisks[i].GetGlobalId()) == 0 {
|
||||
continue
|
||||
}
|
||||
disk, err := DiskManager.syncCloudDisk(ctx, userCred, vdisks[i], i, projectId, projectSync)
|
||||
disk, err := DiskManager.syncCloudDisk(ctx, userCred, provider, vdisks[i], i, projectId, projectSync)
|
||||
if err != nil {
|
||||
log.Errorf("syncCloudDisk error: %v", err)
|
||||
result.Error(err)
|
||||
@@ -3427,6 +3432,22 @@ func (manager *SGuestManager) getExpiredPrepaidGuests() []SGuest {
|
||||
return guests
|
||||
}
|
||||
|
||||
func (self *SGuest) doExternalSync(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
host := self.GetHost()
|
||||
if host == nil {
|
||||
return fmt.Errorf("no host???")
|
||||
}
|
||||
ihost, iprovider, err := host.GetIHostAndProvider()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
iVM, err := ihost.GetIVMById(self.ExternalId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return self.syncWithCloudVM(ctx, userCred, iprovider, host, iVM, "", false)
|
||||
}
|
||||
|
||||
func (manager *SGuestManager) DeleteExpiredPrepaidServers(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
|
||||
guests := manager.getExpiredPrepaidGuests()
|
||||
if guests == nil {
|
||||
@@ -3434,6 +3455,12 @@ func (manager *SGuestManager) DeleteExpiredPrepaidServers(ctx context.Context, u
|
||||
}
|
||||
for i := 0; i < len(guests); i += 1 {
|
||||
// fake delete expired prepaid servers
|
||||
if len(guests[i].ExternalId) > 0 {
|
||||
err := guests[i].doExternalSync(ctx, userCred)
|
||||
if err == nil && guests[i].IsValidPrePaid() {
|
||||
continue
|
||||
}
|
||||
}
|
||||
guests[i].SetDisableDelete(false)
|
||||
guests[i].StartDeleteGuestTask(ctx, userCred, "", false, false)
|
||||
}
|
||||
|
||||
@@ -646,7 +646,13 @@ func (host *SHost) RebuildRecycledGuest(ctx context.Context, userCred mcclient.T
|
||||
return err
|
||||
}
|
||||
|
||||
err = guest.syncWithCloudVM(ctx, userCred, &oHost, extVM, "", false)
|
||||
iprovider, err := oHost.GetDriver()
|
||||
if err != nil {
|
||||
log.Errorf("oHost.GetDriver fail %s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
err = guest.syncWithCloudVM(ctx, userCred, iprovider, &oHost, extVM, "", false)
|
||||
if err != nil {
|
||||
log.Errorf("guest.syncWithCloudVM fail %s", err)
|
||||
return err
|
||||
@@ -666,7 +672,7 @@ func (host *SHost) RebuildRecycledGuest(ctx context.Context, userCred mcclient.T
|
||||
log.Errorf("disk.SetExternalId fail %s", err)
|
||||
return err
|
||||
}
|
||||
err = disk.syncWithCloudDisk(ctx, userCred, idisks[i], i, "", false)
|
||||
err = disk.syncWithCloudDisk(ctx, userCred, iprovider, idisks[i], i, "", false)
|
||||
if err != nil {
|
||||
log.Errorf("disk.syncWithCloudDisk fail %s", err)
|
||||
return err
|
||||
|
||||
@@ -1606,7 +1606,7 @@ func (self *SHost) newCloudHostWire(ctx context.Context, userCred mcclient.Token
|
||||
return err
|
||||
}
|
||||
|
||||
func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCredential, vms []cloudprovider.ICloudVM, projectId string, projectSync bool) ([]SGuest, []cloudprovider.ICloudVM, compare.SyncResult) {
|
||||
func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCredential, iprovider cloudprovider.ICloudProvider, vms []cloudprovider.ICloudVM, projectId string, projectSync bool) ([]SGuest, []cloudprovider.ICloudVM, compare.SyncResult) {
|
||||
localVMs := make([]SGuest, 0)
|
||||
remoteVMs := make([]cloudprovider.ICloudVM, 0)
|
||||
syncResult := compare.SyncResult{}
|
||||
@@ -1634,7 +1634,7 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
|
||||
}
|
||||
|
||||
for i := 0; i < len(commondb); i += 1 {
|
||||
err := commondb[i].syncWithCloudVM(ctx, userCred, self, commonext[i], projectId, projectSync)
|
||||
err := commondb[i].syncWithCloudVM(ctx, userCred, iprovider, self, commonext[i], projectId, projectSync)
|
||||
if err != nil {
|
||||
syncResult.UpdateError(err)
|
||||
} else {
|
||||
@@ -1656,7 +1656,7 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
|
||||
continue
|
||||
}
|
||||
}
|
||||
new, err := GuestManager.newCloudVM(ctx, userCred, self, added[i], projectId)
|
||||
new, err := GuestManager.newCloudVM(ctx, userCred, iprovider, self, added[i], projectId)
|
||||
if err != nil {
|
||||
syncResult.AddError(err)
|
||||
} else {
|
||||
@@ -1884,9 +1884,14 @@ func (self *SHost) GetIZone() (cloudprovider.ICloudZone, error) {
|
||||
*/
|
||||
|
||||
func (self *SHost) GetIHost() (cloudprovider.ICloudHost, error) {
|
||||
host, _, err := self.GetIHostAndProvider()
|
||||
return host, err
|
||||
}
|
||||
|
||||
func (self *SHost) GetIHostAndProvider() (cloudprovider.ICloudHost, cloudprovider.ICloudProvider, error) {
|
||||
provider, err := self.GetDriver()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("No cloudprovide for host: %s", err)
|
||||
return nil, nil, fmt.Errorf("No cloudprovide for host: %s", err)
|
||||
}
|
||||
var iregion cloudprovider.ICloudRegion
|
||||
if provider.IsOnPremiseInfrastructure() {
|
||||
@@ -1896,20 +1901,20 @@ func (self *SHost) GetIHost() (cloudprovider.ICloudHost, error) {
|
||||
if region == nil {
|
||||
msg := "fail to find region of host???"
|
||||
log.Errorf(msg)
|
||||
return nil, fmt.Errorf(msg)
|
||||
return nil, nil, fmt.Errorf(msg)
|
||||
}
|
||||
iregion, err = provider.GetIRegionById(region.ExternalId)
|
||||
}
|
||||
if err != nil {
|
||||
log.Errorf("fail to find iregion: %s", err)
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
ihost, err := iregion.GetIHostById(self.ExternalId)
|
||||
if err != nil {
|
||||
log.Errorf("fail to find ihost by id %s %s", self.ExternalId, err)
|
||||
return nil, fmt.Errorf("fail to find ihost by id %s", err)
|
||||
return nil, nil, fmt.Errorf("fail to find ihost by id %s", err)
|
||||
}
|
||||
return ihost, nil
|
||||
return ihost, provider, nil
|
||||
}
|
||||
|
||||
func (self *SHost) GetIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
|
||||
@@ -144,8 +144,8 @@ func syncPublicCloudProviderInfo(ctx context.Context, provider *models.SCloudpro
|
||||
if len(syncRange.Zone) > 0 && !utils.IsInStringArray(localZones[j].Id, syncRange.Zone) {
|
||||
continue
|
||||
}
|
||||
syncZoneStorages(ctx, provider, task, &localZones[j], remoteZones[j], syncRange)
|
||||
syncZoneHosts(ctx, provider, task, &localZones[j], remoteZones[j], syncRange)
|
||||
syncZoneStorages(ctx, provider, task, driver, &localZones[j], remoteZones[j], syncRange)
|
||||
syncZoneHosts(ctx, provider, task, driver, &localZones[j], remoteZones[j], syncRange)
|
||||
}
|
||||
}
|
||||
syncRegionSnapshots(ctx, provider, task, &localRegions[i], remoteRegions[i], syncRange)
|
||||
@@ -468,7 +468,7 @@ func syncWireNetworks(ctx context.Context, provider *models.SCloudprovider, task
|
||||
logclient.AddActionLog(provider, getAction(task.GetParams()), notes, task.GetUserCred(), true)
|
||||
}
|
||||
|
||||
func syncZoneStorages(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localZone *models.SZone, remoteZone cloudprovider.ICloudZone, syncRange *models.SSyncRange) {
|
||||
func syncZoneStorages(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, driver cloudprovider.ICloudProvider, localZone *models.SZone, remoteZone cloudprovider.ICloudZone, syncRange *models.SSyncRange) {
|
||||
storages, err := remoteZone.GetIStorages()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("GetIStorages for zone %s failed %s", remoteZone.GetName(), err)
|
||||
@@ -489,7 +489,7 @@ func syncZoneStorages(ctx context.Context, provider *models.SCloudprovider, task
|
||||
|
||||
for i := 0; i < len(localStorages); i += 1 {
|
||||
syncStorageCaches(ctx, provider, task, &localStorages[i], remoteStorages[i])
|
||||
syncStorageDisks(ctx, provider, task, &localStorages[i], remoteStorages[i], syncRange)
|
||||
syncStorageDisks(ctx, provider, task, driver, &localStorages[i], remoteStorages[i], syncRange)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -510,7 +510,7 @@ func syncStorageCaches(ctx context.Context, provider *models.SCloudprovider, tas
|
||||
}
|
||||
}
|
||||
|
||||
func syncStorageDisks(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localStorage *models.SStorage, remoteStorage cloudprovider.ICloudStorage, syncRange *models.SSyncRange) {
|
||||
func syncStorageDisks(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, driver cloudprovider.ICloudProvider, localStorage *models.SStorage, remoteStorage cloudprovider.ICloudStorage, syncRange *models.SSyncRange) {
|
||||
disks, err := remoteStorage.GetIDisks()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("GetIDisks for storage %s failed %s", remoteStorage.GetName(), err)
|
||||
@@ -518,7 +518,7 @@ func syncStorageDisks(ctx context.Context, provider *models.SCloudprovider, task
|
||||
logSyncFailed(provider, task, msg)
|
||||
return
|
||||
}
|
||||
_, _, result := models.DiskManager.SyncDisks(ctx, task.UserCred, localStorage, disks, provider.ProjectId, syncRange.ProjectSync)
|
||||
_, _, result := models.DiskManager.SyncDisks(ctx, task.UserCred, driver, localStorage, disks, provider.ProjectId, syncRange.ProjectSync)
|
||||
msg := result.Result()
|
||||
notes := fmt.Sprintf("SyncDisks for storage %s result: %s", localStorage.Name, msg)
|
||||
log.Infof(notes)
|
||||
@@ -530,7 +530,7 @@ func syncStorageDisks(ctx context.Context, provider *models.SCloudprovider, task
|
||||
logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true)
|
||||
}
|
||||
|
||||
func syncZoneHosts(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localZone *models.SZone, remoteZone cloudprovider.ICloudZone, syncRange *models.SSyncRange) {
|
||||
func syncZoneHosts(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, driver cloudprovider.ICloudProvider, localZone *models.SZone, remoteZone cloudprovider.ICloudZone, syncRange *models.SSyncRange) {
|
||||
hosts, err := remoteZone.GetIHosts()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("GetIHosts for zone %s failed %s", remoteZone.GetName(), err)
|
||||
@@ -554,7 +554,7 @@ func syncZoneHosts(ctx context.Context, provider *models.SCloudprovider, task *C
|
||||
}
|
||||
syncHostStorages(ctx, provider, task, &localHosts[i], remoteHosts[i])
|
||||
syncHostWires(ctx, provider, task, &localHosts[i], remoteHosts[i])
|
||||
syncHostVMs(ctx, provider, task, &localHosts[i], remoteHosts[i], syncRange)
|
||||
syncHostVMs(ctx, provider, task, driver, &localHosts[i], remoteHosts[i], syncRange)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -602,7 +602,7 @@ func syncHostWires(ctx context.Context, provider *models.SCloudprovider, task ta
|
||||
logclient.AddActionLog(provider, getAction(task.GetParams()), notes, task.GetUserCred(), true)
|
||||
}
|
||||
|
||||
func syncHostVMs(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localHost *models.SHost, remoteHost cloudprovider.ICloudHost, syncRange *models.SSyncRange) {
|
||||
func syncHostVMs(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, driver cloudprovider.ICloudProvider, localHost *models.SHost, remoteHost cloudprovider.ICloudHost, syncRange *models.SSyncRange) {
|
||||
vms, err := remoteHost.GetIVMs()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("GetIVMs for host %s failed %s", remoteHost.GetName(), err)
|
||||
@@ -610,7 +610,7 @@ func syncHostVMs(ctx context.Context, provider *models.SCloudprovider, task *Clo
|
||||
logSyncFailed(provider, task, msg)
|
||||
return
|
||||
}
|
||||
localVMs, remoteVMs, result := localHost.SyncHostVMs(ctx, task.UserCred, vms, provider.ProjectId, syncRange.ProjectSync)
|
||||
localVMs, remoteVMs, result := localHost.SyncHostVMs(ctx, task.UserCred, driver, vms, provider.ProjectId, syncRange.ProjectSync)
|
||||
msg := result.Result()
|
||||
notes := fmt.Sprintf("SyncHostVMs for host %s result: %s", localHost.Name, msg)
|
||||
log.Infof(notes)
|
||||
@@ -622,7 +622,7 @@ func syncHostVMs(ctx context.Context, provider *models.SCloudprovider, task *Clo
|
||||
logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true)
|
||||
for i := 0; i < len(localVMs); i += 1 {
|
||||
syncVMNics(ctx, provider, task, localHost, &localVMs[i], remoteVMs[i])
|
||||
syncVMDisks(ctx, provider, task, localHost, &localVMs[i], remoteVMs[i], syncRange)
|
||||
syncVMDisks(ctx, provider, task, driver, localHost, &localVMs[i], remoteVMs[i], syncRange)
|
||||
syncVMEip(ctx, provider, task, &localVMs[i], remoteVMs[i])
|
||||
|
||||
if localVMs[i].Status == models.VM_RUNNING {
|
||||
@@ -651,7 +651,7 @@ func syncVMNics(ctx context.Context, provider *models.SCloudprovider, task *Clou
|
||||
logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true)
|
||||
}
|
||||
|
||||
func syncVMDisks(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, host *models.SHost, localVM *models.SGuest, remoteVM cloudprovider.ICloudVM, syncRange *models.SSyncRange) {
|
||||
func syncVMDisks(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, driver cloudprovider.ICloudProvider, host *models.SHost, localVM *models.SGuest, remoteVM cloudprovider.ICloudVM, syncRange *models.SSyncRange) {
|
||||
disks, err := remoteVM.GetIDisks()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("GetIDisks for VM %s failed %s", remoteVM.GetName(), err)
|
||||
@@ -659,7 +659,7 @@ func syncVMDisks(ctx context.Context, provider *models.SCloudprovider, task *Clo
|
||||
logSyncFailed(provider, task, msg)
|
||||
return
|
||||
}
|
||||
result := localVM.SyncVMDisks(ctx, task.UserCred, host, disks, provider.ProjectId, syncRange.ProjectSync)
|
||||
result := localVM.SyncVMDisks(ctx, task.UserCred, driver, host, disks, provider.ProjectId, syncRange.ProjectSync)
|
||||
msg := result.Result()
|
||||
notes := fmt.Sprintf("syncVMDisks for VM %s result: %s", localVM.Name, msg)
|
||||
log.Infof(notes)
|
||||
|
||||
@@ -47,7 +47,7 @@ func syncOnPremiseCloudProviderInfo(ctx context.Context, provider *models.SCloud
|
||||
}
|
||||
syncHostStorages(ctx, provider, task, &localHosts[i], remoteHosts[i])
|
||||
syncHostNics(ctx, provider, task, &localHosts[i], remoteHosts[i])
|
||||
syncHostVMs(ctx, provider, task, &localHosts[i], remoteHosts[i], syncRange)
|
||||
syncHostVMs(ctx, provider, task, driver, &localHosts[i], remoteHosts[i], syncRange)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -141,3 +141,7 @@ func (self *SAliyunProvider) GetBalance() (float64, error) {
|
||||
func (self *SAliyunProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
return nil, cloudprovider.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (self *SAliyunProvider) SupportPrepaidResources() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -124,3 +124,7 @@ func (self *SAwsProvider) GetBalance() (float64, error) {
|
||||
func (self *SAwsProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
return nil, cloudprovider.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (self *SAwsProvider) SupportPrepaidResources() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -130,3 +130,7 @@ func (self *SAzureProvider) GetBalance() (float64, error) {
|
||||
func (self *SAzureProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
return nil, cloudprovider.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (self *SAzureProvider) SupportPrepaidResources() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -154,3 +154,7 @@ func (self *SESXiProvider) GetBalance() (float64, error) {
|
||||
func (self *SESXiProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
return self.client, nil
|
||||
}
|
||||
|
||||
func (self *SESXiProvider) SupportPrepaidResources() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -125,3 +125,7 @@ func (self *SHuaweiProvider) GetBalance() (float64, error) {
|
||||
func (self *SHuaweiProvider) GetSubAccounts() ([]cloudprovider.SSubAccount, error) {
|
||||
return self.client.GetSubAccounts()
|
||||
}
|
||||
|
||||
func (self *SHuaweiProvider) SupportPrepaidResources() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -137,3 +137,7 @@ func (self *SOpenStackProvider) GetBalance() (float64, error) {
|
||||
func (self *SOpenStackProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
return nil, cloudprovider.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (self *SOpenStackProvider) SupportPrepaidResources() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -137,3 +137,7 @@ func (self *SQcloudProvider) GetBalance() (float64, error) {
|
||||
func (self *SQcloudProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
return nil, cloudprovider.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (self *SQcloudProvider) SupportPrepaidResources() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user