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 2774eb852..0221b39fe 100644 --- a/reference-artifacts/Custom-Scripts/lza-upgrade/src/resource-mapping.ts +++ b/reference-artifacts/Custom-Scripts/lza-upgrade/src/resource-mapping.ts @@ -225,7 +225,7 @@ export class ResourceMapping { }; } async getEnvironmentStacks(environments: Environment[], cfnClientMap: Map) { - const stackMap = new Map(); + const stackMap = new Map(); const stackListPromises = environments.map((environment) => { const cfnClient = cfnClientMap.get(`${environment.accountId}-${environment.region}`); if (!cfnClient) { @@ -244,7 +244,7 @@ export class ResourceMapping { async getEnvironmentMetaData( environments: Environment[], - stackMap: Map, + stackMap: Map, cfnClientMap: Map, ) { const stackAndResourceMap = new Map(); @@ -262,7 +262,7 @@ export class ResourceMapping { if (!stack?.stack || !stack.cfnClient) { return undefined; } - return this.getStackMetadata(stack.environment, stack.stack, stack.cfnClient.cfn, stack.cfnClient.cfnNative); + return this.getStackMetadata(stack.environment, stack.stack.stackName, stack.cfnClient.cfn, stack.cfnClient.cfnNative, stack.stack.parentStack); }); const validStackAndResourcePromises = stackAndResourcesMapPromises.filter( (stackAndResource): stackAndResource is Promise => stackAndResource !== undefined, @@ -309,7 +309,7 @@ export class ResourceMapping { (nestedStackAndResource) => stackAndResource.environment.accountId === nestedStackAndResource.environment.accountId && stackAndResource.environment.region === nestedStackAndResource.environment.region && - nestedStackAndResource.stackName.includes(stackAndResource.stackName), + nestedStackAndResource.parentStack?.includes(stackAndResource.stackName), ); if (matchedStacks.length === 0) { return; @@ -461,6 +461,7 @@ export class ResourceMapping { stack: string, cloudformation: CloudFormation, cfnNative: aws.CloudFormation, + parentStack?: string ): Promise { const stackResources = await this.describeCloudFormationStack(cloudformation, stack); const cfTemplate = await cfnNative @@ -496,6 +497,7 @@ export class ResourceMapping { numberOfResourcesInTemplate: cfTemplateResourceCount, resourceMap: stackResources, template: cfTemplateObject, + parentStack }; } @@ -664,7 +666,7 @@ export class ResourceMapping { } async getStackList(cloudformation: CloudFormation, environment: Environment) { - const stacks: string[] = []; + const stacks: {stackName: string, parentStack: string | undefined}[] = []; let nextToken: string | undefined; do { const response = await cloudformation @@ -680,8 +682,8 @@ export class ResourceMapping { }) .promise(); for (const stackSummary of response.StackSummaries || []) { - if (stackSummary.StackName.includes('Phase')|| stackSummary.ParentId?.includes("Phase")) { - stacks.push(stackSummary.StackName); + if (stackSummary.StackName.includes('Phase') || stackSummary.ParentId?.includes("Phase")) { + stacks.push({stackName: stackSummary.StackName, parentStack: stackSummary.ParentId}); } } nextToken = response.NextToken;