Skip to content

Commit 6c56bd8

Browse files
Elad Ben-Israelkarupanerura
Elad Ben-Israel
authored andcommitted
fix(eks): "vendor response doesn't contain attribute" when updating version (aws#7830)
Cluster version updates fail with `vendor response doesn't contain <ATTRIBUTE>` errors due to the fact that since aws#7526 the provider does not respond to `isComplete` with the `Data` field with resource attributes. The fix is that once the update is complete, we simply delegate to `isActive` which queries the cluster and returns the attributes. Fixes aws#7794
1 parent 09548e4 commit 6c56bd8

File tree

4 files changed

+45
-28
lines changed

4 files changed

+45
-28
lines changed

packages/@aws-cdk/aws-eks/lib/cluster-resource-handler/cluster.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,14 @@ export class ClusterResourceHandler extends ResourceHandler {
149149

150150
// if this is an EKS update, we will monitor the update event itself
151151
if (this.event.EksUpdateId) {
152-
return this.isEksUpdateComplete(this.event.EksUpdateId);
152+
const complete = await this.isEksUpdateComplete(this.event.EksUpdateId);
153+
if (!complete) {
154+
return { IsComplete: false };
155+
}
156+
157+
// fall through: if the update is done, we simply delegate to isActive()
158+
// in order to extract attributes and state from the cluster itself, which
159+
// is supposed to be in an ACTIVE state after the update is complete.
153160
}
154161

155162
return this.isActive();
@@ -212,9 +219,9 @@ export class ClusterResourceHandler extends ResourceHandler {
212219

213220
switch (describeUpdateResponse.update.status) {
214221
case 'InProgress':
215-
return { IsComplete: false };
222+
return false;
216223
case 'Successful':
217-
return { IsComplete: true };
224+
return true;
218225
case 'Failed':
219226
case 'Cancelled':
220227
throw new Error(`cluster update id "${eksUpdateId}" failed with errors: ${JSON.stringify(describeUpdateResponse.update.errors)}`);

packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json

+24-23
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,7 @@
851851
"Arn"
852852
]
853853
},
854+
"version": "1.16",
854855
"resourcesVpcConfig": {
855856
"securityGroupIds": [
856857
{
@@ -1322,7 +1323,7 @@
13221323
"Type": "AWS::AutoScaling::LaunchConfiguration",
13231324
"Properties": {
13241325
"ImageId": {
1325-
"Ref": "SsmParameterValueawsserviceeksoptimizedami114amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter"
1326+
"Ref": "SsmParameterValueawsserviceeksoptimizedami116amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter"
13261327
},
13271328
"InstanceType": "t2.medium",
13281329
"IamInstanceProfile": {
@@ -1912,7 +1913,7 @@
19121913
"Type": "AWS::AutoScaling::LaunchConfiguration",
19131914
"Properties": {
19141915
"ImageId": {
1915-
"Ref": "SsmParameterValueawsserviceeksoptimizedami114amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter"
1916+
"Ref": "SsmParameterValueawsserviceeksoptimizedami116amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter"
19161917
},
19171918
"InstanceType": "t3.large",
19181919
"IamInstanceProfile": {
@@ -2223,7 +2224,7 @@
22232224
},
22242225
"/",
22252226
{
2226-
"Ref": "AssetParametersfa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103S3Bucket4281E0A4"
2227+
"Ref": "AssetParameters222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2S3BucketC839B0E2"
22272228
},
22282229
"/",
22292230
{
@@ -2233,7 +2234,7 @@
22332234
"Fn::Split": [
22342235
"||",
22352236
{
2236-
"Ref": "AssetParametersfa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103S3VersionKey3B54BD32"
2237+
"Ref": "AssetParameters222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2S3VersionKeyEEF27FE8"
22372238
}
22382239
]
22392240
}
@@ -2246,7 +2247,7 @@
22462247
"Fn::Split": [
22472248
"||",
22482249
{
2249-
"Ref": "AssetParametersfa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103S3VersionKey3B54BD32"
2250+
"Ref": "AssetParameters222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2S3VersionKeyEEF27FE8"
22502251
}
22512252
]
22522253
}
@@ -2256,11 +2257,11 @@
22562257
]
22572258
},
22582259
"Parameters": {
2259-
"referencetoawscdkeksclustertestAssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602S3Bucket38D74D5ERef": {
2260-
"Ref": "AssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602S3BucketD006BE3B"
2260+
"referencetoawscdkeksclustertestAssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5S3Bucket278A73D2Ref": {
2261+
"Ref": "AssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5S3Bucket91F3EC34"
22612262
},
2262-
"referencetoawscdkeksclustertestAssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602S3VersionKey189EBCBARef": {
2263-
"Ref": "AssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602S3VersionKeyEC71339F"
2263+
"referencetoawscdkeksclustertestAssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5S3VersionKeyD7A198A8Ref": {
2264+
"Ref": "AssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5S3VersionKey29EF2E8E"
22642265
},
22652266
"referencetoawscdkeksclustertestAssetParameters5e49cf64d8027f48872790f80cdb76c5b836ecf9a70b71be1eb937a5c25a47c1S3BucketC7CBF350Ref": {
22662267
"Ref": "AssetParameters5e49cf64d8027f48872790f80cdb76c5b836ecf9a70b71be1eb937a5c25a47c1S3Bucket663A709C"
@@ -2405,17 +2406,17 @@
24052406
}
24062407
},
24072408
"Parameters": {
2408-
"AssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602S3BucketD006BE3B": {
2409+
"AssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5S3Bucket91F3EC34": {
24092410
"Type": "String",
2410-
"Description": "S3 bucket for asset \"c0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602\""
2411+
"Description": "S3 bucket for asset \"80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5\""
24112412
},
2412-
"AssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602S3VersionKeyEC71339F": {
2413+
"AssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5S3VersionKey29EF2E8E": {
24132414
"Type": "String",
2414-
"Description": "S3 key for asset version \"c0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602\""
2415+
"Description": "S3 key for asset version \"80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5\""
24152416
},
2416-
"AssetParametersc0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602ArtifactHash35F5D0CC": {
2417+
"AssetParameters80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5ArtifactHash2145581C": {
24172418
"Type": "String",
2418-
"Description": "Artifact hash for asset \"c0e453b77d5ccf090915fba7c771380f8370da5cbcc3c7ed757c98addd75b602\""
2419+
"Description": "Artifact hash for asset \"80599c1e26718262302e982159fe61aff7a2bdd392db341e7e99cbfbf84a0be5\""
24192420
},
24202421
"AssetParameters5e49cf64d8027f48872790f80cdb76c5b836ecf9a70b71be1eb937a5c25a47c1S3Bucket663A709C": {
24212422
"Type": "String",
@@ -2441,17 +2442,17 @@
24412442
"Type": "String",
24422443
"Description": "Artifact hash for asset \"a6d508eaaa0d3cddbb47a84123fc878809c8431c5466f360912f70b5b9770afb\""
24432444
},
2444-
"AssetParametersfa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103S3Bucket4281E0A4": {
2445+
"AssetParameters222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2S3BucketC839B0E2": {
24452446
"Type": "String",
2446-
"Description": "S3 bucket for asset \"fa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103\""
2447+
"Description": "S3 bucket for asset \"222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2\""
24472448
},
2448-
"AssetParametersfa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103S3VersionKey3B54BD32": {
2449+
"AssetParameters222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2S3VersionKeyEEF27FE8": {
24492450
"Type": "String",
2450-
"Description": "S3 key for asset version \"fa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103\""
2451+
"Description": "S3 key for asset version \"222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2\""
24512452
},
2452-
"AssetParametersfa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103ArtifactHash733CC5DF": {
2453+
"AssetParameters222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2ArtifactHashAF96C5C2": {
24532454
"Type": "String",
2454-
"Description": "Artifact hash for asset \"fa73027e9f72f21daca2d67aa5a23e88f87d90536a7e3c36de9adbfb27fa9103\""
2455+
"Description": "Artifact hash for asset \"222a8e375c233b55d0c3e20bc9ac98ffc8e51132f82b0f12f3cd1b7b22c562c2\""
24552456
},
24562457
"AssetParameters36525a61abfaf5764fad460fd03c24215fd00da60805807d6138c51be4d03dbcS3Bucket2D824DEF": {
24572458
"Type": "String",
@@ -2465,9 +2466,9 @@
24652466
"Type": "String",
24662467
"Description": "Artifact hash for asset \"36525a61abfaf5764fad460fd03c24215fd00da60805807d6138c51be4d03dbc\""
24672468
},
2468-
"SsmParameterValueawsserviceeksoptimizedami114amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": {
2469+
"SsmParameterValueawsserviceeksoptimizedami116amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": {
24692470
"Type": "AWS::SSM::Parameter::Value<String>",
2470-
"Default": "/aws/service/eks/optimized-ami/1.14/amazon-linux-2/recommended/image_id"
2471+
"Default": "/aws/service/eks/optimized-ami/1.16/amazon-linux-2/recommended/image_id"
24712472
},
24722473
"SsmParameterValueawsservicebottlerocketawsk8s115x8664latestimageidC96584B6F00A464EAD1953AFF4B05118Parameter": {
24732474
"Type": "AWS::SSM::Parameter::Value<String>",

packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class EksClusterStack extends TestStack {
1818
const cluster = new eks.Cluster(this, 'Cluster', {
1919
mastersRole,
2020
defaultCapacity: 2,
21+
version: '1.16',
2122
});
2223

2324
// // fargate profile for resources in the "default" namespace

packages/@aws-cdk/aws-eks/test/test.cluster-resource-provider.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ export = {
401401
test.done();
402402
},
403403

404-
async 'with "Successful" status, returns IsComplete=true'(test: Test) {
404+
async 'with "Successful" status, returns IsComplete=true with "Data"'(test: Test) {
405405
const event = mocks.newRequest('Update');
406406
const isCompleteHandler = new ClusterResourceHandler(mocks.client, {
407407
...event,
@@ -413,7 +413,15 @@ export = {
413413
const response = await isCompleteHandler.isComplete();
414414

415415
test.deepEqual(mocks.actualRequest.describeUpdateRequest, { name: 'physical-resource-id', updateId: 'foobar' });
416-
test.equal(response.IsComplete, true);
416+
test.deepEqual(response, {
417+
IsComplete: true,
418+
Data: {
419+
Name: 'physical-resource-id',
420+
Endpoint: 'http://endpoint',
421+
Arn: 'arn:cluster-arn',
422+
CertificateAuthorityData: 'certificateAuthority-data',
423+
},
424+
});
417425
test.done();
418426
},
419427

0 commit comments

Comments
 (0)