/// <summary> /// Deletes given CloudFormation stack /// </summary> /// <param name="stackName">The stack name to be deleted</param> /// <exception cref="FailedToDeleteException">Thrown when deletion fails</exception> public async Task ExecuteAsync(string stackName) { var canDelete = await CanDeleteAsync(stackName); if (!canDelete) { return; } var confirmDelete = _consoleUtilities.AskYesNoQuestion($"Are you sure you want to delete {stackName}?", YesNo.No); if (confirmDelete == YesNo.No) { return; } _interactiveService.WriteLine($"{stackName}: deleting..."); var monitor = new StackEventMonitor(stackName, _awsClientFactory, _consoleUtilities); try { await _cloudFormationClient.DeleteStackAsync(new DeleteStackRequest { StackName = stackName }); // Fire and forget the monitor // Monitor updates the stdout with current status of the CloudFormation stack var _ = monitor.StartAsync(); await WaitForStackDelete(stackName); if (_session != null) { await _localUserSettingsEngine.DeleteLastDeployedStack(stackName, _session.ProjectDefinition.ProjectName, _session.AWSAccountId, _session.AWSRegion); } _interactiveService.WriteLine($"{stackName}: deleted"); } finally { // Stop monitoring CloudFormation stack status once the deletion operation finishes monitor.Stop(); } }
/// <summary> /// Deletes given CloudFormation stack /// </summary> /// <param name="stackName">The stack name to be deleted</param> /// <exception cref="FailedToDeleteException">Thrown when deletion fails</exception> public async Task ExecuteAsync(string stackName) { var canDelete = await CanDeleteAsync(stackName); if (!canDelete) { return; } var confirmDelete = _consoleUtilities.AskYesNoQuestion($"Are you sure you want to delete {stackName}?", ConsoleUtilities.YesNo.No); if (confirmDelete == ConsoleUtilities.YesNo.No) { return; } _interactiveService.WriteLine($"{stackName}: deleting..."); var monitor = new StackEventMonitor(stackName, _awsClientFactory, _interactiveService, _session); try { await _cloudFormationClient.DeleteStackAsync(new DeleteStackRequest { StackName = stackName }); // Fire and forget the monitor // Monitor updates the stdout with current status of the CloudFormation stack var _ = monitor.StartAsync(); await WaitForStackDelete(stackName); _interactiveService.WriteLine($"{stackName}: deleted"); } catch (AmazonCloudFormationException) { throw new FailedToDeleteException($"Failed to delete {stackName} stack."); } finally { // Stop monitoring CloudFormation stack status once the deletion operation finishes monitor.Stop(); } }