add cloud-region-providers climc command

This commit is contained in:
Qiu Jian
2019-02-14 16:28:16 +08:00
parent e1b7854993
commit 16bb703d98
2 changed files with 37 additions and 11 deletions
+18
View File
@@ -59,6 +59,24 @@ func init() {
return nil
})
R(&CloudregionCityListOptions{}, "cloud-region-providers", "List cities where cloud region resides", func(s *mcclient.ClientSession, args *CloudregionCityListOptions) error {
params, err := options.StructToParams(args)
if err != nil {
return err
}
results, err := modules.Cloudregions.GetRegionProviders(s, params)
if err != nil {
return err
}
listResult := modules.ListResult{}
listResult.Data, err = results.GetArray()
if err != nil {
return err
}
printList(&listResult, nil)
return nil
})
type CloudregionCreateOptions struct {
Id string `help:"ID of the region"`
NAME string `help:"Name of the region"`
+19 -11
View File
@@ -15,23 +15,23 @@ var (
Cloudregions SCloudregionManager
)
type sCityCounter struct {
City string
Regions int
type sNameCounter struct {
Name string
Count int
}
type cityCounters []sCityCounter
type cityCounters []sNameCounter
func (cc cityCounters) Len() int { return len(cc) }
func (cc cityCounters) Swap(i, j int) { cc[i], cc[j] = cc[j], cc[i] }
func (cc cityCounters) Less(i, j int) bool {
if cc[i].Regions != cc[j].Regions {
return cc[i].Regions > cc[j].Regions
if cc[i].Count != cc[j].Count {
return cc[i].Count > cc[j].Count
}
return cc[i].City < cc[j].City
return cc[i].Name < cc[j].Name
}
func (this *SCloudregionManager) GetRegionCities(session *mcclient.ClientSession, params jsonutils.JSONObject) (jsonutils.JSONObject, error) {
func (this *SCloudregionManager) getRegionAttributeList(session *mcclient.ClientSession, params jsonutils.JSONObject, attr string) (jsonutils.JSONObject, error) {
paramsDict := params.(*jsonutils.JSONDict)
paramsDict.Set("limit", jsonutils.NewInt(0))
@@ -42,7 +42,7 @@ func (this *SCloudregionManager) GetRegionCities(session *mcclient.ClientSession
cities := make(map[string]int)
for i := range listResult.Data {
cityStr, _ := listResult.Data[i].GetString("city")
cityStr, _ := listResult.Data[i].GetString(attr)
if len(cityStr) > 0 {
if _, ok := cities[cityStr]; ok {
cities[cityStr] += 1
@@ -52,10 +52,10 @@ func (this *SCloudregionManager) GetRegionCities(session *mcclient.ClientSession
}
}
cityList := make([]sCityCounter, len(cities))
cityList := make([]sNameCounter, len(cities))
i := 0
for k, v := range cities {
cityList[i] = sCityCounter{City: k, Regions: v}
cityList[i] = sNameCounter{Name: k, Count: v}
i += 1
}
@@ -64,6 +64,14 @@ func (this *SCloudregionManager) GetRegionCities(session *mcclient.ClientSession
return jsonutils.Marshal(cityList), nil
}
func (this *SCloudregionManager) GetRegionCities(session *mcclient.ClientSession, params jsonutils.JSONObject) (jsonutils.JSONObject, error) {
return this.getRegionAttributeList(session, params, "city")
}
func (this *SCloudregionManager) GetRegionProviders(session *mcclient.ClientSession, params jsonutils.JSONObject) (jsonutils.JSONObject, error) {
return this.getRegionAttributeList(session, params, "provider")
}
func init() {
Cloudregions = SCloudregionManager{
NewComputeManager("cloudregion", "cloudregions",