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 }