@@ -32,6 +32,7 @@ import (
32
32
. "github.com/onsi/gomega"
33
33
corev1 "k8s.io/api/core/v1"
34
34
apimachinerytypes "k8s.io/apimachinery/pkg/types"
35
+ "k8s.io/utils/ptr"
35
36
crclient "sigs.k8s.io/controller-runtime/pkg/client"
36
37
37
38
infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
@@ -51,6 +52,11 @@ const (
51
52
EKSControlPlaneOnlyLegacyFlavor = "eks-control-plane-only-legacy"
52
53
)
53
54
55
+ const (
56
+ clientRequestTimeout = 2 * time .Minute
57
+ clientRequestCheckInterval = 5 * time .Second
58
+ )
59
+
54
60
type DefaultConfigClusterFn func (clusterName , namespace string ) clusterctl.ConfigClusterInput
55
61
56
62
func getEKSClusterName (namespace , clusterName string ) string {
@@ -74,14 +80,19 @@ func getASGName(clusterName string) string {
74
80
}
75
81
76
82
func 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 ))
79
91
80
92
tagName := infrav1 .ClusterTagKey (eksClusterName )
81
93
tagValue , ok := cluster .Tags [tagName ]
82
94
Expect (ok ).To (BeTrue (), "expecting the cluster owned tag to exist" )
83
95
Expect (* tagValue ).To (BeEquivalentTo (string (infrav1 .ResourceLifecycleOwned )))
84
-
85
96
Expect (* cluster .Status ).To (BeEquivalentTo (eks .ClusterStatusActive ))
86
97
}
87
98
@@ -102,6 +113,7 @@ func getEKSClusterAddon(eksClusterName, addonName string, sess client.ConfigProv
102
113
AddonName : & addonName ,
103
114
ClusterName : & eksClusterName ,
104
115
}
116
+
105
117
describeOutput , err := eksClient .DescribeAddon (describeInput )
106
118
if err != nil {
107
119
return nil , fmt .Errorf ("describing eks addon %s: %w" , addonName , err )
@@ -112,16 +124,16 @@ func getEKSClusterAddon(eksClusterName, addonName string, sess client.ConfigProv
112
124
113
125
func verifySecretExists (ctx context.Context , secretName , namespace string , k8sclient crclient.Client ) {
114
126
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 ))
118
130
}
119
131
120
132
func verifyConfigMapExists (ctx context.Context , name , namespace string , k8sclient crclient.Client ) {
121
133
cm := & corev1.ConfigMap {}
122
134
Eventually (func () error {
123
135
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 ))
125
137
}
126
138
127
139
func VerifyRoleExistsAndOwned (roleName string , eksClusterName string , checkOwned bool , sess client.ConfigProvider ) {
@@ -130,8 +142,15 @@ func VerifyRoleExistsAndOwned(roleName string, eksClusterName string, checkOwned
130
142
RoleName : aws .String (roleName ),
131
143
}
132
144
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 ))
135
154
136
155
if checkOwned {
137
156
found := false
@@ -152,9 +171,24 @@ func verifyManagedNodeGroup(eksClusterName, nodeGroupName string, checkOwned boo
152
171
ClusterName : aws .String (eksClusterName ),
153
172
NodegroupName : aws .String (nodeGroupName ),
154
173
}
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" )
158
192
159
193
if checkOwned {
160
194
tagName := infrav1 .ClusterAWSCloudProviderTagKey (eksClusterName )
@@ -172,8 +206,16 @@ func verifyASG(eksClusterName, asgName string, checkOwned bool, sess client.Conf
172
206
},
173
207
}
174
208
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
+
177
219
for _ , instance := range result .AutoScalingGroups [0 ].Instances {
178
220
Expect (* instance .LifecycleState ).To (Equal ("InService" ), "expecting the instance in service" )
179
221
}
0 commit comments