github.com/kolanos/fargate@v0.2.3/cmd/lb_info.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"sort"
     7  	"strings"
     8  	"text/tabwriter"
     9  
    10  	ACM "github.com/jpignata/fargate/acm"
    11  	"github.com/jpignata/fargate/console"
    12  	ECS "github.com/jpignata/fargate/ecs"
    13  	ELBV2 "github.com/jpignata/fargate/elbv2"
    14  	"github.com/jpignata/fargate/util"
    15  	"github.com/spf13/cobra"
    16  )
    17  
    18  type LbInfoOperation struct {
    19  	LoadBalancerName string
    20  }
    21  
    22  var lbInfoCmd = &cobra.Command{
    23  	Use:   "info <load-balancer-name>",
    24  	Short: "Inspect load balancer",
    25  	Args:  cobra.ExactArgs(1),
    26  	Run: func(cmd *cobra.Command, args []string) {
    27  		operation := &LbInfoOperation{
    28  			LoadBalancerName: args[0],
    29  		}
    30  
    31  		getLoadBalancerInfo(operation)
    32  	},
    33  }
    34  
    35  func init() {
    36  	lbCmd.AddCommand(lbInfoCmd)
    37  }
    38  
    39  func getLoadBalancerInfo(operation *LbInfoOperation) {
    40  	elbv2 := ELBV2.New(sess)
    41  	acm := ACM.New(sess)
    42  	ecs := ECS.New(sess, clusterName)
    43  	loadBalancer := elbv2.DescribeLoadBalancer(operation.LoadBalancerName)
    44  	services := ecs.ListServices()
    45  
    46  	console.KeyValue("Load Balancer Name", "%s\n", loadBalancer.Name)
    47  	console.KeyValue("Status", "%s\n", util.Humanize(loadBalancer.State))
    48  	console.KeyValue("Type", "%s\n", util.Humanize(loadBalancer.Type))
    49  	console.KeyValue("DNS Name", "%s\n", loadBalancer.DNSName)
    50  	console.KeyValue("Subnets", "%s\n", strings.Join(loadBalancer.SubnetIds, ", "))
    51  	console.KeyValue("Security Groups", "%s\n", strings.Join(loadBalancer.SecurityGroupIds, ", "))
    52  	console.KeyValue("Ports", "\n")
    53  
    54  	for _, listener := range elbv2.GetListeners(loadBalancer.Arn) {
    55  		var ruleCount int
    56  
    57  		console.KeyValue("  "+listener.String(), "\n")
    58  
    59  		if len(listener.CertificateArns) > 0 {
    60  			certificateDomains := acm.ListCertificateDomainNames(listener.CertificateArns)
    61  			console.KeyValue("    Certificates", "%s\n", strings.Join(certificateDomains, ", "))
    62  		}
    63  
    64  		w := new(tabwriter.Writer)
    65  		w.Init(os.Stdout, 4, 2, 2, ' ', 0)
    66  
    67  		console.KeyValue("    Rules", "\n")
    68  
    69  		rules := elbv2.DescribeRules(listener.Arn)
    70  
    71  		sort.Slice(rules, func(i, j int) bool { return rules[i].Priority > rules[j].Priority })
    72  
    73  		for _, rule := range rules {
    74  			serviceName := fmt.Sprintf("Unknown (%s)", rule.TargetGroupArn)
    75  
    76  			if strings.Contains(rule.TargetGroupArn, fmt.Sprintf("/%s-default/", loadBalancer.Name)) {
    77  				continue
    78  			}
    79  
    80  			for _, service := range services {
    81  				if service.TargetGroupArn == rule.TargetGroupArn {
    82  					serviceName = service.Name
    83  				}
    84  			}
    85  
    86  			fmt.Fprintf(w, "     %d\t%s\t%s\n", rule.Priority, rule.String(), serviceName)
    87  
    88  			ruleCount++
    89  		}
    90  
    91  		if ruleCount == 0 {
    92  			fmt.Println("      None")
    93  		}
    94  
    95  		w.Flush()
    96  	}
    97  
    98  }