@@ -32,6 +32,7 @@ import (
3232 . "github.com/onsi/gomega"
3333 corev1 "k8s.io/api/core/v1"
3434 apimachinerytypes "k8s.io/apimachinery/pkg/types"
35+ "k8s.io/utils/ptr"
3536 crclient "sigs.k8s.io/controller-runtime/pkg/client"
3637
3738 infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
@@ -74,14 +75,19 @@ func getASGName(clusterName string) string {
7475}
7576
7677func verifyClusterActiveAndOwned (eksClusterName string , sess client.ConfigProvider ) {
77- cluster , err := getEKSCluster (eksClusterName , sess )
78- Expect (err ).NotTo (HaveOccurred ())
78+ var (
79+ cluster * eks.Cluster
80+ err error
81+ )
82+ Eventually (func () error {
83+ cluster , err = getEKSCluster (eksClusterName , sess )
84+ return err
85+ }, 2 * time .Minute , 5 * time .Second ).Should (Succeed (), fmt .Sprintf ("eventually failed trying to get EKS Cluster %q" , eksClusterName ))
7986
8087 tagName := infrav1 .ClusterTagKey (eksClusterName )
8188 tagValue , ok := cluster .Tags [tagName ]
8289 Expect (ok ).To (BeTrue (), "expecting the cluster owned tag to exist" )
8390 Expect (* tagValue ).To (BeEquivalentTo (string (infrav1 .ResourceLifecycleOwned )))
84-
8591 Expect (* cluster .Status ).To (BeEquivalentTo (eks .ClusterStatusActive ))
8692}
8793
@@ -102,6 +108,7 @@ func getEKSClusterAddon(eksClusterName, addonName string, sess client.ConfigProv
102108 AddonName : & addonName ,
103109 ClusterName : & eksClusterName ,
104110 }
111+
105112 describeOutput , err := eksClient .DescribeAddon (describeInput )
106113 if err != nil {
107114 return nil , fmt .Errorf ("describing eks addon %s: %w" , addonName , err )
@@ -112,16 +119,16 @@ func getEKSClusterAddon(eksClusterName, addonName string, sess client.ConfigProv
112119
113120func verifySecretExists (ctx context.Context , secretName , namespace string , k8sclient crclient.Client ) {
114121 secret := & corev1.Secret {}
115- err := k8sclient . Get ( ctx , apimachinerytypes. NamespacedName { Name : secretName , Namespace : namespace }, secret )
116-
117- Expect ( err ). ShouldNot ( HaveOccurred ( ))
122+ Eventually ( func () error {
123+ return k8sclient . Get ( ctx , apimachinerytypes. NamespacedName { Name : secretName , Namespace : namespace }, secret )
124+ }, 2 * time . Minute , 5 * time . Second ). Should ( Succeed (), fmt . Sprintf ( "eventually failed trying to verify Secret %q exists" , secretName ))
118125}
119126
120127func verifyConfigMapExists (ctx context.Context , name , namespace string , k8sclient crclient.Client ) {
121128 cm := & corev1.ConfigMap {}
122129 Eventually (func () error {
123130 return k8sclient .Get (ctx , apimachinerytypes.NamespacedName {Name : name , Namespace : namespace }, cm )
124- }, 2 * time .Minute , 5 * time .Second ).Should (Succeed ())
131+ }, 2 * time .Minute , 5 * time .Second ).Should (Succeed (), fmt . Sprintf ( "eventually failed trying to verify ConfigMap %q exists" , name ) )
125132}
126133
127134func VerifyRoleExistsAndOwned (roleName string , eksClusterName string , checkOwned bool , sess client.ConfigProvider ) {
@@ -130,8 +137,15 @@ func VerifyRoleExistsAndOwned(roleName string, eksClusterName string, checkOwned
130137 RoleName : aws .String (roleName ),
131138 }
132139
133- output , err := iamClient .GetRole (input )
134- Expect (err ).ShouldNot (HaveOccurred ())
140+ var (
141+ output * iam.GetRoleOutput
142+ err error
143+ )
144+
145+ Eventually (func () error {
146+ output , err = iamClient .GetRole (input )
147+ return err
148+ }, 2 * time .Minute , 5 * time .Second ).Should (Succeed (), fmt .Sprintf ("eventually failed trying to get IAM Role %q" , roleName ))
135149
136150 if checkOwned {
137151 found := false
@@ -152,9 +166,24 @@ func verifyManagedNodeGroup(eksClusterName, nodeGroupName string, checkOwned boo
152166 ClusterName : aws .String (eksClusterName ),
153167 NodegroupName : aws .String (nodeGroupName ),
154168 }
155- result , err := eksClient .DescribeNodegroup (input )
156- Expect (err ).NotTo (HaveOccurred ())
157- Expect (* result .Nodegroup .Status ).To (BeEquivalentTo (eks .NodegroupStatusActive ))
169+ var (
170+ result * eks.DescribeNodegroupOutput
171+ err error
172+ )
173+
174+ Eventually (func () error {
175+ result , err = eksClient .DescribeNodegroup (input )
176+ if err != nil {
177+ return fmt .Errorf ("error describing nodegroup: %w" , err )
178+ }
179+
180+ nodeGroupStatus := ptr .Deref (result .Nodegroup .Status , "" )
181+ if nodeGroupStatus != eks .NodegroupStatusActive {
182+ return fmt .Errorf ("expected nodegroup.Status to be %q, was %q instead" , eks .NodegroupStatusActive , nodeGroupStatus )
183+ }
184+
185+ return nil
186+ }, 2 * time .Minute , 5 * time .Second ).Should (Succeed (), "eventually failed trying to describe EKS Node group" )
158187
159188 if checkOwned {
160189 tagName := infrav1 .ClusterAWSCloudProviderTagKey (eksClusterName )
@@ -172,8 +201,16 @@ func verifyASG(eksClusterName, asgName string, checkOwned bool, sess client.Conf
172201 },
173202 }
174203
175- result , err := asgClient .DescribeAutoScalingGroups (input )
176- Expect (err ).NotTo (HaveOccurred ())
204+ var (
205+ result * autoscaling.DescribeAutoScalingGroupsOutput
206+ err error
207+ )
208+
209+ Eventually (func () error {
210+ result , err = asgClient .DescribeAutoScalingGroups (input )
211+ return err
212+ }, 2 * time .Minute , 5 * time .Second ).Should (Succeed ())
213+
177214 for _ , instance := range result .AutoScalingGroups [0 ].Instances {
178215 Expect (* instance .LifecycleState ).To (Equal ("InService" ), "expecting the instance in service" )
179216 }
0 commit comments