@@ -22,6 +22,11 @@ type cmdClusterGroup struct {
22
22
cluster * cmdCluster
23
23
}
24
24
25
+ type clusterGroupColumn struct {
26
+ Name string
27
+ Data func (api.ClusterGroup ) string
28
+ }
29
+
25
30
// Cluster management including assignment, creation, deletion, editing, listing, removal, renaming, and showing details.
26
31
func (c * cmdClusterGroup ) Command () * cobra.Command {
27
32
cmd := & cobra.Command {}
@@ -487,6 +492,47 @@ Pre-defined column shorthand chars:
487
492
488
493
const defaultClusterGroupColumns = "ndm"
489
494
495
+ func (c * cmdClusterGroupList ) parseColumns () ([]clusterGroupColumn , error ) {
496
+ columnsShorthandMap := map [rune ]clusterGroupColumn {
497
+ 'n' : {i18n .G ("NAME" ), c .clusterGroupNameColumnData },
498
+ 'm' : {i18n .G ("MEMBERS" ), c .membersColumnData },
499
+ 'd' : {i18n .G ("DESCRIPTION" ), c .descriptionColumnData },
500
+ }
501
+
502
+ columnList := strings .Split (c .flagColumns , "," )
503
+
504
+ columns := []clusterGroupColumn {}
505
+
506
+ for _ , columnEntry := range columnList {
507
+ if columnEntry == "" {
508
+ return nil , fmt .Errorf (i18n .G ("Empty column entry (redundant, leading or trailing command) in '%s'" ), c .flagColumns )
509
+ }
510
+
511
+ for _ , columnRune := range columnEntry {
512
+ column , ok := columnsShorthandMap [columnRune ]
513
+ if ! ok {
514
+ return nil , fmt .Errorf (i18n .G ("Unknown column shorthand char '%c' in '%s'" ), columnRune , columnEntry )
515
+ }
516
+
517
+ columns = append (columns , column )
518
+ }
519
+ }
520
+
521
+ return columns , nil
522
+ }
523
+
524
+ func (c * cmdClusterGroupList ) clusterGroupNameColumnData (group api.ClusterGroup ) string {
525
+ return group .Name
526
+ }
527
+
528
+ func (c * cmdClusterGroupList ) descriptionColumnData (group api.ClusterGroup ) string {
529
+ return group .Description
530
+ }
531
+
532
+ func (c * cmdClusterGroupList ) membersColumnData (group api.ClusterGroup ) string {
533
+ return fmt .Sprintf ("%d" , len (group .Members ))
534
+ }
535
+
490
536
// Run executes the command to list all the cluster groups, their descriptions, and number of members.
491
537
func (c * cmdClusterGroupList ) Run (cmd * cobra.Command , args []string ) error {
492
538
// Quick checks.
@@ -523,19 +569,28 @@ func (c *cmdClusterGroupList) Run(cmd *cobra.Command, args []string) error {
523
569
return err
524
570
}
525
571
572
+ // Parse column flags.
573
+ columns , err := c .parseColumns ()
574
+ if err != nil {
575
+ return err
576
+ }
577
+
526
578
// Render the table
527
579
data := [][]string {}
528
580
for _ , group := range groups {
529
- line := []string {group .Name , group .Description , fmt .Sprintf ("%d" , len (group .Members ))}
581
+ line := []string {}
582
+ for _ , column := range columns {
583
+ line = append (line , column .Data (group ))
584
+ }
585
+
530
586
data = append (data , line )
531
587
}
532
588
533
589
sort .Sort (cli .SortColumnsNaturally (data ))
534
590
535
- header := []string {
536
- i18n .G ("NAME" ),
537
- i18n .G ("DESCRIPTION" ),
538
- i18n .G ("MEMBERS" ),
591
+ header := []string {}
592
+ for _ , column := range columns {
593
+ header = append (header , column .Name )
539
594
}
540
595
541
596
return cli .RenderTable (c .flagFormat , header , data , groups )
0 commit comments