Skip to content

Commit

Permalink
Merge pull request #178 from ans-group/lb-vip-support
Browse files Browse the repository at this point in the history
Add VIP list/show support for LBs
  • Loading branch information
Xiol committed Feb 13, 2024
2 parents 8456f75 + cafa4f7 commit 6c348ed
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 0 deletions.
1 change: 1 addition & 0 deletions cmd/loadbalancer/loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func LoadBalancerRootCmd(f factory.ClientFactory, fs afero.Fs) *cobra.Command {
cmd.AddCommand(loadbalancerDeploymentRootCmd(f))
cmd.AddCommand(loadbalancerListenerRootCmd(f, fs))
cmd.AddCommand(loadbalancerTargetGroupRootCmd(f))
cmd.AddCommand(loadbalancerVipsCmd(f))
cmd.AddCommand(loadbalancerTerraformCmd(f))

return cmd
Expand Down
77 changes: 77 additions & 0 deletions cmd/loadbalancer/loadbalancer_vips.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package loadbalancer

import (
"fmt"
"strconv"

"github.com/ans-group/cli/internal/pkg/factory"
"github.com/ans-group/cli/internal/pkg/helper"
"github.com/ans-group/cli/internal/pkg/output"
"github.com/ans-group/sdk-go/pkg/service/loadbalancer"
"github.com/spf13/cobra"
)

func loadbalancerVipsCmd(f factory.ClientFactory) *cobra.Command {
cmd := &cobra.Command{
Use: "vips",
Short: "sub-commands relating to VIPs",
}

cmd.AddCommand(loadbalancerVipsListCmd(f))
cmd.AddCommand(loadbalancerVipsShowCmd(f))

return cmd
}

func loadbalancerVipsListCmd(f factory.ClientFactory) *cobra.Command {
return &cobra.Command{
Use: "list",
Short: "Lists VIPs assigned to your LB clusters",
Example: "ans loadbalancer vips list",
RunE: loadbalancerCobraRunEFunc(f, loadbalancerVipsList),
}
}

func loadbalancerVipsList(service loadbalancer.LoadBalancerService, cmd *cobra.Command, args []string) error {
params, err := helper.GetAPIRequestParametersFromFlags(cmd)
if err != nil {
return err
}

vips, err := service.GetVIPs(params)
if err != nil {
return fmt.Errorf("Error retrieving VIPs: %s", err)
}

return output.CommandOutput(cmd, OutputLoadBalancerVIPsProvider(vips))
}

func loadbalancerVipsShowCmd(f factory.ClientFactory) *cobra.Command {
return &cobra.Command{
Use: "show",
Short: "Show details about a VIP",
Example: "ans loadbalancer vips show 12345",
RunE: loadbalancerCobraRunEFunc(f, loadbalancerVipsShow),
}
}

func loadbalancerVipsShow(service loadbalancer.LoadBalancerService, cmd *cobra.Command, args []string) error {
var vips []loadbalancer.VIP
for _, arg := range args {
vipID, err := strconv.Atoi(arg)
if err != nil {
output.OutputWithErrorLevelf("Invalid VIP ID [%s]", arg)
continue
}

vip, err := service.GetVIP(vipID)
if err != nil {
output.OutputWithErrorLevelf("Error retrieving VIP [%d]: %s", vip, err)
continue
}

vips = append(vips, vip)
}

return output.CommandOutput(cmd, OutputLoadBalancerVIPsProvider(vips))
}
5 changes: 5 additions & 0 deletions cmd/loadbalancer/output.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,8 @@ func OutputLoadBalancerDeploymentsProvider(deployments []loadbalancer.Deployment
return output.NewSerializedOutputHandlerDataProvider(deployments).
WithDefaultFields([]string{"id", "cluster_id", "successful", "created_at"})
}

func OutputLoadBalancerVIPsProvider(vips []loadbalancer.VIP) output.OutputHandlerDataProvider {
return output.NewSerializedOutputHandlerDataProvider(vips).
WithDefaultFields([]string{"id", "cluster_id", "internal_cidr", "external_cidr"})
}

0 comments on commit 6c348ed

Please sign in to comment.