async function getDriftStatus()

in src/detect-drift.lambda.ts [83:108]


async function getDriftStatus(stack: Stack, detectionId: string): Promise<StackDriftStatus | undefined> {
  const stackName = stack.StackName;
  console.log(`Waiting for drift detection ${detectionId} to complete for stack ${stackName}`);
  const maxTries = 60;
  let tries = 0;
  let driftDetectionStatus: StackDriftDetectionStatus;
  let stackDriftStatus: StackDriftStatus | undefined;
  do {
    await sleep(1000);
    const response = await cloudformation.describeStackDriftDetectionStatus({
      StackDriftDetectionId: detectionId,
    }).promise();
    driftDetectionStatus = response.DetectionStatus;
    if (driftDetectionStatus === 'DETECTION_FAILED') {
      throw new Error(`Detection failed: ${response.DetectionStatusReason}`);
    }
    stackDriftStatus = response.StackDriftStatus;
    tries++;
  } while (shouldWaitForDriftDetectionToFinish(driftDetectionStatus) && tries < maxTries);
  if (tries === maxTries) {
    throw new Error(`Reached max tries for stack ${stackName}`);
  }

  console.log(`stackName: ${stackName}, driftDetectionStatus: ${driftDetectionStatus}, stackDriftStatus: ${stackDriftStatus}`);
  return stackDriftStatus;
}