diff --git a/reference-artifacts/Custom-Scripts/lza-upgrade/src/config/global-config.ts b/reference-artifacts/Custom-Scripts/lza-upgrade/src/config/global-config.ts index 7eb9dc900..3be9cb078 100644 --- a/reference-artifacts/Custom-Scripts/lza-upgrade/src/config/global-config.ts +++ b/reference-artifacts/Custom-Scripts/lza-upgrade/src/config/global-config.ts @@ -2237,6 +2237,7 @@ export class GlobalConfig implements t.TypeOf physicalId.includes(`:stack/${stack.stackName}/`)); + if (nestedStack > -1) { + aseaStacks[nestedStack].nestedStack = true; + } + } } return aseaStacks; } diff --git a/reference-artifacts/Custom-Scripts/lza-upgrade/src/resource-mapping.ts b/reference-artifacts/Custom-Scripts/lza-upgrade/src/resource-mapping.ts index 6d9b13188..42c4768cc 100644 --- a/reference-artifacts/Custom-Scripts/lza-upgrade/src/resource-mapping.ts +++ b/reference-artifacts/Custom-Scripts/lza-upgrade/src/resource-mapping.ts @@ -268,19 +268,26 @@ export class ResourceMapping { (stackAndResource): stackAndResource is Promise => stackAndResource !== undefined, ); const stackAndResourcesList = await Promise.all(validStackAndResourcePromises); + + const allNestedStacksPhysicalIds: string[] = stackAndResourcesList.flatMap((stack) => + stack.resourceMap + .filter((resource) => resource.resourceType == 'AWS::CloudFormation::Stack') + .map((resource) => resource.physicalResourceId), + ); + const allNestedStacks = stackAndResourcesList.filter((stackAndResource) => - stackAndResource.stackName.includes('NestedStack'), + allNestedStacksPhysicalIds.find((physicalId) => physicalId.includes(`:stack/${stackAndResource.stackName}/`)), ); + + const allNestedStackNames = allNestedStacks.map((stackAndResource) => stackAndResource.stackName); + stackAndResourcesList.forEach((stackAndResource) => { const nestedStacks = this.getNestedStacks(stackAndResource, allNestedStacks); if (nestedStacks) { stackAndResource.nestedStacks = nestedStacks; } - const parentStack = this.getParentStack(stackAndResource); - if (parentStack) { - stackAndResource.parentStack = parentStack; - } - if (!stackAndResource.stackName.includes('NestedStack')) { + + if (!allNestedStackNames.includes(stackAndResource.stackName)) { stackAndResourceMap.set( `${stackAndResource.environment.accountId}-${stackAndResource.environment.region}-${stackAndResource.stackName}`, stackAndResource, @@ -291,14 +298,6 @@ export class ResourceMapping { return stackAndResourceMap; } - getParentStack(stackAndResource: StacksAndResourceMap) { - if (stackAndResource.stackName.includes('NestedStack')) { - const stackNameArr = stackAndResource.stackName.split('-'); - return `${stackAndResource.environment.accountId}|${stackAndResource.environment.region}|${stackNameArr[0]}-${stackNameArr[1]}-${stackNameArr[2]}`; - } - return undefined; - } - getNestedStacks(stackAndResource: StacksAndResourceMap, nestedStacks: StacksAndResourceMap[]) { const phaseIndex = stackAndResource.stackName.toLowerCase().indexOf('phase'); // checks the length of the stack to determine if it is the nested stack or parent stack