mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/yunionio/cloudpods.git
synced 2026-09-20 08:03:53 +08:00
Merge pull request #9371 from ioito/automated-cherry-pick-of-#9360-upstream-release-3.5
Automated cherry pick of #9360: fix(region): sync servers
This commit is contained in:
@@ -344,7 +344,10 @@ func (self *SHost) PerformUndoPrepaidRecycle(ctx context.Context, userCred mccli
|
||||
return nil, httperrors.NewInvalidStatusError("host is not a prepaid recycle host")
|
||||
}
|
||||
|
||||
guests := self.GetGuests()
|
||||
guests, err := self.GetGuests()
|
||||
if err != nil {
|
||||
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "GetGuests"))
|
||||
}
|
||||
|
||||
if len(guests) == 0 {
|
||||
return nil, httperrors.NewInvalidStatusError("cannot delete a recycle host without active instance")
|
||||
@@ -362,7 +365,7 @@ func (self *SHost) PerformUndoPrepaidRecycle(ctx context.Context, userCred mccli
|
||||
return nil, httperrors.NewInvalidStatusError("cannot undo a recycle host with pending_deleted guest")
|
||||
}
|
||||
|
||||
err := doUndoPrepaidRecycleLockGuest(ctx, userCred, self, &guests[0])
|
||||
err = doUndoPrepaidRecycleLockGuest(ctx, userCred, self, &guests[0])
|
||||
if err != nil {
|
||||
logclient.AddActionLogWithContext(ctx, self, logclient.ACT_UNDO_RECYCLE_PREPAID, self.GetShortDesc(ctx), userCred, false)
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
|
||||
@@ -1421,15 +1421,14 @@ func (self *SHost) GetGuestsQuery() *sqlchemy.SQuery {
|
||||
return GuestManager.Query().Equals("host_id", self.Id)
|
||||
}
|
||||
|
||||
func (self *SHost) GetGuests() []SGuest {
|
||||
func (self *SHost) GetGuests() ([]SGuest, error) {
|
||||
q := self.GetGuestsQuery()
|
||||
guests := make([]SGuest, 0)
|
||||
err := db.FetchModelObjects(GuestManager, q, &guests)
|
||||
if err != nil {
|
||||
log.Errorf("GetGuests %s", err)
|
||||
return nil
|
||||
return nil, errors.Wrapf(err, "db.FetchModelObjects")
|
||||
}
|
||||
return guests
|
||||
return guests, nil
|
||||
}
|
||||
|
||||
func (self *SHost) GetKvmGuests() []SGuest {
|
||||
@@ -1672,7 +1671,10 @@ func (self *SHost) syncRemoveCloudHost(ctx context.Context, userCred mcclient.To
|
||||
if err == nil {
|
||||
_, err = self.PerformDisable(ctx, userCred, nil, apis.PerformDisableInput{})
|
||||
}
|
||||
guests := self.GetGuests()
|
||||
guests, err := self.GetGuests()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "GetGuests")
|
||||
}
|
||||
for _, guest := range guests {
|
||||
err = guest.SetStatus(userCred, api.VM_UNKNOWN, "sync to delete")
|
||||
if err != nil {
|
||||
@@ -2259,7 +2261,11 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
|
||||
syncVMPairs := make([]SGuestSyncResult, 0)
|
||||
syncResult := compare.SyncResult{}
|
||||
|
||||
dbVMs := self.GetGuests()
|
||||
dbVMs, err := self.GetGuests()
|
||||
if err != nil {
|
||||
syncResult.Error(errors.Wrapf(err, "GetGuests"))
|
||||
return nil, syncResult
|
||||
}
|
||||
|
||||
for i := range dbVMs {
|
||||
if taskman.TaskManager.IsInTask(&dbVMs[i]) {
|
||||
@@ -2273,7 +2279,7 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
|
||||
commonext := make([]cloudprovider.ICloudVM, 0)
|
||||
added := make([]cloudprovider.ICloudVM, 0)
|
||||
|
||||
err := compare.CompareSets(dbVMs, vms, &removed, &commondb, &commonext, &added)
|
||||
err = compare.CompareSets(dbVMs, vms, &removed, &commondb, &commonext, &added)
|
||||
if err != nil {
|
||||
syncResult.Error(err)
|
||||
return nil, syncResult
|
||||
@@ -4737,7 +4743,10 @@ func (self *SHost) PerformUndoConvert(ctx context.Context, userCred mcclient.Tok
|
||||
if err != nil {
|
||||
return nil, httperrors.NewNotAcceptableError("%v", err)
|
||||
}
|
||||
guests := self.GetGuests()
|
||||
guests, err := self.GetGuests()
|
||||
if err != nil {
|
||||
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "GetGuests"))
|
||||
}
|
||||
if len(guests) > 1 {
|
||||
return nil, httperrors.NewNotAcceptableError("Not an empty host")
|
||||
} else if len(guests) == 1 {
|
||||
@@ -5023,8 +5032,8 @@ func (self *SHost) GetShortDesc(ctx context.Context) *jsonutils.JSONDict {
|
||||
}
|
||||
|
||||
func (self *SHost) MarkGuestUnknown(userCred mcclient.TokenCredential) {
|
||||
log.Errorln(self.GetGuests())
|
||||
for _, guest := range self.GetGuests() {
|
||||
guests, _ := self.GetGuests()
|
||||
for _, guest := range guests {
|
||||
guest.SetStatus(userCred, api.VM_UNKNOWN, "host offline")
|
||||
}
|
||||
}
|
||||
@@ -5238,10 +5247,11 @@ func (host *SHost) migrateOnHostDown(ctx context.Context, userCred mcclient.Toke
|
||||
}
|
||||
|
||||
func (host *SHost) MigrateSharedStorageServers(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
var (
|
||||
guests = host.GetGuests()
|
||||
hostGuests = []*api.GuestBatchMigrateParams{}
|
||||
)
|
||||
guests, err := host.GetGuests()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "host %s(%s) get guests", host.Name, host.Id)
|
||||
}
|
||||
hostGuests := []*api.GuestBatchMigrateParams{}
|
||||
|
||||
for i := 0; i < len(guests); i++ {
|
||||
lockman.LockObject(ctx, &guests[i])
|
||||
@@ -5517,7 +5527,7 @@ func (host *SHost) PerformChangeOwner(ctx context.Context, userCred mcclient.Tok
|
||||
|
||||
func (host *SHost) GetChangeOwnerRequiredDomainIds() []string {
|
||||
requires := stringutils2.SSortedStrings{}
|
||||
guests := host.GetGuests()
|
||||
guests, _ := host.GetGuests()
|
||||
for i := range guests {
|
||||
requires = stringutils2.Append(requires, guests[i].DomainId)
|
||||
}
|
||||
|
||||
@@ -86,7 +86,10 @@ func (host *SHost) purge(ctx context.Context, userCred mcclient.TokenCredential)
|
||||
return errors.Wrapf(err, "PerformDisable")
|
||||
}
|
||||
|
||||
guests := host.GetGuests()
|
||||
guests, err := host.GetGuests()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "host.GetGuests")
|
||||
}
|
||||
for i := range guests {
|
||||
err := guests[i].purge(ctx, userCred)
|
||||
if err != nil {
|
||||
|
||||
@@ -95,15 +95,11 @@ func (self *BaremetalSyncAllGuestsStatusTask) OnInit(ctx context.Context, obj db
|
||||
}
|
||||
|
||||
func (self *BaremetalSyncAllGuestsStatusTask) OnGuestSyncStatusComplete(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) {
|
||||
var guests = make([]models.SGuest, 0)
|
||||
for _, guest := range baremetal.GetGuests() {
|
||||
if guest.Status == api.VM_UNKNOWN && guest.Hypervisor != api.HYPERVISOR_BAREMETAL {
|
||||
guest.SetStatus(self.UserCred, models.SYNC_STATUS, "")
|
||||
guests = append(guests, guest)
|
||||
}
|
||||
}
|
||||
guests, _ := baremetal.GetGuests()
|
||||
for _, guest := range guests {
|
||||
guest.StartSyncstatus(ctx, self.UserCred, "")
|
||||
if guest.Status == api.VM_UNKNOWN && guest.Hypervisor != api.HYPERVISOR_BAREMETAL {
|
||||
guest.StartSyncstatus(ctx, self.GetUserCred(), "")
|
||||
}
|
||||
}
|
||||
log.Infof("All unknown guests syncstatus complete")
|
||||
self.SetStageComplete(ctx, nil)
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
@@ -38,9 +39,14 @@ func init() {
|
||||
func (self *BaremetalUnconvertHypervisorTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
|
||||
baremetal := obj.(*models.SHost)
|
||||
baremetal.SetStatus(self.UserCred, api.BAREMETAL_CONVERTING, "")
|
||||
guests := baremetal.GetGuests()
|
||||
guests, err := baremetal.GetGuests()
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, jsonutils.NewString(errors.Wrapf(err, "baremetal.GetGuests").Error()))
|
||||
return
|
||||
}
|
||||
if len(guests) > 1 {
|
||||
self.SetStageFailed(ctx, jsonutils.NewString("Host guest conut > 1"))
|
||||
return
|
||||
}
|
||||
if len(guests) == 1 {
|
||||
guest := guests[0]
|
||||
|
||||
Reference in New Issue
Block a user