From 16bb703d9892d3db88c7ae4df969d9b9257a4a41 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Thu, 14 Feb 2019 16:28:16 +0800 Subject: [PATCH] add cloud-region-providers climc command --- cmd/climc/shell/cloudregions.go | 18 ++++++++++++++ pkg/mcclient/modules/mod_cloudregions.go | 30 +++++++++++++++--------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/cmd/climc/shell/cloudregions.go b/cmd/climc/shell/cloudregions.go index 635ccda5b6..fb789365bc 100644 --- a/cmd/climc/shell/cloudregions.go +++ b/cmd/climc/shell/cloudregions.go @@ -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"` diff --git a/pkg/mcclient/modules/mod_cloudregions.go b/pkg/mcclient/modules/mod_cloudregions.go index 68e04b2c24..7fc9866512 100644 --- a/pkg/mcclient/modules/mod_cloudregions.go +++ b/pkg/mcclient/modules/mod_cloudregions.go @@ -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",