@@ -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"
@@ -51,6 +52,11 @@ const (
5152 EKSControlPlaneOnlyLegacyFlavor = "eks-control-plane-only-legacy"
5253)
5354
55+ const (
56+ clientRequestTimeout = 2 * time .Minute
57+ clientRequestCheckInterval = 5 * time .Second
58+ )
59+
5460type DefaultConfigClusterFn func (clusterName , namespace string ) clusterctl.ConfigClusterInput
5561
5662func getEKSClusterName (namespace , clusterName string ) string {
@@ -74,14 +80,19 @@ func getASGName(clusterName string) string {
7480}
7581
7682func verifyClusterActiveAndOwned (eksClusterName string , sess client.ConfigProvider ) {
77- cluster , err := getEKSCluster (eksClusterName , sess )
78- Expect (err ).NotTo (HaveOccurred ())
83+ var (
84+ cluster * eks.Cluster
85+ err error
86+ )
87+ Eventually (func () error {
88+ cluster , err = getEKSCluster (eksClusterName , sess )
89+ return err
90+ }, clientRequestTimeout , clientRequestCheckInterval ).Should (Succeed (), fmt .Sprintf ("eventually failed trying to get EKS Cluster %q" , eksClusterName ))
7991
8092 tagName := infrav1 .ClusterTagKey (eksClusterName )
8193 tagValue , ok := cluster .Tags [tagName ]
8294 Expect (ok ).To (BeTrue (), "expecting the cluster owned tag to exist" )
8395 Expect (* tagValue ).To (BeEquivalentTo (string (infrav1 .ResourceLifecycleOwned )))
84-
8596 Expect (* cluster .Status ).To (BeEquivalentTo (eks .ClusterStatusActive ))
8697}
8798
@@ -102,6 +113,7 @@ func getEKSClusterAddon(eksClusterName, addonName string, sess client.ConfigProv
102113 AddonName : & addonName ,
103114 ClusterName : & eksClusterName ,
104115 }
116+
105117 describeOutput , err := eksClient .DescribeAddon (describeInput )
106118 if err != nil {
107119 return nil , fmt .Errorf ("describing eks addon %s: %w" , addonName , err )
@@ -112,16 +124,16 @@ func getEKSClusterAddon(eksClusterName, addonName string, sess client.ConfigProv
112124
113125func verifySecretExists (ctx context.Context , secretName , namespace string , k8sclient crclient.Client ) {
114126 secret := & corev1.Secret {}
115- err := k8sclient . Get ( ctx , apimachinerytypes. NamespacedName { Name : secretName , Namespace : namespace }, secret )
116-
117- Expect ( err ). ShouldNot ( HaveOccurred ( ))
127+ Eventually ( func () error {
128+ return k8sclient . Get ( ctx , apimachinerytypes. NamespacedName { Name : secretName , Namespace : namespace }, secret )
129+ }, clientRequestTimeout , clientRequestCheckInterval ). Should ( Succeed (), fmt . Sprintf ( "eventually failed trying to verify Secret %q exists" , secretName ))
118130}
119131
120132func verifyConfigMapExists (ctx context.Context , name , namespace string , k8sclient crclient.Client ) {
121133 cm := & corev1.ConfigMap {}
122134 Eventually (func () error {
123135 return k8sclient .Get (ctx , apimachinerytypes.NamespacedName {Name : name , Namespace : namespace }, cm )
124- }, 2 * time . Minute , 5 * time . Second ).Should (Succeed ())
136+ }, clientRequestTimeout , clientRequestCheckInterval ).Should (Succeed (), fmt . Sprintf ( "eventually failed trying to verify ConfigMap %q exists" , name ))
125137}
126138
127139func VerifyRoleExistsAndOwned (roleName string , eksClusterName string , checkOwned bool , sess client.ConfigProvider ) {
@@ -130,8 +142,15 @@ func VerifyRoleExistsAndOwned(roleName string, eksClusterName string, checkOwned
130142 RoleName : aws .String (roleName ),
131143 }
132144
133- output , err := iamClient .GetRole (input )
134- Expect (err ).ShouldNot (HaveOccurred ())
145+ var (
146+ output * iam.GetRoleOutput
147+ err error
148+ )
149+
150+ Eventually (func () error {
151+ output , err = iamClient .GetRole (input )
152+ return err
153+ }, clientRequestTimeout , clientRequestCheckInterval ).Should (Succeed (), fmt .Sprintf ("eventually failed trying to get IAM Role %q" , roleName ))
135154
136155 if checkOwned {
137156 found := false
@@ -152,9 +171,24 @@ func verifyManagedNodeGroup(eksClusterName, nodeGroupName string, checkOwned boo
152171 ClusterName : aws .String (eksClusterName ),
153172 NodegroupName : aws .String (nodeGroupName ),
154173 }
155- result , err := eksClient .DescribeNodegroup (input )
156- Expect (err ).NotTo (HaveOccurred ())
157- Expect (* result .Nodegroup .Status ).To (BeEquivalentTo (eks .NodegroupStatusActive ))
174+ var (
175+ result * eks.DescribeNodegroupOutput
176+ err error
177+ )
178+
179+ Eventually (func () error {
180+ result , err = eksClient .DescribeNodegroup (input )
181+ if err != nil {
182+ return fmt .Errorf ("error describing nodegroup: %w" , err )
183+ }
184+
185+ nodeGroupStatus := ptr .Deref (result .Nodegroup .Status , "" )
186+ if nodeGroupStatus != eks .NodegroupStatusActive {
187+ return fmt .Errorf ("expected nodegroup.Status to be %q, was %q instead" , eks .NodegroupStatusActive , nodeGroupStatus )
188+ }
189+
190+ return nil
191+ }, clientRequestTimeout , clientRequestCheckInterval ).Should (Succeed (), "eventually failed trying to describe EKS Node group" )
158192
159193 if checkOwned {
160194 tagName := infrav1 .ClusterAWSCloudProviderTagKey (eksClusterName )
@@ -172,8 +206,16 @@ func verifyASG(eksClusterName, asgName string, checkOwned bool, sess client.Conf
172206 },
173207 }
174208
175- result , err := asgClient .DescribeAutoScalingGroups (input )
176- Expect (err ).NotTo (HaveOccurred ())
209+ var (
210+ result * autoscaling.DescribeAutoScalingGroupsOutput
211+ err error
212+ )
213+
214+ Eventually (func () error {
215+ result , err = asgClient .DescribeAutoScalingGroups (input )
216+ return err
217+ }, clientRequestTimeout , clientRequestCheckInterval ).Should (Succeed ())
218+
177219 for _ , instance := range result .AutoScalingGroups [0 ].Instances {
178220 Expect (* instance .LifecycleState ).To (Equal ("InService" ), "expecting the instance in service" )
179221 }
0 commit comments