mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #2267 from swordqiu/hotfix/qj-cloud-account-misc-bugfixes-20190813
Hotfix/qj cloud account misc bugfixes 20190813
This commit is contained in:
@@ -517,9 +517,11 @@ func (self *SCloudaccount) markStartSync(userCred mcclient.TokenCredential) erro
|
||||
}
|
||||
providers := self.GetCloudproviders()
|
||||
for i := range providers {
|
||||
err := providers[i].markStartingSync(userCred)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "providers.markStartSync")
|
||||
if providers[i].Enabled {
|
||||
err := providers[i].markStartingSync(userCred)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "providers.markStartSync")
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@@ -547,8 +549,16 @@ func (self *SCloudaccount) MarkEndSyncWithLock(ctx context.Context, userCred mcc
|
||||
return nil
|
||||
}
|
||||
|
||||
providers := self.GetCloudproviders()
|
||||
for i := range providers {
|
||||
err := providers[i].cancelStartingSync(userCred)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "providers.cancelStartingSync")
|
||||
}
|
||||
}
|
||||
|
||||
if self.getSyncStatus2() != api.CLOUD_PROVIDER_SYNC_STATUS_IDLE {
|
||||
return nil
|
||||
return errors.Error("some cloud providers not idle")
|
||||
}
|
||||
|
||||
return self.markEndSync(userCred)
|
||||
|
||||
@@ -23,11 +23,12 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/pkg/util/compare"
|
||||
"yunion.io/x/pkg/util/timeutils"
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/apis/compute"
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
@@ -213,7 +214,7 @@ func (manager *SCloudproviderregionManager) FetchByIdsOrCreate(providerId string
|
||||
cpr.CloudproviderId = providerId
|
||||
cpr.CloudregionId = regionId
|
||||
cpr.Enabled = true
|
||||
cpr.SyncStatus = compute.CLOUD_PROVIDER_SYNC_STATUS_IDLE
|
||||
cpr.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_IDLE
|
||||
|
||||
err := manager.TableSpec().Insert(cpr)
|
||||
if err != nil {
|
||||
@@ -228,7 +229,7 @@ func (self *SCloudproviderregion) markStartingSync(userCred mcclient.TokenCreden
|
||||
return fmt.Errorf("Cloudprovider(%s)region(%s) disabled", self.CloudproviderId, self.CloudregionId)
|
||||
}
|
||||
_, err := db.Update(self, func() error {
|
||||
self.SyncStatus = compute.CLOUD_PROVIDER_SYNC_STATUS_QUEUING
|
||||
self.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_QUEUING
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
@@ -243,7 +244,7 @@ func (self *SCloudproviderregion) markStartSync(userCred mcclient.TokenCredentia
|
||||
return fmt.Errorf("Cloudprovider(%s)region(%s) disabled", self.CloudproviderId, self.CloudregionId)
|
||||
}
|
||||
_, err := db.Update(self, func() error {
|
||||
self.SyncStatus = compute.CLOUD_PROVIDER_SYNC_STATUS_QUEUED
|
||||
self.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_QUEUED
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
@@ -258,7 +259,7 @@ func (self *SCloudproviderregion) markSyncing(userCred mcclient.TokenCredential)
|
||||
return fmt.Errorf("Cloudprovider(%s)region(%s) disabled", self.CloudproviderId, self.CloudregionId)
|
||||
}
|
||||
_, err := db.Update(self, func() error {
|
||||
self.SyncStatus = compute.CLOUD_PROVIDER_SYNC_STATUS_SYNCING
|
||||
self.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_SYNCING
|
||||
self.LastSync = timeutils.UtcNow()
|
||||
self.LastSyncEndAt = time.Time{}
|
||||
return nil
|
||||
@@ -285,7 +286,7 @@ func (self *SCloudproviderregion) markEndSync(ctx context.Context, userCred mccl
|
||||
|
||||
func (self *SCloudproviderregion) markEndSyncInternal(userCred mcclient.TokenCredential, syncResults SSyncResultSet, deepSync *bool) error {
|
||||
_, err := db.Update(self, func() error {
|
||||
self.SyncStatus = compute.CLOUD_PROVIDER_SYNC_STATUS_IDLE
|
||||
self.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_IDLE
|
||||
self.LastSyncEndAt = timeutils.UtcNow()
|
||||
self.SyncResults = jsonutils.Marshal(syncResults)
|
||||
if *deepSync {
|
||||
@@ -300,6 +301,19 @@ func (self *SCloudproviderregion) markEndSyncInternal(userCred mcclient.TokenCre
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SCloudproviderregion) cancelStartingSync(userCred mcclient.TokenCredential) error {
|
||||
if self.SyncStatus == api.CLOUD_PROVIDER_SYNC_STATUS_QUEUING {
|
||||
_, err := db.Update(self, func() error {
|
||||
self.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_IDLE
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "db.Update")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type SSyncResultSet map[string]*compare.SyncResult
|
||||
|
||||
func (set SSyncResultSet) Add(manager db.IModelManager, result compare.SyncResult) {
|
||||
|
||||
@@ -679,6 +679,26 @@ func (self *SCloudprovider) markEndSync(userCred mcclient.TokenCredential) error
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SCloudprovider) cancelStartingSync(userCred mcclient.TokenCredential) error {
|
||||
if self.SyncStatus == api.CLOUD_PROVIDER_SYNC_STATUS_QUEUING {
|
||||
cprs := self.GetCloudproviderRegions()
|
||||
for i := range cprs {
|
||||
err := cprs[i].cancelStartingSync(userCred)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "cprs[i].cancelStartingSync")
|
||||
}
|
||||
}
|
||||
_, err := db.Update(self, func() error {
|
||||
self.SyncStatus = api.CLOUD_PROVIDER_SYNC_STATUS_IDLE
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "db.Update")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SCloudprovider) GetProviderFactory() (cloudprovider.ICloudProviderFactory, error) {
|
||||
return cloudprovider.GetProviderFactory(self.Provider)
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ func (self *SAwsClient) UpdateAccount(accessKey, secret string) error {
|
||||
if self.accessKey != accessKey || self.secret != secret {
|
||||
self.accessKey = accessKey
|
||||
self.secret = secret
|
||||
self.iregions = nil
|
||||
return self.fetchRegions()
|
||||
} else {
|
||||
return nil
|
||||
@@ -135,6 +136,9 @@ func (self *SAwsClient) UpdateAccount(accessKey, secret string) error {
|
||||
|
||||
// 用于初始化region信息
|
||||
func (self *SAwsClient) fetchRegions() error {
|
||||
if self.iregions != nil {
|
||||
return nil
|
||||
}
|
||||
s, err := self.getDefaultSession()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -148,9 +152,9 @@ func (self *SAwsClient) fetchRegions() error {
|
||||
|
||||
regions := make([]SRegion, 0)
|
||||
// empty iregions
|
||||
if self.iregions != nil {
|
||||
self.iregions = self.iregions[:0]
|
||||
}
|
||||
// if self.iregions != nil {
|
||||
// self.iregions = self.iregions[:0]
|
||||
// }
|
||||
|
||||
for _, region := range result.Regions {
|
||||
name := *region.RegionName
|
||||
|
||||
@@ -104,9 +104,11 @@ func NewAzureClient(providerId string, providerName string, envName, tenantId, c
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetchRegions")
|
||||
}
|
||||
err = client.fetchBuckets()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetchBuckets")
|
||||
if len(subscriptionId) > 0 {
|
||||
err = client.fetchBuckets()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetchBuckets")
|
||||
}
|
||||
}
|
||||
return &client, nil
|
||||
}
|
||||
@@ -903,10 +905,10 @@ func (self *SAzureClient) GetIProjects() ([]cloudprovider.ICloudProject, error)
|
||||
return iprojects, nil
|
||||
}
|
||||
|
||||
func (self *SAzureClient) GetStorageClasses(regionId string) ([]string, error) {
|
||||
iRegion, err := self.GetIRegionById(regionId)
|
||||
func (self *SAzureClient) GetStorageClasses(regionExtId string) ([]string, error) {
|
||||
iRegion, err := self.GetIRegionById(regionExtId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getDefaultRegion")
|
||||
return nil, errors.Wrap(err, "self.GetIRegionById")
|
||||
}
|
||||
skus, err := iRegion.(*SRegion).GetStorageAccountSkus()
|
||||
if err != nil {
|
||||
|
||||
@@ -164,12 +164,17 @@ func (self *SHuaweiClient) getIBuckets() ([]cloudprovider.ICloudBucket, error) {
|
||||
return self.iBuckets, nil
|
||||
}
|
||||
|
||||
func getOBSEndpoint(regionId string) string {
|
||||
return fmt.Sprintf("obs.%s.myhuaweicloud.com", regionId)
|
||||
}
|
||||
|
||||
func (client *SHuaweiClient) getOBSClient(regionId string) (*obs.ObsClient, error) {
|
||||
endpoint := getOBSEndpoint(regionId)
|
||||
return obs.New(client.accessKey, client.secret, endpoint)
|
||||
}
|
||||
|
||||
func (self *SHuaweiClient) fetchBuckets() error {
|
||||
if len(self.iregions) == 0 {
|
||||
return errors.Error("no region???")
|
||||
}
|
||||
region := self.iregions[0].(*SRegion)
|
||||
obscli, err := region.getOBSClient()
|
||||
obscli, err := self.getOBSClient(HUAWEI_DEFAULT_REGION)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "getOBSClient")
|
||||
}
|
||||
@@ -266,6 +271,7 @@ func (self *SHuaweiClient) GetIRegions() []cloudprovider.ICloudRegion {
|
||||
|
||||
func (self *SHuaweiClient) getIRegionByRegionId(id string) (cloudprovider.ICloudRegion, error) {
|
||||
for i := 0; i < len(self.iregions); i += 1 {
|
||||
log.Debugf("%d ID: %s", i, self.iregions[i].GetId())
|
||||
if self.iregions[i].GetId() == id {
|
||||
return self.iregions[i], nil
|
||||
}
|
||||
|
||||
@@ -92,13 +92,12 @@ func (self *SRegion) getECSClient() (*client.Client, error) {
|
||||
}
|
||||
|
||||
func (self *SRegion) getOBSEndpoint() string {
|
||||
return fmt.Sprintf("obs.%s.myhuaweicloud.com", self.GetId())
|
||||
return getOBSEndpoint(self.GetId())
|
||||
}
|
||||
|
||||
func (self *SRegion) getOBSClient() (*obs.ObsClient, error) {
|
||||
if self.obsClient == nil {
|
||||
endpoint := self.getOBSEndpoint()
|
||||
obsClient, err := obs.New(self.client.accessKey, self.client.secret, endpoint)
|
||||
obsClient, err := self.client.getOBSClient(self.GetId())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -525,7 +525,7 @@ func (client *SQcloudClient) verifyAppId() error {
|
||||
return errors.Wrap(err, "getDefaultRegion")
|
||||
}
|
||||
bucket := SBucket{
|
||||
region: region.(*SRegion),
|
||||
region: region,
|
||||
Name: "yuniondocument",
|
||||
}
|
||||
cli, err := client.getCosClient(&bucket)
|
||||
@@ -602,11 +602,12 @@ func (client *SQcloudClient) GetIRegions() []cloudprovider.ICloudRegion {
|
||||
return client.iregions
|
||||
}
|
||||
|
||||
func (client *SQcloudClient) getDefaultRegion() (cloudprovider.ICloudRegion, error) {
|
||||
if len(client.iregions) > 0 {
|
||||
return client.iregions[0], nil
|
||||
func (client *SQcloudClient) getDefaultRegion() (*SRegion, error) {
|
||||
iregion, err := client.getIRegionByRegionId(QCLOUD_DEFAULT_REGION)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getIRegionByRegionId")
|
||||
}
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
return iregion.(*SRegion), nil
|
||||
}
|
||||
|
||||
func (client *SQcloudClient) getIRegionByRegionId(id string) (cloudprovider.ICloudRegion, error) {
|
||||
|
||||
Reference in New Issue
Block a user