Merge pull request #3940 from tb365/bugfix/tb-bugfix-112701

Bugfix/tb bugfix 112701
This commit is contained in:
yunion-ci-robot
2019-11-27 20:51:28 +08:00
committed by GitHub
10 changed files with 149 additions and 13 deletions
+9 -7
View File
@@ -127,14 +127,16 @@ func syncRegionSkus(ctx context.Context, userCred mcclient.TokenCredential, loca
}
}
cnt, err = ElasticcacheSkuManager.GetSkuCountByRegion(regionId)
if err != nil {
log.Errorf("ElasticcacheSkuManager.GetSkuCountByRegion fail %s", err)
return
}
if localRegion.GetDriver().IsSupportedElasticcache() {
cnt, err = ElasticcacheSkuManager.GetSkuCountByRegion(regionId)
if err != nil {
log.Errorf("ElasticcacheSkuManager.GetSkuCountByRegion fail %s", err)
return
}
if cnt == 0 {
syncElasticCacheSkusByRegion(ctx, userCred, localRegion)
if cnt == 0 {
syncElasticCacheSkusByRegion(ctx, userCred, localRegion)
}
}
}
+18 -2
View File
@@ -34,6 +34,7 @@ import (
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/util/choices"
"yunion.io/x/onecloud/pkg/util/rbacutils"
"yunion.io/x/onecloud/pkg/util/seclib2"
)
@@ -154,6 +155,10 @@ func (self *SElasticcacheAccount) GetRegion() *SCloudregion {
return iec.(*SElasticcache).GetRegion()
}
func (self *SElasticcacheAccount) GetOwnerId() mcclient.IIdentityProvider {
return ElasticcacheManager.GetOwnerIdByElasticcacheId(self.ElasticcacheId)
}
func (manager *SElasticcacheAccountManager) newFromCloudElasticcacheAccount(ctx context.Context, userCred mcclient.TokenCredential, elasticcache *SElasticcache, extAccount cloudprovider.ICloudElasticcacheAccount) (*SElasticcacheAccount, error) {
lockman.LockClass(ctx, manager, db.GetLockClassKey(manager, userCred))
defer lockman.ReleaseClass(ctx, manager, db.GetLockClassKey(manager, userCred))
@@ -177,8 +182,19 @@ func (manager *SElasticcacheAccountManager) newFromCloudElasticcacheAccount(ctx
}
func (manager *SElasticcacheAccountManager) FetchParentId(ctx context.Context, data jsonutils.JSONObject) string {
parentId, _ := data.GetString("elasticcache_id")
return parentId
return jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
}
func (manager *SElasticcacheAccountManager) ResourceScope() rbacutils.TRbacScope {
return rbacutils.ScopeProject
}
func (manager *SElasticcacheAccountManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheAccountManager) FilterByOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, userCred, scope)
}
func (manager *SElasticcacheAccountManager) FilterByParentId(q *sqlchemy.SQuery, parentId string) *sqlchemy.SQuery {
+18 -2
View File
@@ -33,6 +33,7 @@ import (
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/util/rbacutils"
)
// SElasticcache.Acl
@@ -161,8 +162,19 @@ func (manager *SElasticcacheAclManager) newFromCloudElasticcacheAcl(ctx context.
}
func (manager *SElasticcacheAclManager) FetchParentId(ctx context.Context, data jsonutils.JSONObject) string {
parentId, _ := data.GetString("elasticcache_id")
return parentId
return jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
}
func (manager *SElasticcacheAclManager) ResourceScope() rbacutils.TRbacScope {
return rbacutils.ScopeProject
}
func (manager *SElasticcacheAclManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheAclManager) FilterByOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, userCred, scope)
}
func (manager *SElasticcacheAclManager) FilterByParentId(q *sqlchemy.SQuery, parentId string) *sqlchemy.SQuery {
@@ -200,6 +212,10 @@ func (manager *SElasticcacheAclManager) ValidateCreateData(ctx context.Context,
return region.GetDriver().ValidateCreateElasticcacheAclData(ctx, userCred, ownerId, data)
}
func (self *SElasticcacheAcl) GetOwnerId() mcclient.IIdentityProvider {
return ElasticcacheManager.GetOwnerIdByElasticcacheId(self.ElasticcacheId)
}
func (self *SElasticcacheAcl) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) {
self.SStandaloneResourceBase.PostCreate(ctx, userCred, ownerId, query, data)
self.SetStatus(userCred, api.ELASTIC_CACHE_ACL_STATUS_CREATING, "")
+18 -2
View File
@@ -32,6 +32,7 @@ import (
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/util/rbacutils"
)
// SElasticcache.Backup
@@ -201,8 +202,19 @@ func (manager *SElasticcacheBackupManager) newFromCloudElasticcacheBackup(ctx co
}
func (manager *SElasticcacheBackupManager) FetchParentId(ctx context.Context, data jsonutils.JSONObject) string {
parentId, _ := data.GetString("elasticcache_id")
return parentId
return jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
}
func (manager *SElasticcacheBackupManager) ResourceScope() rbacutils.TRbacScope {
return rbacutils.ScopeProject
}
func (manager *SElasticcacheBackupManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheBackupManager) FilterByOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, userCred, scope)
}
func (manager *SElasticcacheBackupManager) FilterByParentId(q *sqlchemy.SQuery, parentId string) *sqlchemy.SQuery {
@@ -244,6 +256,10 @@ func (manager *SElasticcacheBackupManager) ValidateCreateData(ctx context.Contex
return driver.ValidateCreateElasticcacheBackupData(ctx, userCred, ownerId, data)
}
func (self *SElasticcacheBackup) GetOwnerId() mcclient.IIdentityProvider {
return ElasticcacheManager.GetOwnerIdByElasticcacheId(self.ElasticcacheId)
}
func (self *SElasticcacheBackup) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) {
self.SStandaloneResourceBase.PostCreate(ctx, userCred, ownerId, query, data)
self.SetStatus(userCred, api.ELASTIC_CACHE_BACKUP_STATUS_CREATING, "")
@@ -19,6 +19,7 @@ import (
"fmt"
"regexp"
"strings"
"time"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -33,12 +34,14 @@ import (
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
"yunion.io/x/onecloud/pkg/cloudcommon/policy"
"yunion.io/x/onecloud/pkg/cloudcommon/validators"
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
bc "yunion.io/x/onecloud/pkg/util/billing"
"yunion.io/x/onecloud/pkg/util/choices"
"yunion.io/x/onecloud/pkg/util/rbacutils"
"yunion.io/x/onecloud/pkg/util/seclib2"
)
@@ -99,6 +102,44 @@ type SElasticcache struct {
// AutoRenewPeriod // 自动续费周期
}
// elastic cache 子资源获取owner id
func elasticcacheSubResourceFetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
parentId := jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
if len(parentId) > 0 {
userCred := policy.FetchUserCredential(ctx)
ec, err := db.FetchByIdOrName(ElasticcacheManager, userCred, parentId)
if err != nil {
log.Errorf("elasticcache sub resource FetchOwnerId %s", err)
return nil, nil
}
return ec.(*SElasticcache).GetOwnerId(), nil
}
return nil, nil
}
// elastic cache 子资源获取owner query
func elasticcacheSubResourceFetchOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
if userCred != nil {
var subq *sqlchemy.SSubQuery
q1 := ElasticcacheManager.Query()
switch scope {
case rbacutils.ScopeProject:
subq = q1.Equals("tenant_id", userCred.GetProjectId()).SubQuery()
case rbacutils.ScopeDomain:
subq = q1.Equals("domain_id", userCred.GetProjectDomainId()).SubQuery()
}
if subq != nil {
q = q.Join(subq, sqlchemy.Equals(q.Field("elasticcache_id"), subq.Field("id")))
}
}
return q
}
func (self *SElasticcache) getCloudProviderInfo() SCloudProviderInfo {
region := self.GetRegion()
provider := self.GetCloudprovider()
@@ -199,6 +240,16 @@ func (self *SElasticcache) GetDetailsLoginInfo(ctx context.Context, userCred mcc
return ret, nil
}
func (manager *SElasticcacheManager) GetOwnerIdByElasticcacheId(elasticcacheId string) mcclient.IIdentityProvider {
ec, err := db.FetchById(ElasticcacheManager, elasticcacheId)
if err != nil {
log.Errorf("SElasticcacheManager.GetOwnerIdByElasticcacheId %s", err)
return nil
}
return ec.(*SElasticcache).GetOwnerId()
}
func (manager *SElasticcacheManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) {
q, err := manager.SVirtualResourceBaseManager.ListItemFilter(ctx, q, userCred, query)
if err != nil {
@@ -697,6 +748,10 @@ func (self *SElasticcache) ValidateDeleteCondition(ctx context.Context) error {
return httperrors.NewInvalidStatusError("Elastic cache is locked, cannot delete")
}
if self.GetChargeType() == billing.BILLING_TYPE_PREPAID && self.ExpiredAt.Sub(time.Now()).Seconds() > 0 {
return httperrors.NewInvalidStatusError("Elastic cache is not expired, cannot delete")
}
return self.ValidatePurgeCondition(ctx)
}
@@ -21,6 +21,7 @@ import (
"yunion.io/x/log"
"yunion.io/x/pkg/errors"
"yunion.io/x/pkg/util/compare"
"yunion.io/x/sqlchemy"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
@@ -29,6 +30,7 @@ import (
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/util/rbacutils"
)
// SElasticcache.Parameter
@@ -168,6 +170,22 @@ func (manager *SElasticcacheParameterManager) newFromCloudElasticcacheParameter(
return &parameter, nil
}
func (manager *SElasticcacheParameterManager) ResourceScope() rbacutils.TRbacScope {
return rbacutils.ScopeProject
}
func (manager *SElasticcacheParameterManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheParameterManager) FilterByOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, userCred, scope)
}
func (self *SElasticcacheParameter) GetOwnerId() mcclient.IIdentityProvider {
return ElasticcacheManager.GetOwnerIdByElasticcacheId(self.ElasticcacheId)
}
func (self *SElasticcacheParameter) GetRegion() *SCloudregion {
ieb, err := db.FetchById(ElasticcacheManager, self.ElasticcacheId)
if err != nil {
+1
View File
@@ -142,6 +142,7 @@ type IRegionDriver interface {
}
type IElasticcacheDriver interface {
IsSupportedElasticcache() bool
AllowCreateElasticcacheBackup(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, elasticcache *SElasticcache) error
AllowUpdateElasticcacheAuthMode(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, elasticcache *SElasticcache) error
ValidateCreateElasticcacheData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
+4
View File
@@ -1535,3 +1535,7 @@ func (self *SAliyunRegionDriver) RequestElasticcacheAccountResetPassword(ctx con
return ea.SyncWithCloudElasticcacheAccount(ctx, userCred, iea)
}
func (self *SAliyunRegionDriver) IsSupportedElasticcache() bool {
return true
}
+4
View File
@@ -294,3 +294,7 @@ func (self *SBaseRegionDriver) ValidateResetDBInstancePassword(ctx context.Conte
func (self *SBaseRegionDriver) IsSupportKeepDBInstanceManualBackup() bool {
return false
}
func (self *SBaseRegionDriver) IsSupportedElasticcache() bool {
return false
}
+4
View File
@@ -2562,3 +2562,7 @@ func (self *SHuaWeiRegionDriver) AllowCreateElasticcacheBackup(ctx context.Conte
func (self *SHuaWeiRegionDriver) AllowUpdateElasticcacheAuthMode(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, elasticcache *models.SElasticcache) error {
return fmt.Errorf("not support update huawei elastic cache auth_mode")
}
func (self *SHuaWeiRegionDriver) IsSupportedElasticcache() bool {
return true
}