mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
add cloud-region-providers climc command
This commit is contained in:
@@ -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"`
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user