添加返回distinct标签

This commit is contained in:
ioito
2019-04-16 21:05:04 +08:00
parent 23fe739750
commit e3800c8ffc
3 changed files with 41 additions and 0 deletions
+13
View File
@@ -33,4 +33,17 @@ func init() {
printList(result, []string{})
return nil
})
R(&options.TagListOptions{}, "tag-list", "List tags", func(s *mcclient.ClientSession, opts *options.TagListOptions) error {
params, err := options.ListStructToParams(opts)
if err != nil {
return err
}
result, err := modules.Metadatas.Get(s, "tag-value-pairs", params)
if err != nil {
return err
}
printObject(result)
return nil
})
}
+26
View File
@@ -102,6 +102,32 @@ func (m *SMetadata) Delete(ctx context.Context, userCred mcclient.TokenCredentia
return DeleteModel(ctx, userCred, m)
}
func (manager *SMetadataManager) AllowGetPropertyTagValuePairs(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool {
return true
}
func (manager *SMetadataManager) GetPropertyTagValuePairs(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
q := manager.Query("key", "value").Distinct()
sql, err := manager.ListItemFilter(ctx, q, userCred, query)
if err != nil {
return nil, err
}
metadatas := []SMetadata{}
err = sql.All(&metadatas)
if err != nil {
return nil, err
}
result := map[string][]string{}
for i := 0; i < len(metadatas); i++ {
key, value := metadatas[i].Key, metadatas[i].Value
if _, ok := result[key]; !ok {
result[key] = []string{}
}
result[key] = append(result[key], value)
}
return jsonutils.Marshal(result), nil
}
func (manager *SMetadataManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool {
return true
}
+2
View File
@@ -21,3 +21,5 @@ type MetadataListOptions struct {
UserMeta *bool `help:"Show user metadata olny"`
Admin *bool `help:"Show all metadata"`
}
type TagListOptions MetadataListOptions