Merge pull request #4184 from tb365/bugfix/tb-bugfix-1216

Bugfix/tb bugfix 1216
This commit is contained in:
yunion-ci-robot
2019-12-20 11:26:17 +08:00
committed by GitHub
4 changed files with 67 additions and 7 deletions
@@ -437,6 +437,22 @@ func (self *SElasticcacheAccount) StartResetPasswordTask(ctx context.Context, us
return nil
}
func (self *SElasticcacheAccount) AllowGetDetailsLoginInfo(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool {
return db.IsAdminAllowGetSpec(userCred, self, "login-info")
}
func (self *SElasticcacheAccount) GetDetailsLoginInfo(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
password, err := self.GetDecodedPassword()
if err != nil {
return nil, err
}
ret := jsonutils.NewDict()
ret.Add(jsonutils.NewString(self.Name), "username")
ret.Add(jsonutils.NewString(password), "password")
return ret, nil
}
func (self *SElasticcacheAccount) ValidatePurgeCondition(ctx context.Context) error {
return nil
}
+39 -7
View File
@@ -23,9 +23,11 @@ import (
"yunion.io/x/pkg/util/compare"
"yunion.io/x/sqlchemy"
"yunion.io/x/onecloud/pkg/apis/billing"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
"yunion.io/x/onecloud/pkg/cloudcommon/policy"
"yunion.io/x/onecloud/pkg/cloudcommon/validators"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/util/stringutils2"
@@ -154,8 +156,17 @@ func (manager *SElasticcacheSkuManager) ListItemFilter(ctx context.Context, q *s
if usable, _ := query.Bool("usable"); usable {
q = usableFilter(q, true)
q = q.NotEquals("postpaid_status", api.SkuStatusSoldout)
q = q.NotEquals("prepaid_status", api.SkuStatusSoldout)
sq := sqlchemy.OR(sqlchemy.Equals(q.Field("prepaid_status"), api.SkuStatusAvailable), sqlchemy.Equals(q.Field("postpaid_status"), api.SkuStatusAvailable))
q = q.Filter(sq)
}
if b, _ := query.GetString("billing_type"); len(b) > 0 {
switch b {
case billing.BILLING_TYPE_POSTPAID:
q = q.Equals("postpaid_status", api.SkuStatusAvailable)
case billing.BILLING_TYPE_PREPAID:
q = q.Equals("prepaid_status", api.SkuStatusAvailable)
}
}
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
@@ -172,6 +183,16 @@ func (manager *SElasticcacheSkuManager) ListItemFilter(ctx context.Context, q *s
q = q.Join(regionTable, sqlchemy.Equals(regionTable.Field("id"), q.Field("cloudregion_id"))).Filter(sqlchemy.Equals(regionTable.Field("city"), city))
}
// 按区间查询内存, 避免0.75G这样的套餐不好过滤
memSizeMB, _ := query.Int("memory_size_mb")
if memSizeMB > 0 {
s, e := intervalMem(int(memSizeMB))
q.GT("memory_size_mb", s)
q.LE("memory_size_mb", e)
queryDict := query.(*jsonutils.JSONDict)
queryDict.Remove("memory_size_mb")
}
return q, err
}
@@ -275,7 +296,12 @@ func (manager *SElasticcacheSkuManager) AllowGetPropertyInstanceSpecs(ctx contex
func (manager *SElasticcacheSkuManager) GetPropertyInstanceSpecs(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
q := manager.Query("memory_size_mb")
q, err := manager.ListItemFilter(ctx, q, userCred, query)
q, err := db.ListItemQueryFilters(manager, ctx, q, userCred, query, policy.PolicyActionList)
if err != nil {
return nil, err
}
q, err = manager.ListItemFilter(ctx, q, userCred, query)
if err != nil {
return nil, err
}
@@ -293,11 +319,12 @@ func (manager *SElasticcacheSkuManager) GetPropertyInstanceSpecs(ctx context.Con
var ms int
err := rows.Scan(&ms)
if err == nil {
if _, exist := mems[ms]; !exist {
m := roundMem(ms)
if _, exist := mems[m]; !exist {
if ms > 0 {
mems_mb.Add(jsonutils.NewInt(int64(ms)))
mems_mb.Add(jsonutils.NewInt(int64(m)))
}
mems[ms] = true
mems[m] = true
}
} else {
log.Debugf("SElasticcacheSkuManager.GetPropertyInstanceSpecs %s", err)
@@ -315,7 +342,12 @@ func (manager *SElasticcacheSkuManager) AllowGetPropertyCapability(ctx context.C
func (manager *SElasticcacheSkuManager) GetPropertyCapability(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
q := manager.Query("engine", "engine_version", "local_category", "node_type", "performance_type")
q, err := manager.ListItemFilter(ctx, q, userCred, query)
q, err := db.ListItemQueryFilters(manager, ctx, q, userCred, query, policy.PolicyActionList)
if err != nil {
return nil, err
}
q, err = manager.ListItemFilter(ctx, q, userCred, query)
if err != nil {
return nil, err
}
+1
View File
@@ -46,6 +46,7 @@ func (self *SZoneResourceBase) GetCustomizeColumns(ctx context.Context, userCred
info["region"] = region.GetName()
info["region_id"] = region.GetId()
if len(region.ExternalId) > 0 {
info["region_external_id"] = region.ExternalId
info["region_ext_id"] = fetchExternalId(region.ExternalId)
}
}
+11
View File
@@ -577,6 +577,17 @@ func (manager *SZoneManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQu
iconditions := NetworkUsableZoneQueries(q.Field("id"), usableNet, usableVpc)
q = q.Filter(sqlchemy.OR(iconditions...))
q = q.Equals("status", api.ZONE_ENABLE)
service, _ := query.GetString("service")
switch service {
case ElasticcacheManager.KeywordPlural():
q2 := ElasticcacheSkuManager.Query("zone_id").Distinct()
statusFilter := sqlchemy.OR(sqlchemy.Equals(q2.Field("prepaid_status"), api.SkuStatusAvailable), sqlchemy.Equals(q2.Field("postpaid_status"), api.SkuStatusAvailable))
skusSQ := q2.Filter(statusFilter).SubQuery()
q = q.In("id", skusSQ)
default:
break
}
}
managerStr, _ := query.GetString("manager")