Skip to content

Commit 2db02c8

Browse files
committed
wip: try restoring LB DNS check
1 parent 368ddc7 commit 2db02c8

5 files changed

Lines changed: 36 additions & 38 deletions

File tree

controllers/awscluster_controller.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package controllers
1919
import (
2020
"context"
2121
"fmt"
22+
"net"
2223
"time"
2324

2425
"github.com/pkg/errors"
@@ -303,6 +304,14 @@ func (r *AWSClusterReconciler) reconcileLoadBalancer(ctx context.Context, cluste
303304
return &retryAfterDuration, nil
304305
}
305306

307+
clusterScope.Debug("Looking up IP address for DNS", "dns", awsCluster.Status.Network.APIServerELB.DNSName)
308+
if _, err := net.LookupIP(awsCluster.Status.Network.APIServerELB.DNSName); err != nil {
309+
clusterScope.Error(err, "failed to get IP address for dns name", "dns", awsCluster.Status.Network.APIServerELB.DNSName)
310+
v1beta1conditions.MarkFalse(awsCluster, infrav1.LoadBalancerReadyCondition, infrav1.WaitForDNSNameResolveReason, clusterv1beta1.ConditionSeverityInfo, "")
311+
clusterScope.Info("Waiting on API server ELB DNS name to resolve")
312+
return &retryAfterDuration, nil
313+
}
314+
306315
v1beta1conditions.MarkTrue(awsCluster, infrav1.LoadBalancerReadyCondition)
307316

308317
awsCluster.Spec.ControlPlaneEndpoint = clusterv1beta1.APIEndpoint{

controllers/awscluster_controller_unit_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,31 @@ func TestAWSClusterReconcileOperations(t *testing.T) {
403403
g.Expect(err).To(BeNil())
404404
expectAWSClusterConditions(g, cs.AWSCluster, []conditionAssertion{{infrav1.LoadBalancerReadyCondition, corev1.ConditionFalse, clusterv1beta1.ConditionSeverityInfo, infrav1.WaitForDNSNameReason}})
405405
})
406+
t.Run("Should fail AWSCluster create with LoadBalancer reconcile failure with WaitForDNSNameResolve condition as false", func(t *testing.T) {
407+
g := NewWithT(t)
408+
awsCluster := getAWSCluster("test", "test")
409+
runningCluster := func() {
410+
networkSvc.EXPECT().ReconcileNetwork().Return(nil)
411+
sgSvc.EXPECT().ReconcileSecurityGroups().Return(nil)
412+
ec2Svc.EXPECT().ReconcileBastion().Return(nil)
413+
elbSvc.EXPECT().ReconcileLoadbalancers(gomock.Any()).Return(nil)
414+
}
415+
csClient := setup(t, &awsCluster)
416+
defer teardown()
417+
runningCluster()
418+
cs, err := scope.NewClusterScope(
419+
scope.ClusterScopeParams{
420+
Client: csClient,
421+
Cluster: &clusterv1.Cluster{},
422+
AWSCluster: &awsCluster,
423+
},
424+
)
425+
awsCluster.Status.Network.APIServerELB.DNSName = "test-apiserver.us-east-1.aws"
426+
g.Expect(err).To(BeNil())
427+
_, err = reconciler.reconcileNormal(context.TODO(), cs)
428+
g.Expect(err).To(BeNil())
429+
expectAWSClusterConditions(g, cs.AWSCluster, []conditionAssertion{{infrav1.LoadBalancerReadyCondition, corev1.ConditionFalse, clusterv1beta1.ConditionSeverityInfo, infrav1.WaitForDNSNameResolveReason}})
430+
})
406431
})
407432
})
408433
t.Run("Reconcile delete AWSCluster", func(t *testing.T) {

controllers/helpers_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,6 @@ func mockedCreateLBV2Calls(t *testing.T, m *mocks.MockELBV2APIMockRecorder) {
302302
LoadBalancerArn: lbArn,
303303
SecurityGroups: []string{"sg-apiserver-lb"},
304304
})).MaxTimes(1)
305-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), gomock.Eq(&elbv2.DescribeLoadBalancersInput{
306-
LoadBalancerArns: []string{aws.ToString(lbArn)},
307-
}), maxWaitActiveUpdateDelete).MaxTimes(1)
308305
}
309306

310307
func mockedDescribeTargetGroupsCall(t *testing.T, m *mocks.MockELBV2APIMockRecorder) {

pkg/cloud/services/elb/loadbalancer.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,6 @@ func (s *Service) getOrCreateV2LB(ctx context.Context, lbSpec *infrav1.AWSLoadBa
157157
}
158158

159159
func (s *Service) reconcileV2LB(ctx context.Context, lb *infrav1.LoadBalancer, desiredLB *infrav1.LoadBalancer, lbSpec *infrav1.AWSLoadBalancerSpec) error {
160-
wReq := &elbv2.DescribeLoadBalancersInput{
161-
LoadBalancerArns: []string{lb.ARN},
162-
}
163-
s.scope.Debug("Waiting for LB to become active", "api-server-lb-name", lb.Name)
164-
waitStart := time.Now()
165-
if err := s.ELBV2Client.WaitUntilLoadBalancerAvailable(ctx, wReq, s.scope.MaxWaitDuration()); err != nil {
166-
s.scope.Error(err, "failed to wait for LB to become available", "time", time.Since(waitStart))
167-
return err
168-
}
169-
s.scope.Debug("LB reports active state", "api-server-lb-name", lb.Name, "time", time.Since(waitStart))
170-
171160
// set up the type for later processing
172161
lb.LoadBalancerType = lbSpec.LoadBalancerType
173162
if lb.IsManaged(s.scope.Name()) {

pkg/cloud/services/elb/loadbalancer_test.go

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2361,9 +2361,6 @@ func TestReconcileV2LB(t *testing.T) {
23612361
},
23622362
nil,
23632363
)
2364-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), gomock.Eq(&elbv2.DescribeLoadBalancersInput{
2365-
LoadBalancerArns: []string{elbArn},
2366-
}), maxWaitActiveUpdateDelete).Return(nil)
23672364
},
23682365
check: func(t *testing.T, lb *infrav1.LoadBalancer, err error) {
23692366
t.Helper()
@@ -2575,10 +2572,6 @@ func TestReconcileV2LB(t *testing.T) {
25752572
m.SetSubnets(gomock.Any(), gomock.Eq(&elbv2.SetSubnetsInput{
25762573
LoadBalancerArn: aws.String(elbArn),
25772574
})).Return(&elbv2.SetSubnetsOutput{}, nil)
2578-
2579-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), gomock.Eq(&elbv2.DescribeLoadBalancersInput{
2580-
LoadBalancerArns: []string{elbArn},
2581-
}), maxWaitActiveUpdateDelete).Return(nil)
25822575
},
25832576
check: func(t *testing.T, lb *infrav1.LoadBalancer, err error) {
25842577
t.Helper()
@@ -2773,12 +2766,6 @@ func TestReconcileLoadbalancers(t *testing.T) {
27732766
},
27742767
nil,
27752768
)
2776-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), &elbv2.DescribeLoadBalancersInput{
2777-
LoadBalancerArns: []string{elbArn},
2778-
}, maxWaitActiveUpdateDelete).Return(nil)
2779-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), &elbv2.DescribeLoadBalancersInput{
2780-
LoadBalancerArns: []string{secondElbArn},
2781-
}, maxWaitActiveUpdateDelete).Return(nil)
27822769
},
27832770
check: func(t *testing.T, firstLB *infrav1.LoadBalancer, secondLB *infrav1.LoadBalancer, err error) {
27842771
t.Helper()
@@ -2815,7 +2802,7 @@ func TestReconcileLoadbalancers(t *testing.T) {
28152802
})).Return(&elbv2.DescribeLoadBalancersOutput{}, nil)
28162803

28172804
// Create both load balancers
2818-
createLB1 := m.CreateLoadBalancer(gomock.Any(), gomock.Eq(&elbv2.CreateLoadBalancerInput{
2805+
m.CreateLoadBalancer(gomock.Any(), gomock.Eq(&elbv2.CreateLoadBalancerInput{
28192806
Name: aws.String(elbName),
28202807
Scheme: SchemeToSDKScheme(infrav1.ELBSchemeInternetFacing),
28212808
SecurityGroups: []string{""},
@@ -2838,7 +2825,7 @@ func TestReconcileLoadbalancers(t *testing.T) {
28382825
LoadBalancers: []elbv2types.LoadBalancer{primaryELB()},
28392826
}, nil)
28402827

2841-
createLB2 := m.CreateLoadBalancer(gomock.Any(), gomock.Eq(&elbv2.CreateLoadBalancerInput{
2828+
m.CreateLoadBalancer(gomock.Any(), gomock.Eq(&elbv2.CreateLoadBalancerInput{
28422829
Name: aws.String(secondElbName),
28432830
Scheme: SchemeToSDKScheme(infrav1.ELBSchemeInternal),
28442831
SecurityGroups: []string{""},
@@ -2861,15 +2848,6 @@ func TestReconcileLoadbalancers(t *testing.T) {
28612848
LoadBalancers: []elbv2types.LoadBalancer{secondaryELB()},
28622849
}, nil)
28632850

2864-
// Assert that we don't wait for either load balancer to be
2865-
// available until both load balancers have been created
2866-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), gomock.Eq(&elbv2.DescribeLoadBalancersInput{
2867-
LoadBalancerArns: []string{elbArn},
2868-
}), maxWaitActiveUpdateDelete).Return(nil).After(createLB1).After(createLB2)
2869-
m.WaitUntilLoadBalancerAvailable(gomock.Any(), gomock.Eq(&elbv2.DescribeLoadBalancersInput{
2870-
LoadBalancerArns: []string{secondElbArn},
2871-
}), maxWaitActiveUpdateDelete).Return(nil).After(createLB1).After(createLB2)
2872-
28732851
// Make minimal assertions on other calls not under test
28742852
m.DescribeTargetGroups(gomock.Any(), gomock.Any()).Return(&elbv2.DescribeTargetGroupsOutput{}, nil).AnyTimes()
28752853
m.DescribeListeners(gomock.Any(), gomock.Any()).Return(&elbv2.DescribeListenersOutput{}, nil).AnyTimes()

0 commit comments

Comments
 (0)