mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
feat(region): Regularly and automatically synchronize the status of cloud accounts (#12750)
This commit is contained in:
@@ -1943,6 +1943,49 @@ func (self *SCloudaccount) CanSync() bool {
|
||||
}
|
||||
}
|
||||
|
||||
func (manager *SCloudaccountManager) AutoSyncCloudaccountStatusTask(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
|
||||
if isStart && !options.Options.IsSlaveNode {
|
||||
// mark all the records to be idle
|
||||
CloudproviderRegionManager.initAllRecords()
|
||||
CloudproviderManager.initAllRecords()
|
||||
CloudaccountManager.initAllRecords()
|
||||
}
|
||||
q := manager.Query()
|
||||
|
||||
accounts := make([]SCloudaccount, 0)
|
||||
err := db.FetchModelObjects(manager, q, &accounts)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to fetch cloudaccount list to check status")
|
||||
return
|
||||
}
|
||||
|
||||
for i := range accounts {
|
||||
if accounts[i].GetEnabled() && accounts[i].shouldProbeStatus() && accounts[i].needSync() && accounts[i].CanSync() {
|
||||
id, name, account := accounts[i].Id, accounts[i].Name, &accounts[i]
|
||||
cloudaccountPendingSyncsMutex.Lock()
|
||||
if _, ok := cloudaccountPendingSyncs[id]; ok {
|
||||
cloudaccountPendingSyncsMutex.Unlock()
|
||||
continue
|
||||
}
|
||||
cloudaccountPendingSyncs[id] = struct{}{}
|
||||
cloudaccountPendingSyncsMutex.Unlock()
|
||||
RunSyncCloudAccountTask(ctx, func() {
|
||||
defer func() {
|
||||
cloudaccountPendingSyncsMutex.Lock()
|
||||
defer cloudaccountPendingSyncsMutex.Unlock()
|
||||
delete(cloudaccountPendingSyncs, id)
|
||||
}()
|
||||
log.Debugf("syncAccountStatus %s %s", id, name)
|
||||
err := account.syncAccountStatus(ctx, userCred)
|
||||
if err != nil {
|
||||
log.Errorf("unable to syncAccountStatus for cloudaccount %s: %s", account.Id, err.Error())
|
||||
}
|
||||
account.markEndSync(userCred)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (manager *SCloudaccountManager) AutoSyncCloudaccountTask(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
|
||||
if isStart && !options.Options.IsSlaveNode {
|
||||
// mark all the records to be idle
|
||||
|
||||
@@ -140,6 +140,7 @@ func StartService() {
|
||||
cron.AddJobAtIntervalsWithStartRun("CalculateProjectQuotaUsages", time.Duration(opts.CalculateQuotaUsageIntervalSeconds)*time.Second, models.ProjectQuotaManager.CalculateQuotaUsages, true)
|
||||
cron.AddJobAtIntervalsWithStartRun("CalculateDomainQuotaUsages", time.Duration(opts.CalculateQuotaUsageIntervalSeconds)*time.Second, models.DomainQuotaManager.CalculateQuotaUsages, true)
|
||||
cron.AddJobAtIntervalsWithStartRun("CalculateInfrasQuotaUsages", time.Duration(opts.CalculateQuotaUsageIntervalSeconds)*time.Second, models.InfrasQuotaManager.CalculateQuotaUsages, true)
|
||||
cron.AddJobAtIntervalsWithStartRun("AutoSyncCloudaccountStatusTask", time.Duration(opts.CloudAutoSyncIntervalSeconds)*time.Second, models.CloudaccountManager.AutoSyncCloudaccountStatusTask, true)
|
||||
|
||||
if opts.AutoReconcileBackupServers {
|
||||
cron.AddJobAtIntervalsWithStartRun("ReconcileBackupGuests", time.Duration(opts.ReconcileGuestBackupIntervalSeconds)*time.Second, models.GuestManager.ReconcileBackupGuests, true)
|
||||
|
||||
Reference in New Issue
Block a user