From fb7d22f67580cd516a831d771d73c99cc0f393f2 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Fri, 23 Oct 2020 12:01:04 +0800 Subject: [PATCH 1/2] fix: sync rds account host info --- pkg/apis/compute/dbinstance.go | 4 ++++ pkg/compute/models/dbinstance_accounts.go | 1 + pkg/compute/tasks/dbinstance_sync_status_task.go | 3 +-- pkg/multicloud/qcloud/rds_mysql.go | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pkg/apis/compute/dbinstance.go b/pkg/apis/compute/dbinstance.go index c911051048..ca745fd0fc 100644 --- a/pkg/apis/compute/dbinstance.go +++ b/pkg/apis/compute/dbinstance.go @@ -78,6 +78,10 @@ type DBInstanceCreateInput struct { // 包年包月时间周期 Duration string `json:"duration"` + // 是否自动续费(仅包年包月时生效) + // default: false + AutoRenew bool `json:"auto_renew"` + // swagger:ignore ExpiredAt time.Time `json:"expired_at"` diff --git a/pkg/compute/models/dbinstance_accounts.go b/pkg/compute/models/dbinstance_accounts.go index 35ccb19a19..2b298a9300 100644 --- a/pkg/compute/models/dbinstance_accounts.go +++ b/pkg/compute/models/dbinstance_accounts.go @@ -695,6 +695,7 @@ func (manager *SDBInstanceAccountManager) newFromCloudDBInstanceAccount(ctx cont account.Name = extAccount.GetName() account.DBInstanceId = instance.Id account.Status = extAccount.GetStatus() + account.Host = extAccount.GetHost() err := manager.TableSpec().Insert(ctx, &account) if err != nil { diff --git a/pkg/compute/tasks/dbinstance_sync_status_task.go b/pkg/compute/tasks/dbinstance_sync_status_task.go index 6d0183653b..683f712051 100644 --- a/pkg/compute/tasks/dbinstance_sync_status_task.go +++ b/pkg/compute/tasks/dbinstance_sync_status_task.go @@ -53,7 +53,6 @@ func (self *DBInstanceSyncStatusTask) SyncStatusDBInstance(ctx context.Context, self.taskFailed(ctx, dbinstance, errors.Wrapf(err, "dbinstance.GetIDBInstance")) return } - status := idbinstance.GetStatus() - dbinstance.SetStatus(self.UserCred, status, "") + dbinstance.SyncAllWithCloudDBInstance(ctx, self.UserCred, dbinstance.GetCloudprovider(), idbinstance) self.SetStageComplete(ctx, nil) } diff --git a/pkg/multicloud/qcloud/rds_mysql.go b/pkg/multicloud/qcloud/rds_mysql.go index fbf187ba04..c20a865f3e 100644 --- a/pkg/multicloud/qcloud/rds_mysql.go +++ b/pkg/multicloud/qcloud/rds_mysql.go @@ -729,6 +729,10 @@ func (self *SRegion) CreateMySQLDBInstance(opts *cloudprovider.SManagedDBInstanc action := "CreateDBInstanceHour" if opts.BillingCycle != nil { params["Period"] = fmt.Sprintf("%d", opts.BillingCycle.GetMonths()) + params["AutoRenewFlag"] = "0" + if opts.BillingCycle.AutoRenew { + params["AutoRenewFlag"] = "1" + } action = "CreateDBInstance" } switch opts.Category { From f159c7318606a732ffa304088321f709f51391d4 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Fri, 23 Oct 2020 16:28:35 +0800 Subject: [PATCH 2/2] fix: add duration match --- pkg/compute/models/capabilities.go | 4 ++++ pkg/compute/regiondrivers/qcloud.go | 13 ++++++++++++ pkg/multicloud/qcloud/rds_mysql.go | 31 ++++++++++++++++++----------- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/pkg/compute/models/capabilities.go b/pkg/compute/models/capabilities.go index 7156c7d226..196f6d2f42 100644 --- a/pkg/compute/models/capabilities.go +++ b/pkg/compute/models/capabilities.go @@ -42,6 +42,8 @@ type SCapabilities struct { DisabledBrands []string `json:",allowempty"` ComputeEngineBrands []string `json:",allowempty"` DisabledComputeEngineBrands []string `json:",allowempty"` + RdsEngineBrands []string `json:",allowempty"` + DisabledRdsEngineBrands []string `json:",allowempty"` CloudIdBrands []string `json:",allowempty"` DisabledCloudIdBrands []string `json:",allowempty"` PublicIpBrands []string `json:",allowempty"` @@ -260,6 +262,7 @@ func getDBInstanceInfo(region *SCloudregion, zone *SZone) map[string]map[string] func getBrands(region *SCloudregion, zone *SZone, domainId string, capa *SCapabilities) { capa.Brands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, "") capa.ComputeEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_COMPUTE) + capa.RdsEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_RDS) capa.NetworkManageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_NETWORK) capa.ObjectStorageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE) capa.CloudIdBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_CLOUDID) @@ -273,6 +276,7 @@ func getBrands(region *SCloudregion, zone *SZone, domainId string, capa *SCapabi capa.DisabledBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, "") capa.DisabledComputeEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_COMPUTE) + capa.DisabledRdsEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_RDS) capa.DisabledNetworkManageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_NETWORK) capa.DisabledObjectStorageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE) capa.DisabledCloudIdBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_CLOUDID) diff --git a/pkg/compute/regiondrivers/qcloud.go b/pkg/compute/regiondrivers/qcloud.go index f8e7030e20..34e9551d82 100644 --- a/pkg/compute/regiondrivers/qcloud.go +++ b/pkg/compute/regiondrivers/qcloud.go @@ -34,6 +34,7 @@ import ( "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/pkg/util/billing" "yunion.io/x/onecloud/pkg/util/rand" ) @@ -1385,6 +1386,18 @@ func (self *SQcloudRegionDriver) IsDBInstanceNeedSecgroup() bool { return true } +func (self *SQcloudRegionDriver) IsSupportedBillingCycle(bc billing.SBillingCycle, resource string) bool { + switch resource { + case models.DBInstanceManager.KeywordPlural(): + years := bc.GetYears() + months := bc.GetMonths() + if (years >= 1 && years <= 3) || (months >= 1 && months <= 12) { + return true + } + } + return false +} + func (self *SQcloudRegionDriver) ValidateCreateDBInstanceBackupData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, instance *models.SDBInstance, input api.DBInstanceBackupCreateInput) (api.DBInstanceBackupCreateInput, error) { switch instance.Engine { case api.DBINSTANCE_TYPE_MYSQL: diff --git a/pkg/multicloud/qcloud/rds_mysql.go b/pkg/multicloud/qcloud/rds_mysql.go index c20a865f3e..bb8de60a0f 100644 --- a/pkg/multicloud/qcloud/rds_mysql.go +++ b/pkg/multicloud/qcloud/rds_mysql.go @@ -735,21 +735,28 @@ func (self *SRegion) CreateMySQLDBInstance(opts *cloudprovider.SManagedDBInstanc } action = "CreateDBInstance" } - switch opts.Category { - case api.QCLOUD_DBINSTANCE_CATEGORY_HA, api.QCLOUD_DBINSTANCE_CATEGORY_BASIC: - params["DeviceType"] = strings.ToUpper(opts.Category) - case api.QCLOUD_DBINSTANCE_CATEGORY_FINANCE: - params["DeviceType"] = "HA" - params["ProtectMode"] = "2" - } if len(opts.Zone1) > 0 { params["Zone"] = opts.Zone1 } - if len(opts.Zone2) > 0 { - params["SlaveZone"] = opts.Zone2 - } - if len(opts.Zone3) > 0 { - params["BackupZone"] = opts.Zone3 + switch opts.Category { + case api.QCLOUD_DBINSTANCE_CATEGORY_BASIC: + params["DeviceType"] = strings.ToUpper(opts.Category) + case api.QCLOUD_DBINSTANCE_CATEGORY_HA: + params["DeviceType"] = strings.ToUpper(opts.Category) + params["DeployMode"] = "1" + if len(opts.Zone2) > 0 { + params["SlaveZone"] = opts.Zone2 + } + case api.QCLOUD_DBINSTANCE_CATEGORY_FINANCE: + params["DeviceType"] = "HA" + params["ProtectMode"] = "2" + params["DeployMode"] = "1" + if len(opts.Zone2) > 0 { + params["SlaveZone"] = opts.Zone2 + } + if len(opts.Zone3) > 0 { + params["BackupZone"] = opts.Zone3 + } } params["ClientToken"] = utils.GenRequestId(20) resp, err := self.cdbRequest(action, params)