in packages/cli/internal/pkg/cli/account_deactivate.go [66:106]
func (o *accountDeactivateOpts) Execute() error {
stackDeletionTrackers := make(map[string]chan cfn.DeletionResult)
bootstrapStackName := awsresources.RenderBootstrapStackName()
var bootstrapStackId string
for _, stack := range o.stacks {
if stack.Name == bootstrapStackName {
bootstrapStackId = stack.Id
} else {
log.Debug().Msgf("Deleting stack '%s'", stack.Name)
tracker, err := o.cfnClient.DeleteStack(stack.Id)
if err != nil {
return err
}
stackDeletionTrackers[stack.Name] = tracker
}
}
for stackName, tracker := range stackDeletionTrackers {
deletionResult := <-tracker
if deletionResult.Error != nil {
return fmt.Errorf("failed to delete stack '%s: %w", stackName, deletionResult.Error)
}
log.Debug().Msgf("Stack '%s' has been successfully deleted!", stackName)
}
// delete last, the bootstrap stack owns the cfn-exec role cloudformation assumes to delete other stack resources
if bootstrapStackId != "" {
log.Debug().Msgf("Deleting stack '%s'", bootstrapStackName)
tracker, err := o.cfnClient.DeleteStack(bootstrapStackId)
if err != nil {
return err
}
deletionResult := <-tracker
if deletionResult.Error != nil {
return fmt.Errorf("failed to delete stack '%s: %w", bootstrapStackName, deletionResult.Error)
}
log.Debug().Msgf("Stack '%s' has been successfully deleted!", bootstrapStackName)
}
return nil
}