Automatic merge from release/2.3.0 -> release/2.4.0

* commit '516c39a6144b5558505fa6669d70a8cf4ad3b496':
  loadbalancers: 使用ApplyModelFilters()
  validators: 添加ApplyModelFilters()
  loadbalancerlisteners: 改正update enable_http2
  lbagent: 仅处理manager_id为空的API对象
  gofmt
This commit is contained in:
邱剑
2018-12-12 21:14:07 +08:00
7 changed files with 64 additions and 78 deletions
+29
View File
@@ -0,0 +1,29 @@
package validators
import (
"yunion.io/x/jsonutils"
"yunion.io/x/sqlchemy"
)
type ModelFilterOptions struct {
Key string
ModelKeyword string
ProjectId string
}
func ApplyModelFilters(q *sqlchemy.SQuery, data *jsonutils.JSONDict, opts []*ModelFilterOptions) (*sqlchemy.SQuery, error) {
var err error
for _, opt := range opts {
v := NewModelIdOrNameValidator(
opt.Key,
opt.ModelKeyword,
opt.ProjectId,
)
v.Optional(true)
q, err = v.QueryFilter(q, data)
if err != nil {
return nil, err
}
}
return q, nil
}
@@ -52,13 +52,11 @@ func (man *SLoadbalancerBackendGroupManager) ListItemFilter(ctx context.Context,
}
userProjId := userCred.GetProjectId()
data := query.(*jsonutils.JSONDict)
{
lbV := validators.NewModelIdOrNameValidator("loadbalancer", "loadbalancer", userProjId)
lbV.Optional(true)
q, err = lbV.QueryFilter(q, data)
if err != nil {
return nil, err
}
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
{Key: "loadbalancer", ModelKeyword: "loadbalancer", ProjectId: userProjId},
})
if err != nil {
return nil, err
}
return q, nil
}
+6 -16
View File
@@ -55,22 +55,12 @@ func (man *SLoadbalancerBackendManager) ListItemFilter(ctx context.Context, q *s
}
userProjId := userCred.GetProjectId()
data := query.(*jsonutils.JSONDict)
{
backendGroupV := validators.NewModelIdOrNameValidator("backend_group", "loadbalancerbackendgroup", userProjId)
backendGroupV.Optional(true)
q, err = backendGroupV.QueryFilter(q, data)
if err != nil {
return nil, err
}
}
{
// NOTE extend this when new backend_type was added
backendV := validators.NewModelIdOrNameValidator("backend", "server", userProjId)
backendV.Optional(true)
q, err = backendV.QueryFilter(q, data)
if err != nil {
return nil, err
}
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
{Key: "backend_group", ModelKeyword: "loadbalancerbackendgroup", ProjectId: userProjId},
{Key: "backend", ModelKeyword: "server", ProjectId: userProjId}, // NOTE extend this when new backend_type was added
})
if err != nil {
return nil, err
}
return q, nil
}
@@ -72,21 +72,12 @@ func (man *SLoadbalancerListenerRuleManager) ListItemFilter(ctx context.Context,
}
userProjId := userCred.GetProjectId()
data := query.(*jsonutils.JSONDict)
{
listenerV := validators.NewModelIdOrNameValidator("listener", "loadbalancerlistener", userProjId)
listenerV.Optional(true)
q, err = listenerV.QueryFilter(q, data)
if err != nil {
return nil, err
}
}
{
backendGroupV := validators.NewModelIdOrNameValidator("backend_group", "loadbalancerbackendgroup", userProjId)
backendGroupV.Optional(true)
q, err = backendGroupV.QueryFilter(q, data)
if err != nil {
return nil, err
}
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
{Key: "listener", ModelKeyword: "loadbalancerlistener", ProjectId: userProjId},
{Key: "backend_group", ModelKeyword: "loadbalancerbackendgroup", ProjectId: userProjId},
})
if err != nil {
return nil, err
}
return q, nil
}
+8 -24
View File
@@ -143,29 +143,13 @@ func (man *SLoadbalancerListenerManager) ListItemFilter(ctx context.Context, q *
}
userProjId := userCred.GetProjectId()
data := query.(*jsonutils.JSONDict)
{
lbV := validators.NewModelIdOrNameValidator("loadbalancer", "loadbalancer", userProjId)
lbV.Optional(true)
q, err = lbV.QueryFilter(q, data)
if err != nil {
return nil, err
}
}
{
backendGroupV := validators.NewModelIdOrNameValidator("backend_group", "loadbalancerbackendgroup", userProjId)
backendGroupV.Optional(true)
q, err = backendGroupV.QueryFilter(q, data)
if err != nil {
return nil, err
}
}
{
aclV := validators.NewModelIdOrNameValidator("acl", "loadbalanceracl", userProjId)
aclV.Optional(true)
q, err = aclV.QueryFilter(q, data)
if err != nil {
return nil, err
}
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
{Key: "loadbalancer", ModelKeyword: "loadbalancer", ProjectId: userProjId},
{Key: "backend_group", ModelKeyword: "loadbalancerbackendgroup", ProjectId: userProjId},
{Key: "acl", ModelKeyword: "loadbalanceracl", ProjectId: userProjId},
})
if err != nil {
return nil, err
}
return q, nil
}
@@ -357,7 +341,7 @@ func (lblis *SLoadbalancerListener) ValidateUpdateData(ctx context.Context, user
"certificate": certV,
"tls_cipher_policy": tlsCipherPolicyV,
"enable_http2": validators.NewBoolValidator("enable_http2").Default(true),
"enable_http2": validators.NewBoolValidator("enable_http2"),
}
for _, v := range keyV {
v.Optional(true)
+6 -15
View File
@@ -62,21 +62,12 @@ func (man *SLoadbalancerManager) ListItemFilter(ctx context.Context, q *sqlchemy
}
userProjId := userCred.GetProjectId()
data := query.(*jsonutils.JSONDict)
{
networkV := validators.NewModelIdOrNameValidator("network", "network", userProjId)
networkV.Optional(true)
q, err = networkV.QueryFilter(q, data)
if err != nil {
return nil, err
}
}
{
zoneV := validators.NewModelIdOrNameValidator("zone", "zone", userProjId)
zoneV.Optional(true)
q, err = zoneV.QueryFilter(q, data)
if err != nil {
return nil, err
}
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
{Key: "network", ModelKeyword: "network", ProjectId: userProjId},
{Key: "zone", ModelKeyword: "zone", ProjectId: userProjId},
})
if err != nil {
return nil, err
}
return q, nil
}
+4 -1
View File
@@ -88,7 +88,10 @@ func GetModels(opts *GetModelsOptions) error {
listOptions := options.BaseListOptions{
Admin: options.Bool(true),
Details: options.Bool(true),
Filter: []string{minUpdatedAtFilter(minUpdatedAt)},
Filter: []string{
minUpdatedAtFilter(minUpdatedAt), // order matters, filter.0
"isempty(manager_id)", // len(manager_id) > 0 is for pubcloud objects
},
OrderBy: []string{"updated_at", "id"},
Order: "asc",
Limit: options.Int(opts.BatchListSize),