Skip to content

Commit

Permalink
Add summarize list options for VKE, VLB & database (#348)
Browse files Browse the repository at this point in the history
* Add summarize flag to k8s list command

* Add summarize output for load balancers

* Add status column in kubernetes summarize

* Add instance count to load-balancer summary

* Fix summarize flag description

* Add summarize examples in command help

* Add database list summarized option

* Remove extra whitespace

* Remove extraneous example for database help
  • Loading branch information
optik-aper committed Sep 12, 2023
1 parent 333f379 commit 0d07411
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 7 deletions.
20 changes: 18 additions & 2 deletions cmd/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ var (
# Full example
vultr-cli database
`
databaseListLong = `Get all databases on your Vultr account`
databaseListExample = `
# Full example
vultr-cli database list
# Summarized view
vultr-cli database list --summarize
`
databaseCreateLong = `Create a new Managed Database with specified plan, region, and database engine/version`
databaseCreateExample = `
# Full example
Expand Down Expand Up @@ -78,6 +86,7 @@ func Database() *cobra.Command {
databaseList.Flags().StringP("label", "l", "", "(optional) Filter by label.")
databaseList.Flags().StringP("tag", "t", "", "(optional) Filter by tag.")
databaseList.Flags().StringP("region", "r", "", "(optional) Filter by region.")
databaseList.Flags().BoolP("summarize", "", false, "(optional) Summarize the list output. One line per database.")

// Database create flags
databaseCreate.Flags().StringP("database-engine", "e", "", "database engine for the new manaaged database")
Expand Down Expand Up @@ -367,7 +376,8 @@ var databaseList = &cobra.Command{
Use: "list",
Aliases: []string{"l"},
Short: "list all available managed databases",
Long: ``,
Long: databaseListLong,
Example: databaseListExample,
Run: func(cmd *cobra.Command, args []string) {
label, _ := cmd.Flags().GetString("label")
tag, _ := cmd.Flags().GetString("tag")
Expand All @@ -377,13 +387,19 @@ var databaseList = &cobra.Command{
Tag: tag,
Region: region,
}
summarize, _ := cmd.Flags().GetBool("summarize")

s, meta, _, err := client.Database.List(context.TODO(), options)
if err != nil {
fmt.Printf("error getting list of databases : %v\n", err)
os.Exit(1)
}

printer.DatabaseList(s, meta)
if summarize {
printer.DatabaseListSummary(s, meta)
} else {
printer.DatabaseList(s, meta)
}
},
}

Expand Down
11 changes: 10 additions & 1 deletion cmd/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ var (
# Shortened with alias commands
vultr-cli k l
# Summarized view
vultr-cli kubernetes list --summarize
`

updateLong = `Update a specific kubernetes cluster on your Vultr Account`
Expand Down Expand Up @@ -252,6 +255,7 @@ func Kubernetes() *cobra.Command {

k8List.Flags().StringP("cursor", "c", "", "(optional) cursor for paging.")
k8List.Flags().IntP("per-page", "p", 100, "(optional) Number of items requested per page. Default is 100 and Max is 500.")
k8List.Flags().BoolP("summarize", "", false, "(optional) Summarize the list output. One line per cluster.")

k8Update.Flags().StringP("label", "l", "", "label for your kubernetes cluster")
if err := k8Update.MarkFlagRequired("label"); err != nil {
Expand Down Expand Up @@ -374,14 +378,19 @@ var k8List = &cobra.Command{
Example: listExample,
Run: func(cmd *cobra.Command, args []string) {
options := getPaging(cmd)
summarize, _ := cmd.Flags().GetBool("summarize")

k8s, meta, _, err := client.Kubernetes.ListClusters(context.Background(), options)
if err != nil {
fmt.Printf("error listing kubernetes clusters : %v\n", err)
os.Exit(1)
}

printer.Clusters(k8s, meta)
if summarize {
printer.ClustersSummary(k8s, meta)
} else {
printer.Clusters(k8s, meta)
}
},
}

Expand Down
32 changes: 28 additions & 4 deletions cmd/loadBalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,22 @@ var (
# Full example
vultr-cli load-balancer
`

lbListLong = `Get all load balancers on your Vultr account`
lbListExample = `
# Full example
vultr-cli load-balancer list
# Full example with paging
vultr-cli load-balancer list --per-page=1 --cursor="bmV4dF9fQU1T"
# Shortened with alias commands
vultr-cli lb l
# Summarized view
vultr-cli load-balancer list --summarize
`

lbCreateLong = `Create a new Load Balancer with the desired settings`
lbCreateExample = `
# Full example
Expand Down Expand Up @@ -108,6 +124,7 @@ func LoadBalancer() *cobra.Command {
// List
lbList.Flags().StringP("cursor", "c", "", "(optional) cursor for paging.")
lbList.Flags().IntP("per-page", "p", 100, "(optional) Number of items requested per page. Default is 100 and Max is 500.")
lbList.Flags().BoolP("summarize", "", false, "(optional) Summarize the list output. One line per load balancer.")

// Update
lbUpdate.Flags().StringP("balancing-algorithm", "b", "roundrobin", "(optional) balancing algorithm that determines server selection | roundrobin or leastconn")
Expand Down Expand Up @@ -354,18 +371,25 @@ var lbGet = &cobra.Command{
}

var lbList = &cobra.Command{
Use: "list",
Short: "retrieves a list of active load balancers",
Long: ``,
Use: "list",
Short: "retrieves a list of active load balancers",
Long: lbListLong,
Example: lbListExample,
Run: func(cmd *cobra.Command, args []string) {
options := getPaging(cmd)
summarize, _ := cmd.Flags().GetBool("summarize")

list, meta, _, err := client.LoadBalancer.List(context.Background(), options)
if err != nil {
fmt.Printf("error listing load balancers : %v\n", err)
os.Exit(1)
}

printer.LoadBalancerList(list, meta)
if summarize {
printer.LoadBalancerListSummary(list, meta)
} else {
printer.LoadBalancerList(list, meta)
}
},
}

Expand Down
11 changes: 11 additions & 0 deletions cmd/printer/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,17 @@ func DatabaseList(databases []govultr.Database, meta *govultr.Meta) {
flush()
}

// DatabaseListSummary will generate a summarized printer display of all Managed Databases on the account
func DatabaseListSummary(databases []govultr.Database, meta *govultr.Meta) {
display(columns{"ID", "REGION", "LABEL", "STATUS", "ENGINE", "VERSION", "HOST", "PORT", "USER", "PASSWORD"})
for _, d := range databases {
display(columns{d.ID, d.Region, d.Label, d.Status, d.DatabaseEngine, d.DatabaseEngineVersion, d.Host, d.Port, d.User, d.Password})
}

MetaDBaaS(meta)
flush()
}

// Database will generate a printer display of a given Managed Database
func Database(database *govultr.Database) {
display(columns{"ID", database.ID})
Expand Down
18 changes: 18 additions & 0 deletions cmd/printer/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,24 @@ func NodePool(np *govultr.NodePool) {
flush()
}

func ClustersSummary(clusters []govultr.Cluster, meta *govultr.Meta) {
display(columns{"ID", "LABEL", "STATUS", "REGION", "VERSION", "NODEPOOL#", "NODE#"})

for _, k := range clusters {
nodePoolCount := len(k.NodePools)
var nodeCount int = 0

for _, np := range k.NodePools {
nodeCount += len(np.Nodes)
}

display(columns{k.ID, k.Label, k.Status, k.Region, k.Version, nodePoolCount, nodeCount})
}

Meta(meta)
flush()
}

func K8Versions(versions *govultr.Versions) {
display(columns{"VERSIONS"})
for _, v := range versions.Versions {
Expand Down
22 changes: 22 additions & 0 deletions cmd/printer/loadBalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,25 @@ func LoadBalancerFWRule(rule *govultr.LBFirewallRule) {

flush()
}

func LoadBalancerListSummary(loadbalancer []govultr.LoadBalancer, meta *govultr.Meta) {
display(columns{"ID", "LABEL", "STATUS", "REGION", "INSTANCE#", "FORWARD#", "FIREWALL#"})
for _, lb := range loadbalancer {
forwardRuleCount := len(lb.ForwardingRules)
firewallRuleCount := len(lb.FirewallRules)
instanceCount := len(lb.Instances)

display(columns{
lb.ID,
lb.Label,
lb.Status,
lb.Region,
instanceCount,
forwardRuleCount,
firewallRuleCount,
})
}

Meta(meta)
flush()
}

0 comments on commit 0d07411

Please sign in to comment.