@@ -9,13 +9,15 @@ import (
99 . "github.ibm.com/SoftLayer/softlayer-cli/plugin/i18n"
1010 "github.ibm.com/SoftLayer/softlayer-cli/plugin/managers"
1111 "github.ibm.com/SoftLayer/softlayer-cli/plugin/metadata"
12+ "github.ibm.com/SoftLayer/softlayer-cli/plugin/utils"
1213)
1314
1415type VolumeCountCommand struct {
1516 * metadata.SoftlayerStorageCommand
1617 Command * cobra.Command
1718 StorageManager managers.StorageManager
1819 Datacenter string
20+ SortBy string
1921}
2022
2123func NewVolumeCountCommand (sl * metadata.SoftlayerStorageCommand ) (cmd * VolumeCountCommand ) {
@@ -32,11 +34,14 @@ func NewVolumeCountCommand(sl *metadata.SoftlayerStorageCommand) (cmd *VolumeCou
3234 },
3335 }
3436 cobraCmd .Flags ().StringVarP (& thisCmd .Datacenter , "datacenter" , "d" , "" , T ("Filter by datacenter shortname" ))
37+ cobraCmd .Flags ().StringVarP (& thisCmd .SortBy , "sortby" , "s" , "" , T ("Column to sort by" ))
3538 thisCmd .Command = cobraCmd
3639 return thisCmd
3740}
3841
3942func (cmd * VolumeCountCommand ) Run (args []string ) error {
43+ sortby := cmd .SortBy
44+ flag := false
4045 mask := "mask[id,serviceResource.datacenter.name]"
4146 volumes , err := cmd .StorageManager .ListVolumes (managers .VOLUME_TYPE_FILE , cmd .Datacenter , "" , "" , "" , 0 , mask )
4247 if err != nil {
@@ -56,11 +61,36 @@ func (cmd *VolumeCountCommand) Run(args []string) error {
5661 var datacenters []string
5762 for key , _ := range result {
5863 datacenters = append (datacenters , key )
64+ flag = true
5965 }
6066 sort .Strings (datacenters )
67+
68+ sortColumns := []string {"Datacenter" , "Count" }
69+
70+ keys := make ([]string , 0 , len (result ))
71+ _ , err = utils .ValidateColumns2 (sortby , nil , nil , nil , sortColumns )
72+ if err != nil {
73+ return err
74+ }
75+
6176 table := cmd .UI .Table ([]string {T ("Data center" ), T ("Count" )})
62- for _ , dc := range datacenters {
63- table .Add (dc , strconv .Itoa (result [dc ]))
77+
78+ if sortby == "Count" || sortby == "count" {
79+ for key := range result {
80+ keys = append (keys , key )
81+ }
82+ sort .SliceStable (keys , func (i , j int ) bool {
83+ return result [keys [i ]] < result [keys [j ]]
84+ })
85+ for _ , k := range keys {
86+ table .Add (k , strconv .Itoa (result [k ]))
87+ }
88+ flag = false
89+ }
90+ if flag == true {
91+ for _ , dc := range datacenters {
92+ table .Add (dc , strconv .Itoa (result [dc ]))
93+ }
6494 }
6595 table .Print ()
6696 return nil
0 commit comments