@@ -2,11 +2,13 @@ package util
22
33import (
44 "encoding/base64"
5+ "fmt"
56 "os"
67
78 "github.com/aws/aws-sdk-go/aws"
89 "github.com/aws/aws-sdk-go/aws/session"
910 "github.com/aws/aws-sdk-go/service/elb"
11+ "github.com/aws/aws-sdk-go/service/elbv2"
1012 g "github.com/onsi/ginkgo/v2"
1113 o "github.com/onsi/gomega"
1214 "github.com/tidwall/gjson"
@@ -46,18 +48,20 @@ func InitAwsSession(region string) *session.Session {
4648}
4749
4850type ELBClient struct {
49- svc * elb.ELB
51+ svc * elb.ELB
52+ svcV2 * elbv2.ELBV2
5053}
5154
5255// NewELBClient creates an ECRClient
5356func NewELBClient (sess * session.Session ) * ELBClient {
5457 return & ELBClient {
55- svc : elb .New (sess ),
58+ svc : elb .New (sess ),
59+ svcV2 : elbv2 .New (sess ),
5660 }
5761}
5862
59- // GetLBHealthCheckPortPath get load balance health check port and path
60- func (elbClient * ELBClient ) GetLBHealthCheckPortPath (lbName string ) (string , error ) {
63+ // GetLBHealthCheckPortPath get load balance health check port and path for Classic Load Balancer
64+ func (elbClient * ELBClient ) GetCLBHealthCheckPortPath (lbName string ) (string , error ) {
6165 input := & elb.DescribeLoadBalancersInput {
6266 LoadBalancerNames : []* string {
6367 aws .String (lbName ),
@@ -66,12 +70,12 @@ func (elbClient *ELBClient) GetLBHealthCheckPortPath(lbName string) (string, err
6670
6771 result , err := elbClient .svc .DescribeLoadBalancers (input )
6872 if err != nil {
69- e2e .Logf ("Failed to describe load balancer: %v" , err )
73+ e2e .Logf ("Failed to describe classic load balancer: %v" , err )
7074 return "" , err
7175 }
7276
7377 if len (result .LoadBalancerDescriptions ) == 0 {
74- e2e .Logf ("Failed to get load balancers: %v" , err )
78+ e2e .Logf ("Failed to get classic load balancers: %v" , err )
7579 }
7680
7781 healthCheck := result .LoadBalancerDescriptions [0 ].HealthCheck
@@ -80,3 +84,45 @@ func (elbClient *ELBClient) GetLBHealthCheckPortPath(lbName string) (string, err
8084 }
8185 return * healthCheck .Target , nil
8286}
87+
88+ // GetNLBHealthCheckPortPath get load balance health check port and path for Network/Application Load Balancer
89+ func (elbClient * ELBClient ) GetNLBHealthCheckPortPath (lbName string ) (string , error ) {
90+ // Describe the load balancer
91+ input := & elbv2.DescribeLoadBalancersInput {
92+ Names : []* string {aws .String (lbName )},
93+ }
94+ result , err := elbClient .svcV2 .DescribeLoadBalancers (input )
95+ if err != nil {
96+ e2e .Logf ("Failed to describe NLB: %v" , err )
97+ return "" , err
98+ }
99+
100+ if len (result .LoadBalancers ) == 0 {
101+ e2e .Logf ("No NLB found with name: %s" , lbName )
102+ return "" , nil
103+ }
104+
105+ // Get target groups for this load balancer
106+ tgInput := & elbv2.DescribeTargetGroupsInput {
107+ LoadBalancerArn : result .LoadBalancers [0 ].LoadBalancerArn ,
108+ }
109+ tgResult , err := elbClient .svcV2 .DescribeTargetGroups (tgInput )
110+ if err != nil {
111+ e2e .Logf ("Failed to describe target groups: %v" , err )
112+ return "" , err
113+ }
114+
115+ if len (tgResult .TargetGroups ) == 0 {
116+ e2e .Logf ("No target groups found for NLB: %s" , lbName )
117+ return "" , nil
118+ }
119+
120+ // Get health check configuration from the first target group
121+ tg := tgResult .TargetGroups [0 ]
122+ protocol := aws .StringValue (tg .HealthCheckProtocol )
123+ path := aws .StringValue (tg .HealthCheckPath )
124+ port := aws .StringValue (tg .HealthCheckPort )
125+
126+ // Format: "HTTP:10256/healthz"
127+ return fmt .Sprintf ("%s:%s%s" , protocol , port , path ), nil
128+ }
0 commit comments